一、環境說明
集群環境至少需要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.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>
<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
如果啟動報類似異常:QuorumCnxManager@384] - Cannot open channel to 2 at election address slave-02/192.168.0.178:3888 是可以忽略的,因為該服務啟動時會嘗試連接所有節點,而其他節點尚未啟動。通過後面部分可以看到,集群在選出一個Leader後,最後穩定 了。其他結點可能也出現類似問題,屬於正常。
關閉防火牆。在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
使用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=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