天天看點

Hbase叢集部署前要說明Zookeeper叢集部署:Hadoop(hdfs)叢集部署:Hbase叢集部署:

前要說明

1.叢集說明

Hbase在完全分布式環境下,由Master程序負責管理RegionServers叢集的負載均衡以及資源配置設定,ZooKeeper負責叢集中繼資料的維護并且監控叢集的狀态以防止單點故障,每個RegionServer會負責具體資料塊的讀寫,HBase所有的資料存儲在HDSF系統上。

master slaver1 slaver2 slaver3 master1主機名(需要現有的主機名替換)

2.版本說明

版本:目前Ubuntu系統,jdk1.7.0_55

Hadoop選的最新穩定版:hadoop-2.7.3  t:16.8.26

Zookeeper選的最新穩定版:zookeeper-3.4.10  t:16.9.3

Hbase最新穩定版:hbase-1.2.5  t:16.10.26

理論上說,這是套系統,從時間更新的情況看也是這樣,但是具體是否相容或有問題得實際搭建看情況。

附加:CDH版本,目前主流生産環境都用這個,連網的情況,隻需下個用戶端,其他自動給配置,問題相對少很多,基本功能免費,進階功能收費。但是一般情況基本功能就可以,選擇的換肯定是CDH5,但是具體哪個5點幾沒有研究過(理論上說應該都可以)

3.所有伺服器環境配置說明

1.基本要求,為友善配置要求所有機器的所有安裝路徑檔案路徑及使用者名

解壓指令:

tar zxvf jdk-7u80-linux-x64.tar.gz 解壓jdk

tar zxvf zookeeper-3.4.10.tar.gz 解壓zk

tar zxvf hadoop-2.7.3.tar.gz 解壓hadoop

tar zxvf hbase-1.2.5-bin.tar.gz 解壓hbase

安裝順序jdk,zk,hadoop,hbase

啟動順序zk,hadoop,hbase

關閉順序hbase,hadoop,zk

2.修改/etc/profile檔案

即添加環境變量

在最後添加如下内容:

#java

export JAVA_HOME=/home/hadoop/jdk1.7.0_80

export PATH=$JAVA_HOME/bin:$PATH

#zk

export ZOOKEEPER=/home/hadoop/zookeeper-3.4.10

export PATH=$ZOOKEEPER/bin:$PATH

#hadoop

export HADOOP_HOME=/home/hadoop/hadoop-2.7.3

export PATH=$JAVA_HOME/bin:$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$PATH

#hbase

export HBASE_HOME=/home/hadoop/hbase-1.2.5

export PATH=$HBASE_HOME/bin:$PATH

執行source /etc/profile是環境變量生效

如果使用export PATH=$PATH: $JAVA_HOME/bin需切換jdk版本

$ sudo update-alternatives –install /usr/bin/javah javah /home/hadoop/jdk1.7.0_80/bin/javah

$ sudo update-alternatives –install /usr/bin/javac javac/home/hadoop/jdk1.7.0_80/bin/javac

$ sudo update-alternatives –install /usr/bin/javaws javaws /home/hadoop/jdk1.7.0_80/bin/javaws

$ sudo update-alternatives –install /usr/bin/java java /home/hadoop/jdk1.7.0_80/bin/java

$ sudo update-alternatives –install /usr/bin/jar jar/home/hadoop/jdk1.7.0_80/bin/jar

$ sudo update-alternatives –config java

$ sudo update-alternatives –config javac

$ sudo update-alternatives –config javah

$ sudo update-alternatives –config jar

3 配置host 

配置所有機器主機名及ip位址

修改/etc/hosts 

将127的ip全部用#注掉

并添加下面内容:

192.168.1.171          master

192.168.1.172          slaver1

192.168.1.173    slaver2

192.168.1.174    slaver3

192.168.1.175    master1

4建立ssh無密碼登入 

 為了友善起見,所有機器都為無密碼通路:

