Hbase

1:Hdfs分佈式文件系統存的文件,文件存儲。
2:Hbase是存儲的數據,海量數據存儲,做用是緩存的數據,將緩存的數據滿後寫入到Hdfs中。
3:hbase集羣中的角色:
  (1)、一個或者多個主節點,Hmaster;
  (2)、多個從節點,HregionServer;
四、hbase集羣的配置是一主多從或者多主多從(必定注意區分和hive之間的關係,切記),一主多從能夠動態添加主節點,配置成多主多從。

5臺機器IP:192.168.70.101(c7001)、192.168.70.102(c7002)、192.168.70.103(c7003)、192.168.70.104(c7004)、192.168.70.105(c7005)
1.解壓縮hbase的軟件包,使用命令:
tar -zxvf hbase-1.3.0-bin.tar.gz  
2.進入hbase的配置目錄,在hbase-env.sh文件裏面加入java環境變量.即:
JAVA_HOME=export JAVA_HOME=/opt/jdk1.8.0_121
關閉HBase自帶的Zookeeper,使用Zookeeper集羣:
export  HBASE_MANAGES_ZK=false  

3. 編輯hbase-site.xml ,添加配置文件:

<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
  <property>
    <name>hbase.rootdir</name>
    <value>hdfs://c7001:8020/hbase</value>
  </property>
  <property>
    <name>hbase.cluster.distributed</name>
    <value>true</value>
  </property>
  <property>
    <name>hbase.zookeeper.quorum</name>
    <value>c7003,c7004,c7005</value>
  </property>
  <property>
    <name>hbase.zookeeper.property.dataDir</name>
    <value>/opt/hbase-1.3.0/tmp/zk/data</value>
  </property>
</configuration>

4. 編輯配置目錄下面的文件regionservers. 命令:
vi   regionservers    
加入以下內容:
c7004
c7005
5. 把Hbase複製到其餘機器,命令以下:
[vagrant@c7003 opt]$ scp -r hbase-1.3.0 vagrant@c7004:/opt/
[vagrant@c7003 opt]$ scp -r hbase-1.3.0 vagrant@c7005:/opt/
6. 在c7003機器開啓hbase服務。命令以下:
[vagrant@c7003 hbase-1.3.0]$ bin/start-hbase.sh   

啓動全部的hbase
    1:分別啓動zk
        ./zkServer.sh start
    2:啓動hbase集羣
        start-dfs.sh
    3:啓動hbase,在主節點上運行:
        start-hbase.sh
經過瀏覽器訪問hbase管理頁面        c7001:60010

HBase的一些基本命令
一、#建立HBase數據表,若是不給定namespace的名稱,默認建立在default命名空間中。
hbase(main):032:0> create 'myTables',{NAME => 'base_info',VERSIONS => 3},{NAME => 'extra_info'}

hbase(main):016:0> create 'user','info01','info02'
#建立帶有命名空間的hbase數據表,20180408是命名空間,user是表名稱,col1是列簇。
hbase(main):033:0> create '20180408:user','col1'
hbase(main):034:0> list

二、#查看有什麼表,顯示hbase表名稱,相似mysql中的show tables;能夠經過指定命名空間來查看對應命名空間中的表,默認是顯示全部用戶表,也支持模糊查詢。相似命名list_namespace_table查看對命名空間內有那些表。
hbase(main):032:0> list

三、#查看錶結構
describe 'myTables'
hbase(main):016:0> describe '20180408:user'

四、#禁用表
disable 'myTables'

五、#刪除表,刪除以前要先禁用表。刪除用戶表以前須要將表設置爲disable,而後刪除。其實在hbase中若是須要對已有表進行ddl操做,均須要將其disable,在ddl操做完成後,再進行enable操做便可。
drop 'myTables'
hbase(main):040:0> disable '20180408:test'
hbase(main):041:0> drop '20180408:test'
hbase(main):042:0> list
5.1 #delete命令是刪除指定table的指定rowkey的指定列,也就是說delete命令適合刪除列的狀況。若是須要刪除固然rowkey的全部列數據,那麼可使用deleteall命令。
hbase(main):010:0> delete '20180408:user','row1','col1:sex'
hbase(main):012:0> deleteall '20180408:user','row1'
5.2 #清空數據表,truncate命令的做用是清空數據庫,當咱們數據庫中的數據比較多的時候,咱們能夠選擇該命令將數據庫清空。底層原理是禁用表,刪除表,建立表。
hbase(main):015:0> truncate '20180408:user'

