over 3 years ago

延續前一篇請看這邊 安裝 Hadoop 2.2 完全分布式

0.準備軟體&環境

zookeeper-3.4.5.tar.gz
hbase-0.96.1.1-hadoop2-bin.tar.gz

虛擬機四台加上之前運行的Hadoop,架構上如下

電腦名稱 IP Hadoop的服務 Zookeeper的服務 HBase的服務
master 192.168.200.101 NameNode、SecondaryNameNode、ResourceManager QuorumPeerMain HMaster
slave1 192.168.200.102 DataNode、NodeManager X HRegionServer
slave2 192.168.200.103 DataNode、NodeManager X HRegionServer
slave3 192.168.200.104 DataNode、NodeManager X HRegionServer

1.安裝 Zookeeper

這階段使用 hduser 用戶身分執行

cd /opt
sudo wget http://apache.stu.edu.tw/zookeeper/zookeeper-3.4.5/zookeeper-3.4.5.tar.gz
sudo tar zxvf zookeeper-3.4.5.tar.gz
sudo mv zookeeper-3.4.5 zookeeper
sudo chown -R hduser:hadoop /opt/zookeeper
cp /opt/zookeeper/conf/zoo_sample.cfg /opt/zookeeper/conf/zoo.cfg

vi /opt/zookeeper/conf/zoo.cfg
#修改為你要放myid檔案的路徑
dataDir=/home/hduser/zookeeper
#增加
server.1=master:2888:3888

#處理myid檔案
mkdir /home/hduser/zookeeper

cat > /home/hduser/zookeeper/myid << EOF
1
EOF

備註:
在你指定的dataDir目錄下新建一個文件myid,在裡面添加你指定的server編號。例如,你為hostname名為master的指定了如下配置server.1=master:2888:3888,所以它的編號應該是1,
將zookeeper分發到其他機器。然後修改對應的myid文件內容為之前給其指定的編號。如slave1為2,slave2為3.

啟動(好像會在所在的資料夾寫一些檔案,所以切換到可寫檔權限的資料夾)

cd /home/hduser/zookeeper
/opt/zookeeper/bin/zkServer.sh start

zookeeper啟動結果

使用jps檢查

停止

/opt/zookeeper/bin/zkServer.sh stop

2.安裝 HBase

這階段使用 hduser 用戶身分執行

cd /opt
sudo wget http://apache.stu.edu.tw/hbase/hbase-0.96.1.1/hbase-0.96.1.1-hadoop2-bin.tar.gz
sudo tar zxvf hbase-0.96.1.1-hadoop2-bin.tar.gz
sudo mv hbase-0.96.1.1-hadoop2 hbase
sudo chown -R hduser:hadoop /opt/hbase

這邊因為我另外安裝了Zookeeper,所以HBASE_MANAGES_ZK為false不由HBase附帶啟動

cat >> /opt/hbase/conf/hbase-env.sh << EOF
export JAVA_HOME=/usr/java/jdk1.6.0_45
export HBASE_MANAGES_ZK=false
EOF
hbase-site.xml
cat > /opt/hbase/conf/hbase-site.xml << EOF
<?xml version="1.0"?>
<configuration>
  <property>
    <name>hbase.rootdir</name>
    <value>hdfs://master:9000/hbase</value>
  </property>
  <property>
    <name>hbase.master</name>
    <value>hdfs://master:60000</value>
  </property>
  <property>
    <name>hbase.cluster.distributed</name>
    <value>true</value>
  </property>
  <property>
    <name>hbase.zookeeper.property.clientPort</name>
    <value>2181</value>
  </property>
  <property>
    <name>hbase.zookeeper.quorum</name>
    <value>master</value>
  </property>
  <property>  
    <name>hbase.zookeeper.property.dataDir</name>
    <value>/home/hduser/zookeeper</value>  
  </property>
  <property>  
    <name>hbase.client.scanner.caching</name>
    <value>200</value>  
  </property>
  <property>
    <name>hbase.balancer.period</name>
    <value>300000</value>
  </property>
  <property>
    <name>hbase.client.write.buffer</name>
    <value>10485760</value>
  </property>
  <property>
    <name>hbase.hregion.majorcompaction</name>
    <value>7200000</value>
  </property>
  <property>
    <name>hbase.hregion.max.filesize</name>
    <value>67108864</value>
  </property>
  <property>
    <name>hbase.hregion.memstore.flush.size</name>
    <value>1048576</value>
  </property>
  <property>
    <name>hbase.server.thread.wakefrequency</name>
    <value>30000</value>
  </property>
</configuration>
EOF

備註:註:如果有多個zookeeper服務hbase.zookeeper.quorum應該改成這樣

<property>  
  <name>hbase.zookeeper.quorum</name>  
  <value>master,node,slave</value>  
</property>  

因為HBase的根目錄是設定在hdfs之上,所以在hdfs建立HBase的資料夾

hadoop fs -mkdir /hbase

設定slave主機名稱

cat > /opt/hbase/conf/regionservers << EOF
slave1
slave2
slave3
EOF

設定環境變數

vi ~/.bashrc
export HBASE_HOME=/opt/hbase
export PATH=$PATH:$HBASE_HOME/bin
#立即生效
source ~/.bashrc
#驗證
hbase version

問題修正
移除slf4j-log4j12-1.6.4.jar,因為Hadoop也有這個library造成重複載入會出現警告

rm /opt/hbase/lib/slf4j-log4j12-1.6.4.jar

同步你的Hbase(使用 root 用戶身份)

scp -rp /opt/hbase slave1:/opt
ssh slave1 "chown -R hduser:hadoop /opt/hbase"

啟動&關閉Hbase(使用 hduser 用戶身份)

/opt/hbase/bin/start-hbase.sh
/opt/hbase/bin/stop-hbase.sh

啟動結果


在Master上的服務

在Slave上的服務

HBase Web UI: http://master:60010

UI長這樣,應該要可以看到有三台節點在上面

測試

###啟動HQL介面
hbase shell
create 't1','f1','f2','fn'
describe 't1'
put 't1', 'r1', 'f1', 'v1'
get 't1', 'r1'
truncate 't1'
disable 't1'
drop 't1'

發現HBase有提供rest接口,對網路熟的人可以直接利用接口操作

前景啟動rest接口

/opt/hbase/bin/hbase rest start

啟動結果畫面

在上圖可以看到此服務在聽8085跟8080兩個port,不過這邊是要用8080進行操作

檢查版本資訊
http://master:8080/version/

取得t1表格的結構(等於describe 't1')
http://master:8080/t1/schema

取得t1表格中r1的資料(等於get 't1', 'r1')
http://master:8080/t1/r1/


但是這邊看到的值並非我之前放的v1,應該是還要再經過轉換吧(待處理)

補充
因為是另外裝的zookeeper,所以如果先停zookeeper會造成HBase無法停止,要記得先停HBase!

參考資料來源
http://blog.csdn.net/iam333/article/details/16358087
https://huiwenhan.wordpress.com/tag/zookeeper/
http://abloz.com/2012/06/01/hbase-slf4j.html
http://blog.pureisle.net/archives/1859.html
http://bitsofgyan.com/hadoop-hbase-installation/

HBase Shell指令
http://trac.nchc.org.tw/cloud/wiki/NCHCCloudCourse100929_2_USE

HBase rest接口
http://hi.baidu.com/huareal/item/c5005ed57974e23049e1dd03

http://qicen.iteye.com/blog/1968741
http://melin.iteye.com/blog/1848637

← Hadoop 2 完全分佈式 安裝步驟 用Eclipse開發HBase應用程式 →
 
comments powered by Disqus