https://blog.csdn.net/dawn_rainbow/article/details/83746525

Zookeeper叢集部署:

1)建立配置檔案conf/zoo.cfg

mv zoo_sample.cfg zoo.cfg 

2)更改conf/zoo.cfg的内容

# ZK中的一個時間單元。ZK中所有時間都是以這個時間單元為基礎,進行整數倍配置的

tickTime=2000 

#Leader-Follower初始通信時限, Follower在啟動過程中,會從Leader同步所有最新資料,然後确定自己能夠對外服務的起始狀态。Leader允許Follower在 initLimit 時間(10*tickTime)内完成這個工作

initLimit=10 

#Leader-Follower同步通信時限,在運作過程中,Leader負責與ZK叢集中所有機器進行通信,例如通過一些心跳檢測機制,來檢測機器的存活狀态。如果L發出心跳包在syncLimit(2*tickTime)之後,還沒有從F那裡收到響應,那麼就認為這個F已經不線上了。注意:不要把這個參數設定得過大,否則可能會掩蓋一些問題

syncLimit=2 

#存儲快照檔案snapshot的目錄。預設情況下,事務日志也會存儲在這裡。建議同時配置參數dataLogDir, 事務日志的寫性能直接影響zk性能(在啟動zk前要建好這個目錄)

dataDir= /home/hadoop/data/zookeeper

#用戶端連接配接端口

clientPort=2181

#伺服器名稱與位址:叢集資訊(伺服器編号,伺服器位址,LF通信端口,選舉端口)必須為奇數個伺服器(本機用0.0.0.0)

server.1=master:2888:3888

server.2=slave1:2888:3888

server.3=slave2:2888:3888

server.4=slave3:2888:3888

server.5=master1:2888:3888

3)更改conf/log4j.properties的内容

第4行

zookeeper.log.dir=/home/hadoop/logs/zookeeper/

第6行

zookeeper.log.threshold=INFO

第7行

zookeeper.tracelog.dir=/home/hadoop/logs/zookeeper/

4)更改bin/ zkEnv.sh

第56行

ZOO_LOG_DIR="/home/hadoop/logs/zookeeper/"

5)拷貝zookeeper到每台機器

相關指令建文檔開頭

6)在每台的機器的dataDir目錄下,建立檔案myid,輸入對應的編号

建立檔案:touch myid

即server.X後面的X

7)啟動zookeeper

如配置環境變量直接執行如下指令,若沒有配置需進到zookeeper安裝文檔下的bin目錄

每台機器都需要啟動

zkServer.sh start  

剛起來的時候會報錯,全部機器都起來後,就不會報錯了

8)測試

Java代碼

zkServer.sh status

出現:

Mode:leader或Mode:follower

證明啟動成功

Hadoop(hdfs)叢集部署:

1.修改etc/hadoop/hadoop-env.sh

修改如下内容:

第25行修改jdk路徑

export JAVA_HOME=/home/hadoop/jdk1.7.0_80

第72行去掉#,并修改日志位址

export HADOOP_LOG_DIR=/home/hadoop/logs/hadoop

2.修改etc/hadoop/core-site.xml, 

在<configuration>标簽中添加如下内容:

<property>

        <name>fs.defaultFS</name>

        <value>hdfs://myHadoop</value>

                   <description>表示hdfs路徑的邏輯名稱hadoop 2.x以後叫fs.defaultFS </description>

         </property>

         <property>

        <name>hadoop.tmp.dir</name>

        <value>/home/hadoop/hdfs/tmp</value>

        <description>表示hadoop存放資料的目錄,即包括NameNode的資料,

                   也包括DataNode的資料。該路徑任意指定,隻要實際存在該檔案夾即可</description>

         </property>

         <property>

      <name>ha.zookeeper.quorum</name>

      <value>master:2181,master1:2181,slave1:2181,slave2:2181,slave3:2181</value>

         </property>

