HBase的部署
- 2019 年 10 月 6 日
- 筆記
HBase的部署方式包括:
部署模式 |
說明 |
---|---|
單機模式 |
常用於本地開發 |
偽集群模式 |
使用HBase自帶的zookeeper |
集群模式 |
使用HBase自帶的zookeeper |
集群模式 |
單獨安裝zookeeper |
HBase的安裝
本文的HBase安裝是在Hadoop已經安裝好的基礎上實現的,所以之前要導出JAVA_HOME、HADOOP_HOME( 單機模式不需要,偽分佈式模式和分佈式模式需要)等環境變量以及配置好SSH互信等。 0 公共配置 導出HBase的環境變量
export HBASE_HOME=/root/software/hbase-1.2.1 export PATH=$PATH:$HBASE_HOME/bin
查看hbase版本 : hbase version
單機模式
配置hbase-env.sh 在hbase-env.sh添加如下內容
export JAVA_HOME=/usr/lib/jvm/java-7-openjdk-amd64 export HBASE_MANAGES_ZK=true
說明:其中HBASE_MANAGES_ZK=true,表示由hbase自己管理zookeeper,不需要單獨的zookeeper,HBASE_MANAGES_ZK=false則表示使用獨立部署的zookeeper。 配置hbase-site.xml
<configuration> <property> <name>hbase.rootdir</name> <value>file:///data/hbase</value> </property> </configuration>
說明:hbase.rootdir,用於指定HBase數據的存儲位置,因為如果不設置的話,hbase.rootdir默認為/tmp/hbase-${user.name},這意味着每次重啟系統都會丟失數據。此配置中HBase直接使用默認的文件系統。 啟動和停止
$HBASE_HOME/bin/start-hbase.sh $HBASE_HOME/bin/stop-hbase.sh
偽集群模式
配置hbase-env.sh 在hbase-env.sh添加如下內容
export JAVA_HOME=$JAVA_HOME export HBASE_CLASSPATH=$HADOOP_HOME/etc/hadoop export HBASE_MANAGES_ZK=true
HBASE_MANAGES_ZK=true,表示由hbase自己管理zookeeper,不需要單獨的部署zookeeper。 export HBASE_CLASSPATH="", 表示使用hdfs作為HBase的儲存。
配置hbase-site.xml
<configuration> <property> <name>hbase.rootdir</name> <value>hdfs://master:8020/hbase</value> </property> <property> <name>hbase.cluster.distributed</name> <value>true</value> </property> </configuration>
說明:
base.rootdir,用於指定HBase數據的存儲位置,此時已經使用了hdfs。 hbase.cluster.distributed設置集群處於分佈式模式;
啟動和停止 啟動(包括啟動hdfs和hbase)
$HBASE_HOME/sbin/start-dfs.sh $HBASE_HOME/bin/start-hbase.sh
停止(包括停止hbase和hdfs)
$HBASE_HOME/bin/stop-hbase.sh $HBASE_HOME/sbin/stop-dfs.sh
集群模式(使用hbase自帶的zookeeper)
配置hbase-env.sh 在hbase-env.sh添加如下內容
export JAVA_HOME=$JAVA_HOME export HBASE_CLASSPATH=$HADOOP_HOME/etc/hadoop export HBASE_MANAGES_ZK=true
HBASE_MANAGES_ZK=true,表示使用hbase自帶的zookeeper。
配置hbase-site.xml
<configuration> <property> <name>hbase.rootdir</name> <value>hdfs://master:8020/hbase</value> </property> <property> <name>hbase.cluster.distributed</name> <value>true</value> </property> <property> <name>hbase.master</name> <value>master:6000</value> </property> <property> <name>hbase.zookeeper.quorum</name> <value>slave1:2181,slave2:2181,slave3:2181</value> </property> <property> <name>zookeeper.znode.parent</name> <value>/hbase</value> </property> <property> <name>hbase.zookeeper.property</name> <value>/data/zookeeper/data</value> </property> </configuration>
說明:
base.rootdir 用於指定HBase數據的存儲位置; hbase.cluster.distributed 設置集群處於分佈式模式; hbase.master 指定hbase的hmaster的主機名和端口 ; hbase.zookeeper.quorum 指定使用zookeeper的主機地址,必須是奇數個; hbase.zookeeper.property 指定zookeeper數據存儲目錄,默認路徑是/tmp,如果不配置,重啟之後數據將被清空。
配置regionservers 在regionservers文件中添加HBase的slave節點,類似hadoop中的slaves,一行一個。
slave1 slave2 slave3
啟動和停止 啟動(包括啟動hdfs和hbase)
$HBASE_HOME/sbin/start-dfs.sh $HBASE_HOME/bin/start-hbase.sh
停止(包括停止hbase和hdfs)
$HBASE_HOME/bin/stop-hbase.sh $HBASE_HOME/sbin/stop-dfs.sh
HBase啟動成功之後:
master節點上的進程有:HMaster slave節點上的進程有:HRegionServer、HQuorumPerr
集群模式(單獨安裝zookeeper)
安裝zookeeper zookeeper的下載和解壓這裡不贅述,直接開始zookeeper集群的配置。 首先,導出zookeeper環境編輯,添加如下內容到~/.bash_profile中
export ZOOKEEPER_HOME=/root/software/zookeeper-3.4.10 export PATH=$PATH:$ZOOKEEPER_HOME/bin
解壓zookeeper之後,進入conf目錄,拷貝生成zoo.cfg cp zoo_sample.cfg zoo.cfg
配置zoo.cfg。在zoo.cfg中添加如下內容
clientPort=2181 dataDir=/data/zookeeper/zk_data server.1=master:2888:3888 server.2=slave2:2888:3888 server.3=slave3:2888:3888
說明::第一個端口是master和slave之間的通信端口,默認是2888,第二個端口是leader選舉的端口,集群剛啟動的時候選舉或者leader掛掉之後進行新的選舉的端口默認是3888。 分發解壓的zookeeper到slave2、slave3
scp -r /root/software/zookeeper-3.4.10 slave2:/root/software/zookeeper-3.4.10 scp -r /root/software/zookeeper-3.4.10 slave3:/root/software/zookeeper-3.4.10
創建數據目錄
ssh root@master 'mkdir -p /data/zookeeper/zk_data' ssh root@slave2 'mkdir -p /data/zookeeper/zk_data' ssh root@slave3 'mkdir -p /data/zookeeper/zk_data'
寫入myid
ssh root@master 'echo 1 > /data/zookeeper/zk_data/myid' ssh root@slave2 'echo 2 > /data/zookeeper/zk_data/myid' ssh root@slave3 'echo 3 > /data/zookeeper/zk_data/myid'
注意:本文部署的zookeeper集群包含三個節點,分別是master、slave1、slave2。寫入myid的值要和zoo.cfg中server後數值對應。 啟動、停止、查看zookeeper狀態
ssh root@master '/root/software/zookeeper-3.4.10/bin/zkServer.sh start' ssh root@slave2 '/root/software/zookeeper-3.4.10/bin/zkServer.sh start' ssh root@slave3 '/root/software/zookeeper-3.4.10/bin/zkServer.sh start' ssh root@master '/root/software/zookeeper-3.4.10/bin/zkServer.sh status' ssh root@slave2 '/root/software/zookeeper-3.4.10/bin/zkServer.sh status' ssh root@slave3 '/root/software/zookeeper-3.4.10/bin/zkServer.sh status' ssh root@master '/root/software/zookeeper-3.4.10/bin/zkServer.sh stop' ssh root@slave2 '/root/software/zookeeper-3.4.10/bin/zkServer.sh stop' ssh root@slave3 '/root/software/zookeeper-3.4.10/bin/zkServer.sh stop'
配置hbase-env.sh
export JAVA_HOME=$JAVA_HOME export HBASE_CLASSPATH=$HADOOP_HOME/etc/hadoop export HBASE_MANAGES_ZK=false
其中HBASE_MANAGES_ZK=false,表示不使用hbase自帶的zookeeper,而使用獨立部署的zookeeper。 配置hbase-site.xml
<configuration> <property> <name>hbase.rootdir</name> <value>hdfs://master:8020/hbase</value> </property> <property> <name>hbase.cluster.distributed</name> <value>true</value> </property> <property> <name>hbase.master</name> <value>master:6000</value> </property> <property> <name>hbase.zookeeper.quorum</name> <value>slave1:2181,slave2:2181,slave3:2181</value> </property> <property> <name>zookeeper.znode.parent</name> <value>/hbase</value> </property> <property> <name>hbase.zookeeper.property</name> <value>/data/zookeeper/data</value> </property> </configuration>
說明:
base.rootdir 用於指定HBase數據的存儲位置; hbase.cluster.distributed 設置集群處於分佈式模式; hbase.master 指定hbase的hmaster的主機名和端口 ; hbase.zookeeper.quorum 指定使用zookeeper的主機地址,必須是奇數個; hbase.zookeeper.property 指定zookeeper數據存儲目錄,默認路徑是/tmp,如果不配置,重啟之後數據將被清空。
配置regionservers 在regionservers文件中添加HBase的slave節點,類似hadoop中的slaves,一行一個。
slave1 slave2 slave3
啟動和停止 先啟動zookeeper,參考上述「啟動、停止、查看zookeeper狀態」。 啟動(包括啟動hdfs和hbase)
$HBASE_HOME/sbin/start-dfs.sh $HBASE_HOME/bin/start-hbase.sh
停止(包括停止hbase和hdfs)
$HBASE_HOME/bin/stop-hbase.sh $HBASE_HOME/sbin/stop-dfs.sh
HBase啟動成功之後: master節點上的進程有:HMaster、QuorumPeerMain slave節點上的進程有:HRegionServer、QuorumPeerMain 說明:hbase的master節點和slave節點中都出現了QuorumPeerMain(就是zookeeper進程)而不是QuorumPeer進程,表示此時hbase使用的是獨立的zookeeper。
HBase的操作
下面的操作主要是在hbase的shell中操作的,進入hbase shell
hbase shell
創建表
create 'student','Sname','Ssex','Sage','Sdept','course' create 'teacher',{NAME=>'username',VERSIONS=>5} // 創建表示指定保存的版本數
查看錶詳情
describe 'student'
顯示所有的表
list
插入數據
put 'student','95001','Sname','LiYing' put 'student','95001','Ssex','Male' put 'student','95001','course:math','80' put 'student','95001','course:english','90' put 'student','95002','Sname','ZhangYiDa' put 'student','95002','Ssex','Femal' put 'student','95002','course:math','90' put 'student','95002','course:english','70'
注意:一次只能為一個表的一行數據的一個列,也就是一個單元格添加一個數據,所以直接用shell命令插入數據效率很低,在實際應用中,一般都是利用編程操作數據。當運行命令:put 『student』,』95001』,』Sname』,』LiYing』時,即為student表添加了學號為95001,名字為LiYing的一行數據,其行鍵為95001。 查詢數據 HBase中有兩個用於查看數據的命令: ① get命令,用於查看錶的某一行數據; ② scan命令用於查看某個表的全部數據
get 'student','95001' get 'student','95001','course' get 'student','95001','course:math' scan 'student'
刪除數據 在HBase中用delete以及deleteall命令進行刪除數據操作,它們的區別是: ① delete用於刪除一個數據,是put的反向操作; ② deleteall操作用於刪除一行數據。
delete 'student','95001','Ssex' deleteall 'student','95001'
修改數據 在添加數據時,HBase會自動為添加的數據添加一個時間戳,故在需要修改數據時,只需直接添加數據,HBase即會生成一個新的版本,從而完成「改」操作,舊的版本依舊保留,系統會定時回收垃圾數據,只留下最新的幾個版本,保存的版本數可以在創建表的時候指定。下面是一個操作的例子:
hbase(main):034:0> get 'student','95001' COLUMN CELL Sname: timestamp=1537497681798, value=LiYing Ssex: timestamp=1537497682400, value=Male course:english timestamp=1537497872225, value=90 course:math timestamp=1537497681859, value=80 4 row(s) in 0.0310 seconds hbase(main):035:0> put 'student','95001','course:english','100' 0 row(s) in 0.0130 seconds hbase(main):036:0> get 'student','95001' COLUMN CELL Sname: timestamp=1537497681798, value=LiYing Ssex: timestamp=1537497682400, value=Male course:english timestamp=1537498062541, value=100 course:math timestamp=1537497681859, value=80 4 row(s) in 0.0130 seconds
刪除表 刪除表有兩步,第一步先讓該表不可用,第二步刪除表。直接drop未disable的表會失敗。
disable 'student' drop 'student'
查詢歷史的表
create 'teacher',{NAME=>'username',VERSIONS=>5} put 'teacher','91001','username','Mary' put 'teacher','91001','username','Mary1' put 'teacher','91001','username','Mary2' put 'teacher','91001','username','Mary3' put 'teacher','91001','username','Mary4' put 'teacher','91001','username','Mary5' get 'teacher','91001',{COLUMN=>'username',VERSIONS=>5} hbase(main):064:0> get 'teacher','91001',{COLUMN=>'username',VERSIONS=>5} COLUMN CELL username: timestamp=1537498459746, value=Mary5 username: timestamp=1537498455244, value=Mary4 username: timestamp=1537498455193, value=Mary3 username: timestamp=1537498455174, value=Mary2 username: timestamp=1537498455149, value=Mary1 5 row(s) in 0.0110 seconds
退出hbase
exit