搭建Hadoop+HBase+ZooKeeper分佈式集群

文本編輯器 Hadoop HBase 編程語言 和老杜一起學習大數據 2017-05-28

一、環境說明

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

HostnameIPUserPassword
master192.168.59.133hadoop123456
slave1192.168.59.134hadoop123456
slave2192.168.59.135hadoop123456

三個節點均使用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.rpm11

修改配置文件 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.jar123123

然後重新加載配置文件使之生效:

$ source /etc/profile 11

2.2 添加Hosts映射關係

分別在三個節點上添加hosts映射關係:

$ vim /etc/hosts11

添加的內容如下:

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/*123123

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

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

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

2.3.2 設置主機->從機的無密碼登錄

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

測試:

[hadoop@master ~]$ ssh hadoop@slave1

Lastlogin:SatJul1823:25:412015 from master

[hadoop@master ~]$ ssh hadoop@slave2

Lastlogin:SatJul1823:25:142015 from master

2.3.3 設置從機->主機的無密碼登錄

分別在slave1、slave2上執行:

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

三、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>

  1. <value>hdfs://master:9000</value>

</property>

</configuration>

3.1.2 hadoop-env.sh

添加JDK路徑:

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

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文件

master11

3.1.6 修改slaves文件

slave1

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

使用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 -format11

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

然後啟動hadoop:

$ sbin/start-all.sh11

通過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.cfg11

拷貝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 1212

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

4.3 啟動ZooKeeper集群

在ZooKeeper集群的每個結點上,執行啟動ZooKeeper服務的腳本:

$ ~/zookeeper/bin/zkServer.sh start11
  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

  1. 使用root權限登陸後,輸入關閉防火牆命令:

    $ /etc/init.d/iptables stop
  2. $ 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=false123123

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/hadoop1212

六、啟動集群

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 Jps2533 QuorumPeerMain # zookeeper進程
2589 DataNode # hadoop slave進程
4143 HRegionServer # hbase slave進程

5. 進入hbase shell進行驗證

[hadoop@master ~]$ hbase/bin/hbase shell2015-07-2000:42:11,725 WARN [main] util.NativeCodeLoader: Unable to load native-hadoop libraryfor 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 1712:34:26 PDT 2015

hbase(main):001:0> list

TABLE

0 row(s) in1.6950 seconds

=> []

hbase(main):002:0> status

2 servers, 0 dead, 1.0000 average load

hbase(main):003:0>

注:來源:CSDN博客 作者:神奕 原文地址:http://blog.csdn.net/lisonglisonglisong/article/details/46974723

相關推薦

推薦中...