3.修改etc/hadoop/hdfs-site.xml

在<configuration>标簽中添加如下内容:

<!--指定hdfs預設副本數,預設3 -->

         <property>

                   <name>dfs.replication</name>

                   <value>2</value>

         </property>

         <!--指定hdfs的nameservice為ns,需要和core-site.xml中的保持一緻 -->

         <property>

                   <name>dfs.nameservices</name>

                   <value>myHadoop</value>

         </property>

         <!-- myHadoop下面有兩個NameNode,分别是h1,h2 -->

         <property>

                   <name>dfs.ha.namenodes.myHadoop</name>

                   <value>h1,h2</value>

         </property>

         <!-- h1的RPC通信位址 -->

         <property>

                   <name>dfs.namenode.rpc-address.myHadoop.h1</name>

                   <value>master:9000</value>

         </property>

         <!-- h2的RPC通信位址 -->

         <property>

                   <name>dfs.namenode.rpc-address.myHadoop.h2</name>

                   <value>master1:9000</value>

         </property>

         <!-- h1的http通信位址 -->

         <property>

                   <name>dfs.namenode.http-address.myHadoop.h1</name>

                   <value>master:50070</value>

         </property>

         <!-- h2的http通信位址 -->

         <property>

                   <name>dfs.namenode.http-address.myHadoop.h2</name>

                   <value>master1:50070</value>

         </property>

         <!-- 指定NameNode的中繼資料在JournalNode上的存放位置 -->

         <property>

                   <name>dfs.namenode.shared.edits.dir</name>

                   <value>qjournal://slave1:8485;slave2:8485;slave3:8485/myHadoop</value>

         </property>

         <!-- 開啟NameNode故障時自動切換 -->

    <property>

          <name>dfs.ha.automatic-failover.enabled</name>

          <value>true</value>

    </property>

         <!-- 配置失敗自動切換實作方式 -->

         <property>

                   <name>dfs.client.failover.proxy.provider.myHadoop</name>

                   <value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>

         </property>

         <!-- 配置隔離機制,如果ssh是預設22端口,value直接寫sshfence即可 -->

         <property>

                   <name>dfs.ha.fencing.methods</name>

                   <value>sshfence</value>

         </property>

         <!-- 使用隔離機制時需要ssh免登陸 -->

         <!--

         <property>

                   <name>dfs.ha.fencing.ssh.private-key-files</name>

                   <value>/home/hadoop/.ssh/id_rsa</value>

         </property>

         -->

         <!-- 指定JournalNode在本地磁盤存放資料的位置 -->

         <property>

                   <name>dfs.journalnode.edits.dir</name>

                   <value>/home/hadoop/data/journal</value>

         </property>

         <!-- 在h1和h2上開啟WebHDFS (REST API)功能,不是必須 -->

    <property>

       <name>dfs.webhdfs.enabled</name>

       <value>true</value>

    </property>

         <!--  存貯在本地的名位元組點資料鏡象的目錄,作為名位元組點的備援備份 -->

         <!--

         <property>

        <name>dfs.namenode.name.dir</name>

        <value>file://${hadoop.tmp.dir}/dfs/name</value>

    </property>

         -->

         <!-- 資料節點的塊本地存放目錄 -->

         <!--

    <property>

        <name>dfs.datanode.data.dir</name>

        <value>file://${hadoop.tmp.dir}/dfs/data</value>

    </property>

         -->

4.修改etc/hadoop/slaves,這個是所有datanode的機器 

slave1

slave2

slave3

6.修改etc/hadoop/log4j.properties

第19行

hadoop.log.dir=/home/hadoop/logs/hadoop

7.初始化hadoop 

将配置好的hadoop加壓檔案拷貝到所有其他機器,

注:所有機器路徑必須一緻使用者名一樣

