1. 程式人生 > >Hadoop+HBase+ZooKeeper分散式叢集環境搭建

Hadoop+HBase+ZooKeeper分散式叢集環境搭建

一、環境說明

叢集環境至少需要3個節點(也就是3臺伺服器裝置):1個Master,2個Slave,節點之間區域網連線,可以相互ping通,下面舉例說明,配置節點IP分配如下:

Hostname IP User Password
master 192.168.59.133 hadoop 123456
slave1 192.168.59.134 hadoop 123456
slave2 192.168.59.135 hadoop 123456

三個節點均使用CentOS 6.5系統,為了便於維護,叢集環境配置項最好使用相同使用者名稱、使用者密碼、相同hadoop、hbase、zookeeper目錄結構。

注:可以通過編輯/etc/sysconfig/network檔案來修改 hostname 。

二、準備工作

2.1 安裝JDK

在三臺機器上配置JDK環境,下載 jdk-8u51-linux-x64.rpm 檔案直接安裝:

$ rpm -ivh jdk-8u51-linux-x64.rpm

修改配置檔案 vim /etc/profile

export JAVA_HOME=/usr/java/jdk1.8.0_51
export PATH=$JAVA_HOME/bin:$PATH
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar

然後重新載入配置檔案使之生效:

$ source /etc/profile 

2.2 新增Hosts對映關係

分別在三個節點上新增hosts對映關係:

$ vim /etc/hosts

新增的內容如下:

192.168.59.133 master
192.168.59.134 slave1
192.168.59.135 slave2

2.3 叢集之間SSH無密碼登陸

CentOS預設安裝了ssh,如果沒有你需要先安裝ssh 。

叢集環境的使用必須通過ssh無密碼登陸來執行,本機登陸本機必須無密碼登陸,主機與從機之間必須可以雙向無密碼登陸,從機與從機之間無限制。

2.3.1 設定master無密碼自登陸

主要有三步:①生成公鑰和私鑰、②匯入公鑰到認證檔案、③更改許可權