六、#插入數據,插入一個表的一行的一列的一個值,最後一個字段不帶。hbase的put命令是進行數據添加的命令。
#不帶分號
#put '表名稱','行','base_info/extra_info:列名稱','列值'
put 'myTables','0001','base_info:name','張三'
put 'myTables','0001','base_info:age','22'
put 'myTables','0001','base_info:sex','男'
put 'myTables','0001','extra_info:addr','河南省'
#帶有命名空間的hbase數據表插入操做:
hbase(main):001:0> put '20180408:user','row1','col1:name','zhangsan'
hbase(main):004:0> put '20180408:user','row1','col1:sex','nan'
hbase(main):005:0> put '20180408:user','row1','col1:age','20'

七、#查詢數據,查詢某一行。get命名的做用是獲取對應表中對應rowkey的數據。默認獲取最新版本的所有列數據,能夠經過時間戳指定版本信息,也能夠指定獲取的列。
get 'myTables','0001'
#row1是本身建立的行,注意,col1是列簇,都是本身建立的。
hbase(main):008:0> get '20180408:user','row1'
#查看指定行的指定列信息。
hbase(main):009:0> get '20180408:user','row1','col1:name'

get 'myTables','0001',{COLUMN => 'base_info:name',VERSION => 10}

#scan命令是hbase的另外一種檢索方式,是經過範圍查找hbase中的數據。默認狀況下是獲取table的所有數據,能夠經過指定column和filter等相關信息進行數據的過濾。
scan 'myTables'
#能夠查看插入的數據信息
hbase(main):006:0> scan '20180408:user'

#scan提供多種filter命令,經常使用的filter命令以下所示:ColumnPrefixFilter過濾列名是某前綴的,MultipleColumnValueExcludeFilter過濾多列的前綴只要知足其中一個的前綴,RowFilter知足那種類型的過濾,SingleColumnValueFilter某列的value值過濾,SingleColumnValueExcludeFilter過濾某列不符合給定的value值等等。須要注意的是,在指定的value以前須要加'binary';
hbase(main):012:0> scan '20180408:user',{FILTER=>"MultipleColumnPrefixFilter('n')"}
hbase(main):013:0> scan '20180408:user',{FILTER=>"MultipleColumnPrefixFilter('n','a')"}
hbase(main):001:0> scan '20180408:user',{FILTER=>"ColumnPrefixFilter('n')"}
hbase(main):002:0> scan '20180408:user',{FILTER=>"RowFilter(=,'binary:row1')"},注意,rowfilter須要給定兩個參數,第一個參數:=,>,<,>=,<=。第二個參數是二進制的字符串數組。
hbase(main):001:0> scan '20180408:user',{FILTER=>"SingleColumnValueFilter('col1','name',=,'binary:zhangsan')"}

八、#修改值操做,默認不顯示歷史值
put 'myTables','0001','base_info:name','李四'

九、namespace的相關命令:
#建立命名空間,create_namespace命令
hbase(main):019:0> create_namespace '20180408',{'comment'=>'this is my namespace'}
#顯示命名空間,顯示全部存在的命名空間,可使用正則,能夠驗證本身建立的命名空間是否建立成功,也能夠去hdfs上面查看。
hbase(main):020:0> list_namespace
hbase(main):020:0> list_namespace '20180408.*'
#刪除命名空間,刪除指定的命名空間,注意刪除的命名空間內不能有table存在,也就是說只能刪除空的namespace。
hbase(main):021:0> drop_namespace '20180408'
#顯示命名空間的相關信息。describe_namespace命令。
hbase(main):026:0> describe_namespace '20180408'
#查看這個命名空間下面的hbase數據表。
hbase(main):035:0> list_namespace_table '20180408'

十、count命令是統計hbase錶行數的一個命令,因爲至關於一個內置的mapreduce程序,因此當數據量比較大的時候能夠選擇使用協處理器方式計算行數。默認狀況下INTERVAL是1000間隔數,CACHE是10。
hbase(main):001:0> count '20180408:user'
hbase(main):002:0> count '20180408:user',INTERVAL=2java

相關文章
相關標籤/搜索