如果已經配置文檔開頭的hadoop環境變量則可以在使用者的根目錄即/home/hadoop/下直接執行下面相關指令,若沒有配置環境變量隻有進到hadoop安裝文檔下相應的sbin即bin目錄下執行

初始化hdfs檔案:

1.在每個journalnode(即slave1,slave2,slave3)節點用如下指令啟動journalnode

sbin/hadoop-daemon.sh start journalnode

驗證:執行jps指令  出現JournalNode證明啟動成功

2.在主namenode(master)節點用格式化namenode

bin /hdfs namenode –format

3.在主namenode(master)節點啟動namenode程序

sbin /hadoop-daemon.sh start namenode

4.在備namenode(master1)節點執行指令

bin/hdfs namenode –bootstrapStandby

說明:這個是把備namenode節點的目錄格式化并把中繼資料從主namenode節點copy過來,并且這個指令不會把journalnode目錄再格式化了
           

5.啟動備namenode(master1)程序

sbin /hadoop-daemon.sh start namenode

驗證:執行jps指令  出現NameNode證明啟動成功

這時候,使用浏覽器通路 http://192.168.1.171:50070 和 http://192.168.1.175:50070 。如果能夠看到兩個頁面,證明NameNode啟動成功了(本機C:\Windows\System32\drivers\etc\hosts必須添加192.168.1.171 master              192.168.1.175 master2   否則拒絕通路)。這時,兩個NameNode的狀态都是standby

6.在其中一個namenode節點下格式化zk

bin/hdfs zkfc –formatZK
           

7.在兩個namenode節點都執行以下指令進行主NameNode選舉

sbin/hadoop-daemon.sh start zkfc

8.在所有datanode節點都執行以下指令啟動datanode

sbin/hadoop-daemon.sh start datanode

9.停止叢集指令

sbin/stop-dfs.sh

8.日常啟停指令

sbin/start-dfs.sh

sbin/stop-dfs.sh

Hbase叢集部署:

1.修改conf/hbase-env.sh

第28行

export JAVA_HOME=/home/hadoop/jdk1.7.0_80

第31行

export HADOOP_HOME=/home/hadoop/hadoop-2.7.3

第48行

export HBASE_LOG_DIR=/home/hadoop/logs/hbase

第129行

export HBASE_MANAGES_ZK=false

2.修改conf/hbase-site.xml

在<configuration>标簽下添加

<property>

    <name>hbase.rootdir</name>

    <value>hdfs://myHadoop/hbase</value>

    <description>設定 hbase 資料庫存放資料的目錄,這裡是放在hadoop hdfs上,這裡要與hadoop的core-site.xml檔案中的fs.defaultFS中的值一緻,然後在後面添加自己的子目錄,我這裡定義是hbase</description>

  </property>

  <property>

    <name>hbase.cluster.distributed</name>

    <value>true</value>

    <description>打開 hbase 分布模式</description>

  </property>

  <property>

    <name>hbase.master</name>

    <value>60000</value>

    <description>主備情況下隻需要寫端口号,不必寫主機名</description>

  </property>

  <property> 

         <name>hbase.master.info.port</name> 

         <value>60010</value>

         <description>web界面通路端口</description>

  </property>

  <property>

    <name>hbase.tmp.dir</name>

    <value>/home/hadoop/data/hbase</value>

    <description>hbase的一些臨時檔案存放目錄。</description>

   </property>

  <property>

    <name>hbase.zookeeper.quorum</name>

    <value>master,slave1,slave2,slave3,master1</value>

    <description> 指定 zookeeper 叢集節點名 , 因為是由 zookeeper 表決算法決定的</description>

  </property>

  <property>

    <name>hbase.zookeeper.property.clientPort</name>

    <value>2181</value>

   <description> 連接配接到zookeeper的端口,預設是2181</description>

  </property>

  <property>

         <name>hbase.zookeeper.property.dataDir</name>

         <value>/home/hadoop/data/zookeeper</value>

  </property>

  <property>

       <name>hbase.master.maxclockskew</name>

       <value>180000</value>

       <description>master與regionserver允許有3分鐘誤差</description>

 </property>