$ ssh-keygen -t rsa -f ~/.ssh/id_rsa
$ cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
$ chmod 700 ~/.ssh && chmod 600 ~/.ssh/*

測試,第一次登入可能需要yes確認,之後就可以直接登入了:

$ ssh localhost
Last login: Sat Jul 18 22:57:44 2015 from localhost

對於 slave1 和 slave2,進行無密碼自登陸設定,操作同上。

2.3.2 設定主機->從機的無密碼登入

$ cat ~/.ssh/id_rsa.pub | ssh hadoop@slave1 'cat - >> ~/.ssh/authorized_keys'
$ cat ~/.ssh/id_rsa.pub | ssh hadoop@slave2 'cat - >> ~/.ssh/authorized_keys'

測試:

[hadoop@master ~]$ ssh hadoop@slave1
Last login: Sat Jul 18 23:25:41 2015 from master

[hadoop@master ~]$ ssh hadoop@slave2
Last login: Sat Jul 18 23:25:14 2015 from master

2.3.3 設定從機->主機的無密碼登入

分別在slave1、slave2上執行:

$ cat ~/.ssh/id_rsa.pub | ssh hadoop@master 'cat - >> ~/.ssh/authorized_keys'

三、Hadoop叢集安裝配置

這裡會將hadoop、hbase、zookeeper的安裝包都解壓到/home/hadoop/個人主資料夾下,並重命名為hadoop、hbase、zookeeper。

3.1 修改hadoop配置

配置檔案都在~/hadoop/etc/目錄下

3.1.1 core-site.xml

<configuration>
    <property>
        <name>fs.default.name</name>
        <value>hdfs://master:9000</value>
    </property>
</configuration>

3.1.2 hadoop-env.sh

新增JDK路徑:

export JAVA_HOME=/usr/java/jdk1.8.0_51

3.1.3 hdfs-site.xml

<configuration>
    <property>
        <name>dfs.name.dir</name>
        <value>/home/hadoop/hadoop/name</value>
    </property>
    <property>
        <name>dfs.data.dir</name>
        <value>/home/hadoop/hadoop/data</value>
    </property>
    <property>
        <name>dfs.replication</name>
        <value>3</value>
    </property>
</configuration>

3.1.4 mapred-site.xml

<configuration>
    <property>
        <name>mapred.job.tracker</name>
        <value>master:9001</value>
    </property>
</configuration>

3.1.5 修改masters檔案

master

3.1.6 修改slaves檔案

slave1
slave2

注意:三臺機器上都進行相同的配置,都放在相同的路徑下。

使用scp命令進行從本地到遠端(或遠端到本地)的輕鬆檔案傳輸操作:

scp -r /home/hadoop/hadoop     slave1:/home/hadoop
scp -r /home/hadoop/hadoop     slave2:/home/hadoop

3.2 啟動hadoop叢集

進入master的~/hadoop目錄,執行以下操作:

$ bin/hadoop namenode -format

格式化namenode,第一次啟動服務前執行的操作,以後不需要執行。

然後啟動hadoop:

$ sbin/start-all.sh

通過jps命令能看到除jps外有5個程序:

$ jps
4866 NodeManager
4370 NameNode
4899 Jps
4648 SecondaryNameNode
4779 ResourceManager
4460 DataNode

四、ZooKeeper叢集安裝配置

解壓zookeeper-3.3.2.tar.gz並重命名為zookeeper。

4.1 修改配置檔案zoo.cfg

進入~/zookeeper/conf目錄:

$ cp zoo_sample.cfg zoo.cfg

拷貝zoo_sample.cfg檔案為zoo.cfg,並編輯如下:

dataDir=/home/hadoop/zookeeper/data

server.1=192.168.59.133:2888:3888
server.2=192.168.59.134:2888:3888
server.3=192.168.59.135:2888:3888

4.2 新建並編輯myid檔案

在dataDir目錄下新建myid檔案,輸入一個數字(master為1,slave1為2,slave2為3):

$ mkdir /home/hadoop/zookeeper/data
$ echo "1" > /home/hadoop/zookeeper/data/myid  

同樣使用scp命令進行遠端複製,只不過要修改每個節點上myid檔案中的數字。

4.3 啟動ZooKeeper叢集

在ZooKeeper叢集的每個結點上,執行啟動ZooKeeper服務的指令碼:

$ ~/zookeeper/bin/zkServer.sh start
  1. 如果啟動報類似異常:QuorumCnxManager@384] - Cannot open channel to 2 at election address slave-02/192.168.0.178:3888 是可以忽略的,因為該服務啟動時會嘗試連線所有節點,而其他節點尚未啟動。通過後面部分可以看到,叢集在選出一個Leader後,最後穩定 了。其他結點可能也出現類似問題,屬於正常。

  2. 關閉防火牆。在hadoop叢集環境(linux系統)中最好關閉防火牆,不然會出現很多問題,例如namenode找不到datanode等。如果不關閉防火牆,客戶端使用API操作HDFS以及ZooKeeper,可能就會出現下面常見的兩種異常:

    • 使用API操作HDFS時會出現異常:java.net.NoRouteToHostException: No route to host
    • 使用API操作ZK時會出現異常:org.apache.zookeeper.KeeperException$ConnectionLossException: KeeperErrorCode = ConnectionLoss for xxxx
  3. 使用root許可權登陸後,輸入關閉防火牆命令:

    $ /etc/init.d/iptables stop
    $ service iptables stop
  4. 修改禁用selinux: /etc/selinux/config檔案,設定"SELINUX=disabled"

五、HBase叢集安裝配置

解壓hbase-1.0.1.1-bin.tar.gz並重命名為hbase。

5.1 hbase-env.sh

export JAVA_HOME=/usr/java/jdk1.8.0_51
export HBASE_CLASSPATH=/home/hadoop/hadoop/etc/hadoop/
export HBASE_MANAGES_ZK=false

5.2 hbase-site.xml

<configuration>
    <property>
        <name>hbase.rootdir</name>
        <value>hdfs://master:9000/hbase</value>
    </property>
    <property>
        <name>hbase.master</name>
        <value>master</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,slave1,slave2</value>
    </property>
    <property>
        <name>zookeeper.session.timeout</name>
        <value>60000000</value>
    </property>
    <property>
        <name>dfs.support.append</name>
        <value>true</value>
    </property>
</configuration>

5.3 更改 regionservers

在 regionservers 檔案中新增slave列表:

slave1
slave2

5.4 分發並同步安裝包

將整個hbase安裝目錄都拷貝到所有slave伺服器:

$ scp -r /home/hadoop/hbase  slave1:/home/hadoop
$ scp -r /home/hadoop/hbase  slave2:/home/hadoop

六、啟動叢集

1. 啟動ZooKeeper

~/zookeeper/bin/zkServer.sh start

2. 啟動hadoop

~/hadoop/sbin/start-all.sh

3. 啟動hbase

~/hbase/bin/start-base.sh

4. 啟動後,master上程序和slave程序列表

[hadoop@master ~]$ jps
6225 Jps
2897 SecondaryNameNode   # hadoop程序
2710 NameNode            # hadoop master程序
3035 ResourceManager     # hadoop程序
5471 HMaster             # hbase master程序
2543 QuorumPeerMain      # zookeeper程序
[hadoop@slave1 ~]$ jps
4689 Jps
2533 QuorumPeerMain       # zookeeper程序
2589 DataNode             # hadoop slave程序
4143 HRegionServer        # hbase slave程序

5. 進入hbase shell進行驗證

[hadoop@master ~]$ hbase/bin/hbase shell
2015-07-20 00:42:11,725 WARN  [main] util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable
HBase Shell; enter 'help<RETURN>' for list of supported commands.
Type "exit<RETURN>" to leave the HBase Shell
Version 1.0.1.1, re1dbf4df30d214fca14908df71d038081577ea46, Sun May 17 12:34:26 PDT 2015

hbase(main):001:0> list
TABLE                                                                                
0 row(s) in 1.6950 seconds

=> []
hbase(main):002:0> status
2 servers, 0 dead, 1.0000 average load

hbase(main):003:0> 

參考:
[1] www.smalldeng.blog.51cto.com/1038075/1329290
[2] www.marysee.blog.51cto.com/1000292/629405