hadoop2.6 HA平台搭建
一、條件准備
軟件條件:
Ubuntu14.04 64位操作系統, jdk1.7 64位,Hadoop 2.6.0, zookeeper 3.4.6
硬件條件:
1台主節點機器,配置:cpu 8個,內存32G,硬盤200G
5台從節點機器,配置均為:cpu 4個,內存16G,硬盤200G
各個節點IP如下:
| 服務器名字 |
Ip地址 |
備注(為方便操作將hostname改為如下) |
| Hd-Name Node |
192.168.0.10 |
master |
| 192.168.0.16 |
slave1 |
|
| Hd-Data Node 2 |
192.168.0.12 |
slave2 |
| Hd-Data Node 3 |
192.168.0.18 |
slave3 |
| Hd-Data Node 4 |
192.168.0.13 |
slave4 |
| Hd-Data Node 5 |
192.168.0.14 |
slave5 |
搭建預期結構
| hostname |
軟件 |
進程 |
| master |
JDK,hadoop |
Namenode, ZKFC , resourcemanager |
| slave1 |
JDK,hadoop |
Zookeer, datanode, journalnode, quorumpeermain, nodemanager |
| slave2 |
JDK,hadoop |
Zookeer, datanode, journalnode, quorumpeermain, nodemanager |
| slave3 |
JDK,hadoop |
Zookeer, datanode, journalnode, quorumpeermain, nodemanager |
| slave4 |
JDK,hadoop |
Namenode,ZKFC, resourcemanager(2主節點啟動一個) |
| slave5 |
JDK,hadoop |
Datanode,nodemanager |
說明:zookeeper搭建在3台機器上,master和slave4作為2個namenode結點,剩下的節點為
注(1)以上機器的登錄名密碼均為:root 2015
(2)由於只有一台集群外的機器綁定公網,所以通過它,才能訪問這6個節點。公網ip:10.120.21.116 用戶名:root 密碼:2015
二、搭建過程
1.搭建前的配置
1》修改主機名字
通過xshell,遠程登錄主機10.120.21.116,輸入用戶名:root,密碼2015.登錄成功后。執行命令:ssh 192.168.0.10。進入Hd-Name Node機器。然后執行命令:
vi /etc/hosts 進入文件編輯,加入以下內容:
192.168.0.10 master
192.168.0.16 slave1
192.168.0.12 slave2
192.168.0.18 slave3
192.168.0.13 slave4
192.168.0.14 slave5
然后保存退出。然后繼續執行命令:
vi /etc/hostname 編輯主機名字為:master
接着執行命令:hostname master。
分別執行命令遠程拷貝hosts文件到各個節點,覆蓋掉本身的hosts文件。
scp –r /etc/hosts root@192.168.0.16:/etc/
scp –r /etc/hosts root@192.168.0.12:/etc/
scp –r /etc/hosts root@192.168.0.18:/etc/
scp –r /etc/hosts root@192.168.0.13:/etc/
scp –r /etc/hosts root@192.168.0.14:/etc/
然后執行ssh 192.168.0.** 分別登錄到各個子節點,修改他們的hostname。進入hostname文件。名字分別改成,slave1,slave2,slave3,slave4,slave5.保存退出。然后分別執行命令:hostname slave1 ,hostname slave2,…這樣可以 ssh master 這樣登錄了。
注意:1.如果ssh命令不能用,可能機器本身沒有ssh,需要安裝:執行命令:
apt-get install ssh。
2.確保各個節點能相互ping通,如果ping不通,查看下防火牆是否關閉。
2》設置節點間的遠程無密碼登錄
執行命令:ssh master 切換到主節點。執行命令:
- ssh-keygen –t rsa ,進入目錄/root/.ssh/,發現多了三文件:authorized_keys,id_rsa,id_rsa.pub
- 執行命令 cp ~/.ssh/id_rsa.pub ~/.ssh.authorized_keys.
- 驗證執行:ssh localhost,查看本節點是否可以無密碼登錄。
將授權文件拷貝到其他節點,執行命令:
scp authorized_keys root@slave1:~/.ssh/
scp id_rsa root@slave1:~/.ssh/
scp id_rsa.pub root@slave1:~/.ssh/,同樣其他節點也執行這樣的操作。執行完畢后,測試一下。節點之間能否相互之間無密碼登錄。
3》拷貝文件
通過WinSCP軟件,登錄主機10.120.21.116,輸入用戶名:root,密碼2015。實現本地機器與遠程機器的文件共享。將本機下的:hadoop2.6和jdk 1.7復制到主機10.120.21.116機器的 /usr/local/目錄下。
通過xshell,遠程登錄主機10.120.21.116,輸入用戶名:root,密碼2015.登錄成功后,執然后將10.120.21.116下/usr/local/下的文件:hadoop2.6和jdk1.7安裝包復制到,master機器上:/usr/local目錄下。
執行命令: scp /usr/local/Hadoop-2.6.0-x64.tar.gz root@192.168.0.10:/usr/local/
scp /usr/local/jdk-7u79-linux-x64.gz root@192.168.0.10:/usr/local/
scp /usr/local/zookeeper3.4.6.gz root@192.168.0.10:/usr/local/
注意:可以通過wincp軟件進行本地拷貝
2.安裝zookeeper
2.1、條件准備
軟件條件:
Ubuntu14.04 64位操作系統,jdk.7 64位, zookeeper 3.4.6
注意:zookeeper集群節點不能小於3個節點,各個服務器之間的時間要保持一致。
安裝步驟:
這里將zookeeper搭建在3個節點上,各個節點的環境配置:
| 主機名 |
Ip地址 |
| slave1 |
192.168.0.16 |
| slave2 |
192.168.0.12 |
| slave3 |
192.168.0.13 |
安裝配置zookeeper集群(在master)
2.2解壓
- 將 zookeeper拷貝到master節點/usr/local/目錄下,在該目錄下執行解壓命令
tar –zxvf zookeeper-3.4.6.tar.gz
- 修改名字,執行
mv zookeeper-3.4.6.tar.gz zookeeper
2.3 修改配置
切換目錄:cd /usr/local/zookeeper/conf/
執行命令:cp zoo_sample.cfg zoo.cfg
編輯文件:vim zoo.cfg
修改內容:
dataDir=/usr/local/zookeeper/zkdata
在最后添加:
server.1=slave1:2888:3888
server.2=slave2:2888:3888
server.3=slave3:2888:3888
保存退出
然后創建一個zkdata文件夾
mkdir /usr/local/zookeeper/zkdata
再創建一個空文件
touch /usr/local/zookeeper/zkdata/myid
最后向該文件寫入ID
echo 0 > /usr/local/zookeeper/zkdata/myid
2.4將配置好的zookeeper拷貝到其他節點(首先分別在slave1、slave2,slave3根目錄:/usr/local/)
scp –r /usr/local/zookeeper/ root@slave1:/usr/local
scp –r /usr/local/zookeeper/ root@slave2:/usr/local
scp –r /usr/local/zookeeper/ root@slave3:/usr/local
修改各個節點/usr/local/zookeeper/zkdata/myid的內容
slave1:echo 1 > /usr/local/zookeeper/zkdata/myid
slave2:echo 2 > /usr/local/zookeeper/zkdata/myid
slave3:echo 3 > /usr/local/zookeeper/zkdata/myid
注意,也可以用vi編輯修改
2.5配置環境變量
分別在各個節點執行命令 vi /etc/profile.添加如下:
export ZOOKEEPER_HOME=/usr/local/zookeeper
export PATH=$PATH:$ZOOKEEPER_HOME/bin
保存退出
立即生效:source /etc/profile
2.6啟動與測試
zkServer.sh start
zkServer.sh status (注意:要將至少3節點開啟,才不會出現問題,否則提示:連接失敗,實際並不影響,只要全部開啟了,提示自然不存在)
3.安裝hadoop
3.1解壓文件
執行:ssh 192.168.0.10,登錄到master機器。
切換到目錄:cd /usr/local 。執行命令:
tar -xvzf hadoop-2.6.0-x64.tar.gz
tar –xvzf jdk-7u79-linux-x64.gz。將兩個文件解壓。執行重命名命令:
mv hadoop-2.6.0-x64 hadoop
mv jdk-7u79-linux-x64 jdk
在/usr/local/hadoop下創建文件目錄(目錄自己創建)
mkdir tmp
mkdir dfs/data
mkdir dfs/name
3.2配置hadoop文件(關鍵)
進入目錄:/usr/local/hadoop/etc/hadoop/
配置文件:hadoop-env.sh,打開它修改JAVA_HOME值為(export JAVA_HOME=/usr/local/jdk
export HADOOP_LOG_DIR=/usr/local/hadoop/log,在以下yarn-size.xml配置的文件目錄
配置文件:yarn-env.sh,打開它修改JAVA_HOME值為(export JAVA_HOME=/usr/local/jdk)
export HADOOP_LOG_DIR=/usr/local/hadoop/log,
配置文件:slaves,打開它寫入內容(寫入nodename結點即可):
slave1
slave2
slave3
slave5
配置文件:core-site.xml
<configuration>
<property>
<name>fs.defaultFS</name>
<value>hdfs://masters</value> --名字自定義
</property>
<property>
<name>io.file.buffer.size</name>
<value>131072</value>
</property>
<property>
<name>hadoop.tmp.dir</name>
<value>/usr/local/hadoop/tmp</value> --自己創建的臨時目錄
<description>Abase for other temporary directories.</description>
</property>
<property>
<name>ha.zookeeper.quorum</name>
<value>slave1:2181,slave2:2181,slave3:2181</value> --zookeeper裝的機器
</property>
<property>
<name>hadoop.proxyuser.root.hosts</name>
<value>*</value>
</property>
<property>
<name>hadoop.proxyuser.root.groups</name>
<value>*</value>
</property>
</configuration>
配置文件:hdfs-site.xml
<configuration>
<property>
<name>dfs.nameservices</name>
<value>masters</value> ---和core-size一致,自定義
</property>
<property>
<name>dfs.ha.namenodes.masters</name>
<value>master,slave4</value> 主節點是哪個主機
</property>
<property>
<name>dfs.namenode.rpc-address.masters.master</name>
<value>master:9000</value>
</property>
<property>
<name>dfs.namenode.http-address.masters.master</name>
<value>master:50070</value>
</property>
<property>
<name>dfs.namenode.rpc-address.masters.slave4</name>
<value>slave4:9000</value>
</property>
<property>
<name>dfs.namenode.http-address.masters.slave4</name>
<value>slave4:50070</value>
</property>
<property>
<name>dfs.namenode.shared.edits.dir</name>
<value>qjournal://slave1:8485;slave2:8485;slave3:8485/masters</value>--zookeeper一致
</property>
<property>
<name>dfs.journalnode.edits.dir</name>
<value>/usr/local/hadoop/journal</value> --自己創建目錄
</property>
<property>
<name>dfs.ha.automatic-failover.enabled</name>
<value>true</value>
</property>
<property>
<name>dfs.client.failover.proxy.provider.masters</name>
<value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>
</property>
<property>
<name>dfs.ha.fencing.methods</name>
<value>
sshfence
</value>
</property>
<property>
<name>dfs.ha.fencing.ssh.private-key-files</name>
<value>/root/.ssh/id_rsa</value> --無密碼登錄一致,一般默認,但是這root權限下
</property>
<property>
<name>dfs.namenode.name.dir</name>
<value>file:/usr/local/hadoop/dfs/name</value>
</property>
<property>
<name>dfs.datanode.data.dir</name>
<value>file:/usr/local/hadoop/dfs/data</value>
</property>
<property>
<name>dfs.replication</name>
<value>3</value>
</property>
<property>
<name>dfs.webhdfs.enabled</name>
<value>true</value>
</property>
<property>
<name>dfs.journalnode.http-address</name>
<value>0.0.0.0:8480</value>
</property>
<property>
<name>dfs.journalnode.rpc-address</name>
<value>0.0.0.0:8485</value>
</property>
<property>
<name>ha.zookeeper.quorum</name>
<value>slave1:2181,slave2:2181,slave3:2181</value>
</property>
</configuration>
配置文件:mapred-site.xml
<configuration>
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
<property>
<name>mapreduce.jobhistory.address</name>
<value>0.0.0.0:10020</value>
</property>
<property>
<name>mapreduce.jobhistory.webapp.address</name>
<value>0.0.0.0:19888</value>
</property>
</configuration>
配置文件:yarn-site.xml
<configuration>
<property>
<name>yarn.resourcemanager.connect.retry-interval.ms</name>
<value>2000</value>
</property>
<property>
<name>yarn.resourcemanager.ha.enabled</name>
<value>true</value>
</property>
<property>
<name>yarn.resourcemanager.ha.rm-ids</name>
<value>rm1,rm2</value>
</property>
<property>
<name>ha.zookeeper.quorum</name>
<value>slave1:2181,slave2:2181,slave3:2181</value>
</property>
<property>
<name>yarn.resourcemanager.ha.automatic-failover.enabled</name>
<value>true</value>
</property>
<property>
<name>yarn.resourcemanager.hostname.rm1</name>
<value>master</value> ---倆namenode節點
</property>
<property>
<name>yarn.resourcemanager.hostname.rm2</name>
<value>slave4</value>
</property>
<property>
<name>yarn.resourcemanager.ha.id</name>
<value>rm1</value>
<description>If we want to launch more than one RM in single node, we need this configuration</description>
</property>
<property>
<name>yarn.resourcemanager.recovery.enabled</name>
<value>true</value>
</property>
<property>
<name>yarn.resourcemanager.zk-state-store.address</name>
<value>slave1:2181,slave2:2181,slave3:2181</value>
</property>
<property>
<name>yarn.resourcemanager.store.class</name>
<value>org.apache.hadoop.yarn.server.resourcemanager.recovery.ZKRMStateStore</value>
</property>
<property>
<name>yarn.resourcemanager.zk-address</name>
<value>slave1:2181,slave2:2181,slave3:2181</value>
</property>
<property>
<name>yarn.resourcemanager.cluster-id</name>
<value>masters-yarn</value> --集群名字和core一致
</property>
<property>
<name>yarn.app.mapreduce.am.scheduler.connection.wait.interval-ms</name>
<value>5000</value>
</property>
<property>
<name>yarn.resourcemanager.address.rm1</name>
<value>master:8132</value>
</property>
<property>
<name>yarn.resourcemanager.scheduler.address.rm1</name>
<value>master:8130</value>
</property>
<property>
<name>yarn.resourcemanager.webapp.address.rm1</name>
<value>master:8188</value>
</property>
<property>
<name>yarn.resourcemanager.resource-tracker.address.rm1</name>
<value>master:8131</value>
</property>
<property>
<name>yarn.resourcemanager.admin.address.rm1</name>
<value>master:8033</value>
</property>
<property>
<name>yarn.resourcemanager.ha.admin.address.rm1</name>
<value>master:23142</value>
</property>
<property>
<name>yarn.resourcemanager.address.rm2</name>
<value>slave4:8132</value>
</property>
<property>
<name>yarn.resourcemanager.scheduler.address.rm2</name>
<value>slave4:8130</value>
</property>
<property>
<name>yarn.resourcemanager.webapp.address.rm2</name>
<value>slave4:8188</value>
</property>
<property>
<name>yarn.resourcemanager.resource-tracker.address.rm2</name>
<value>slave4:8131</value>
</property>
<property>
<name>yarn.resourcemanager.admin.address.rm2</name>
<value>slave4:8033</value>
</property>
<property>
<name>yarn.resourcemanager.ha.admin.address.rm2</name>
<value>slave4:23142</value>
</property>
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<property>
<name>yarn.nodemanager.aux-services.mapreduce.shuffle.class</name>
<value>org.apache.hadoop.mapred.ShuffleHandler</value>
</property>
<property>
<name>yarn.nodemanager.local-dirs</name>
<value>/usr/local/hadoop/yarn</value> --自己創建
</property>
<property>
<name>yarn.nodemanager.log-dirs</name>
<value>/usr/local/hadoop/log</value> --自己創建
</property>
<property>
<name>mapreduce.shuffle.port</name>
<value>23080</value>
</property>
<property>
<name>yarn.client.failover-proxy-provider</name>
<value>org.apache.hadoop.yarn.client.ConfiguredRMFailoverProxyProvider</value>
</property>
<property>
<name>yarn.resourcemanager.ha.automatic-failover.zk-base-path</name>
<value>/yarn-leader-election</value>
<description>Optional setting. The default value is /yarn-leader-election</description>
</property>
</configuration>
注:紅色部分需要自己根據實際情況修改
3.3 hadoop和jdk文件夾的復制
將mater節點。/usr/local/hadoop和/usr/local/jdk文件目錄遠程復制到其他節點,執行命令:
scp –r /usr/local/hadoop root@slave1:/usr/local/
scp –r /usr/local/jdk root@slave1:/usr/local/
…其它節點同樣復制。
3.4配置環境變量
在master,slave1,slave2,slave3,slave4,slave5,配置環境變量。在/etc/profile目錄下添加:
export PATH=$PATH:/usr/local/jdk/bin:/usr/local/jdk/jre/bin:/usr/local/hadoop/bin:/usr/local/hadoop/sbin
保存退出,執行命令:source /etc/profile讓其立即生效。
4.啟動測試集群
啟動zookeeper集群(分別在slave1、slave2、slave3上啟動zk)
進入到 zookeeper-3.4.5/bin/
執行命令: ./zkServer.sh start
查看狀態 ./zkServer.sh status
(一個leader,兩個follower)
單獨進入到slave1,slave2,slave3執行
執行命令 sbin/hadoop-daemon.sh start journalnode
(運行jps命令檢驗,多了JournalNode進程)
格式化HDFS
在namenode1(master)上執行命令:
hadoop namenode -format
格式化后會在根據core-site.xml中的hadoop.tmp.dir配置生成個文件,之后通過sbin/hadoop-daemon.sh start namenode啟動namenode進程
在namenode2(slave4)上執行hdfs namenode -bootstrapStandby完成主備節點同步信息
格式化ZK(在namenode1上執行即可)
hdfs zkfc -formatZK
啟動HDFS(在namenode1上執行)
sbin/start-dfs.sh
啟動YARN(在namenode1(master)和namenode2(slave4)上執行)
sbin/start-yarn.sh
注意在namenode2上執行此命令時會提示NodeManager已存在等信息不用管這些,主要是啟動namenode2上的resourceManager完成與namenode1的互備作用,目前沒有找到單獨啟動resourceManager的方法
查看所有進程是否都成功啟動,最后執行自帶的例子進行測試
--------------------------------------------------------------------------------------------------------------------------------------
8》驗證與運行
執行命令:ssh master
格式化namenode節點,執行命令:hadoop namenode –format
啟動hadoop,執行命令:start-all.sh
在master節點和其他從節點下執行命令:jps。查看相關進程是否啟動:
在/usr/local/hadoop/share/hadoop/mapreduce目錄下執行測試程序:
jadoop jar hadoop-mapreduce-exmaple-2.6.0.jar pi 2 19 ,觀察測試結果。至此所有搭建過程完畢