3.修改conf/regionservers

在regionsers檔案中添加

slave1

slave2

slave3

4.新增conf/backup-masters

在conf目錄下新增檔案

mkdir backup-masters

在backup-masters檔案中添加

master1

作用:主要用于主機當機後備用機接管hbase

5.修改conf/log4j.properties

第20行

hbase.log.dir=/home/hadoop/logs/hbase

6.拷貝hbase到所有的節點

同hadoop與zk

7.啟動hbase

配置了環境變量直接執行,沒有配置進入bin目錄下

start-hbase.sh

8.hbase自帶的web界面

http://192.168.1.171:60010/

http://192.168.1.175:60010/

9.測試

1.登入hbase用戶端

文檔開頭配置hbase環境變量直接執行,沒有配置進到hbase安裝目錄下的bin

hbase shell

2.建立資料表,并插入3條記錄

hbase(main):003:0> create 'test', 't1'

(create '表名', '列族')

0 row(s) in 1.2200 seconds

hbase(main):003:0> list 'table'

test

1 row(s) in 0.0550 seconds  

hbase(main):004:0> put 'test', 'row1', 't1:a', 'value1'  

(put '表名', '行号', '列族:列', '列值' )

0 row(s) in 0.0560 seconds  

hbase(main):005:0> put 'test', 'row2', 't1:b', 'value2'  

0 row(s) in 0.0370 seconds  

hbase(main):006:0> put 'test', 'row3', 't1:c', 'value3'  

0 row(s) in 0.0450 seconds  

3.檢視插入的資料

hbase(main):007:0> scan 'test' 

ROW        COLUMN+CELL 

row1       column=cf:a, timestamp=1288380727188, value=value1  

(行号      column=列族:列, timestamp=時間版本時間搓, value=列值) 

row2       column=cf:b, timestamp=1288380738440, value=value2  

row3       column=cf:c, timestamp=1288380747365, value=value3  

3 row(s) in 0.0590 seconds  

4.讀取單條記錄

hbase(main):008:0> get 'test', 'row1' 

COLUMN      CELL

cf:a        timestamp=1288380727188, value=value1 

1 row(s) in 0.0400 seconds 

5.停用并删除資料表

hbase(main):012:0> disable 'test' 

0 row(s) in 1.0930 seconds 

hbase(main):013:0> drop 'test'

0 row(s) in 0.0770 seconds

先停用後删除

6.退出

hbase(main):014:0> exit

如果Ctrl+z退出需要手動殺死線程(不然連接配接不會被釋放)

jps

殺死 Main線程号

10.日常指令

start-hbase.sh

stop-hbase.sh

Hbase叢集部署前要說明Zookeeper叢集部署:Hadoop(hdfs)叢集部署:Hbase叢集部署:

dfs.namenode.support.allow.format=true

NN是否允許被格式化?在生産系統,把它設定為false,阻止任何格式化操作在一個運作的DFS上。

建議初次格式化後,修改配置禁止

dfs.client.write.exclude.nodes.cache.expiry.interval.millis=600000

最大周期去讓DN保持在例外節點隊列中。毫秒。操過此周期,先前被排除的DN将被移除緩存并被嘗試再次申請Block。預設為10分鐘。

dfs.heartbeat.interval=3

DN的心跳間隔3秒

dfs.namenode.heartbeat.recheck-interval

HeartbeatMonitor 會定期的檢測已注冊的資料節點的心跳包,每一次檢測間隔300000毫秒即預設5分鐘

Namenode判斷一個DataNode死亡的時間為2* dfs.namenode.heartbeat.recheck-interval+10* dfs.heartbeat.interval即如果都為預設值為10分30秒

繼續閱讀