(1)前期準備
1.修改linux主機名稱。
2.修改主機ip苇经。
3.主機和ip進行映射锨推,如果是云主機铅歼,ip對應是公網(wǎng)ip。
4.修改防火墻换可。
5.修改ssh通信
6.安裝jdk,配置環(huán)境變量椎椰。
(2)集群規(guī)劃
主機名 ip 安裝 軟件
hadoop01 192.168.1.201 jdk、hadoop NameNode DFSZKFailoverController
hadoop02 192.168.1.202 jdk沾鳄、hadoop NameNode慨飘、DFSZKFailoverController
hadoop03 192.168.1.203 jdk、hadoop ResourceManager
hadoop04 192.168.1.204 jdk译荞、hadoop瓤的、zookeeper 、DataNode吞歼、NodeManager圈膏、JournalNode、QuorumPeerMain
hadoop05 192.168.1.205 jdk篙骡、hadoop稽坤、zookeeper、DataNode糯俗、NodeManager尿褪、JournalNode、QuorumPeerMain
hadoop06 192.168.1.206 jdk得湘、hadoop杖玲、zookeeper、DataNode淘正、NodeManager摆马、JournalNode、QuorumPeerMain
說明:在hadoop2.0當中鸿吆,有2個namenode組成今膊,一個處于active一個處于stand by 。其中active的namenode對外提供服務伞剑,而standby不提供服務斑唬,只是同步activeNamed的狀態(tài),以便于在在它失敗時候進行快速切換黎泣。
hadoop2.0官方提供了兩種HDFS HA的解決方案恕刘,一種是NFS,另一種是QJM抒倚。這里我們使用簡單的QJM褐着。在該方案中,主備NameNode之間通過一組JournalNode同步元數(shù)據(jù)信息托呕,一條數(shù)據(jù)只要成功寫入多數(shù)JournalNode即認為寫入成功含蓉。通常配置奇數(shù)個JournalNode频敛。這里還配置了一個zookeeper集群,用于ZKFC(DFSZKFailoverController)故障轉(zhuǎn)移馅扣,當Active NameNode掛掉了斟赚,會自動切換Standby NameNode為standby狀態(tài)
(3).安裝配置zooekeeper集群
1.解壓
tar -zxvf zookeeper-3.4.5.tar.gz -C /data/
2.修改配置
cd /data/zookeeper-3.4.5/conf/
cp zoo_sample.cfg zoo.cfg
vim zoo.cfg
修改:dataDir=/data/zookeeper-3.4.5/tmp
在最后添加:
server.1=hadoop04:2888:3888
server.2=hadoop05:2888:3888
server.3=hadoop06:2888:3888
保存退出
然后創(chuàng)建一個tmp文件夾
mkdir /data/zookeeper-3.4.5/tmp
再創(chuàng)建一個空文件
touch /data/zookeeper-3.4.5/tmp/myid
最后向該文件寫入ID
echo 1 > /data/zookeeper-3.4.5/tmp/myid
3.將配置好的zookeeper拷貝到其他節(jié)點(首先分別在hadoop05、hadoop06根目錄下創(chuàng)建一個data目錄:mkdir /data)
scp -r /data/zookeeper-3.4.5/ hadoop05:/data/
scp -r /data/zookeeper-3.4.5/ hadoop06:/data/
注意:修改hadoop05差油、hadoop06對應/data/zookeeper-3.4.5/tmp/myid內(nèi)容
hadoop05:
echo 2 > /data/zookeeper-3.4.5/tmp/myid
hadoop06:
echo 3 > /data/zookeeper-3.4.5/tmp/myid
(4)安裝配置hadoop集群
1.解壓 tar -zxvf hadoop-2.2.0.tar.gz -C /data/
2.配置HDFS(hadoop2.0所有的配置文件都z$HADOOP_HOME/etc/hadoop目錄下)
#將hadoop添加到環(huán)境變量中
vim /etc/profile
export JAVA_HOME=/usr/java/jdk1.7.0_55
export HADOOP_HOME=data/hadoop-2.2.0
export PATH=$PATH:$JAVA_HOME/bin:$HADOOP_HOME/bin
#hadoop2.0的配置文件全部在$HADOOP_HOME/etc/hadoop下
cd /data/hadoop-2.2.0/etc/hadoop
3.修改hadoo-env.sh
export JAVA_HOME=/usr/java/jdk1.7.0_55
4.修改core-site.xml
<configuration>
<!-- 指定hdfs的nameservice為ns1 -->
<property>
<name>fs.defaultFS</name>
<value>hdfs://ns1</value>
</property>
<!-- 指定hadoop臨時目錄 -->
<property>
<name>hadoop.tmp.dir</name>
<value>/data/hadoop-2.2.0/tmp</value>
</property>
<!-- 指定zookeeper地址 -->
<property>
<name>ha.zookeeper.quorum</name>
<value>hadoop04:2181,hadoop05:2181,hadoop06:2181</value>
</property>
</configuration>
5.修改hdfs-site.xml
<configuration>
<!--指定hdfs的nameservice為ns1拗军,需要和core-site.xml中的保持一致 -->
<property>
<name>dfs.nameservices</name>
<value>ns1</value>
</property>
<!-- ns1下面有兩個NameNode,分別是nn1蓄喇,nn2 -->
<property>
<name>dfs.ha.namenodes.ns1</name>
<value>nn1,nn2</value>
</property>
<!-- nn1的RPC通信地址 -->
<property>
<name>dfs.namenode.rpc-address.ns1.nn1</name>
<value>hadoop01:9000</value>
</property>
<!-- nn1的http通信地址 -->
<property>
<name>dfs.namenode.http-address.ns1.nn1</name>
<value>hadoop01:50070</value>
</property>
<!-- nn2的RPC通信地址 -->
<property>
<name>dfs.namenode.rpc-address.ns1.nn2</name>
<value>hadoop02:9000</value>
</property>
<!-- nn2的http通信地址 -->
<property>
<name>dfs.namenode.http-address.ns1.nn2</name>
<value>hadoop02:50070</value>
</property>
<!-- 指定NameNode的元數(shù)據(jù)在JournalNode上的存放位置 -->
<property>
<name>dfs.namenode.shared.edits.dir</name>
<value>qjournal://hadoop04:8485;hadoop05:8485;hadoop06:8485/ns1</value>
</property>
<property>
<name>dfs.journalnode.edits.dir</name>
<value>/data/hadoop-2.2.0/journal</value>
</property>
<property>
<name>dfs.ha.automatic-failover.enabled</name>
<value>true</value>
</property>
<property>
<name>dfs.client.failover.proxy.provider.ns1</name> <value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>
</property>
<property>
<name>dfs.ha.fencing.methods</name>
<value>
sshfence
shell(/bin/true)
</value>
</property>
<property>
<name>dfs.ha.fencing.ssh.private-key-files</name>
<value>/root/.ssh/id_rsa</value>
</property>
<property>
<name>dfs.ha.fencing.ssh.connect-timeout</name>
<value>30000</value>
</property>
</configuration>
6.修改mapred-site.xml
<configuration>
<!-- 指定mr框架為yarn方式 -->
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
</configuration>
7.修改yarn-site.xml
<configuration>
<!-- 指定resourcemanager地址 -->
<property>
<name>yarn.resourcemanager.hostname</name>
<value>hadoop03</value>
</property>
<!-- 指定nodemanager啟動時加載server的方式為shuffle server -->
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
</configuration>
8.修改slaves(slaves是指定子節(jié)點的位置发侵,因為要在hadoop01上啟動HDFS、在hadoop03啟動yarn妆偏,所以hadoop01上的slaves文件指定的是datanode的位置刃鳄,hadoop03上的slaves文件指定的是nodemanager的位置)
hadoop04
hadoop05
hadoop06
9.配置免密碼登陸
首先要配置hadoop01到hadoop02、hadoop03钱骂、hadoop04铲汪、hadoop05、hadoop06的免密碼登陸
#在hadoop01上生產(chǎn)一對鑰匙
ssh-keygen -t rsa
#將公鑰拷貝到其他節(jié)點罐柳,包括自己
ssh-coyp-id hadoop01
ssh-coyp-id hadoop02
ssh-coyp-id hadoop03
ssh-coyp-id hadoop04
ssh-coyp-id hadoop05
ssh-coyp-id hadoop06
#配置hadoop03到hadoop04掌腰、hadoop05、hadoop06的免密碼登陸
#在hadoop03上生產(chǎn)一對鑰匙
ssh-keygen -t rsa
#將公鑰拷貝到其他節(jié)點
ssh-coyp-id hadoop04
ssh-coyp-id hadoop05
ssh-coyp-id hadoop06
#注意:兩個namenode之間要配置ssh免密碼登陸张吉,別忘了配置hadoop02到hadoop01的免登陸
在hadoop02上生產(chǎn)一對鑰匙
ssh-keygen -t rsa
ssh-coyp-id -i hadoop01
10.將配置好的hadoop拷貝到其他節(jié)點
scp -r /itcast/ hadoop02:/
scp -r /itcast/ hadoop03:/
scp -r /data/hadoop-2.2.0/ root@hadoop04:/itcast/
scp -r /data/hadoop-2.2.0/ root@hadoop05:/itcast/
scp -r /data/hadoop-2.2.0/ root@hadoop06:/itcast/
###注意:嚴格按照下面的步驟
11.啟動zookeeper集群(分別在hadoop04齿梁、hadoop05、hadoop06上啟動zk)
cd /data/zookeeper-3.4.5/bin/
./zkServer.sh start
#查看狀態(tài):一個leader肮蛹,兩個follower
./zkServer.sh status
12.啟動journalnode(在itcast01上啟動所有journalnode勺择,注意:是調(diào)用的hadoop-daemons.sh這個腳本,注意是復數(shù)s的那個腳本)
cd /data/hadoop-2.2.0
sbin/hadoop-daemons.sh start journalnode
運行jps命令檢驗伦忠,hadoop04省核、hadoop05、hadoop06上多了JournalNode進程
13.格式化HDFS
#在itcast01上執(zhí)行命令:
hdfs namenode -format
#格式化后會在根據(jù)core-site.xml中的hadoop.tmp.dir配置生成個文件昆码,這里我配置的是/data/hadoop-2.2.0/tmp气忠,然后將/data/hadoop-2.2.0/tmp拷貝到hadoop02的/itcast/hadoop-2.2.0/下。
scp -r tmp/ hadoop02:/data/hadoop-2.2.0/
15.格式化ZK(在haoop01上執(zhí)行即可)
hdfs zkfc -formatZK
16.啟動HDFS(在hadoop01上執(zhí)行)
sbin/start-dfs.sh
17.啟動YARN(#####注意#####:是在hadoop03上執(zhí)行start-yarn.sh赋咽,把namenode和resourcemanager分開是因為性能問題旧噪,因為他們都要占用大量資源,所以把他們分開了脓匿,他們分開了就要分別在不同的機器上啟動)
sbin/start-yarn.sh
到此淘钟,hadoop2.2.0配置完畢,可以統(tǒng)計瀏覽器訪問:
http://192.168.1.201:50070
NameNode 'hadoop01:9000' (active)
http://192.168.1.202:50070
NameNode 'hadoop02:9000' (standby)
驗證HDFS HA
首先向hdfs上傳一個文件
hadoop fs -put /etc/profile /profile
hadoop fs -ls /
然后再kill掉active的NameNode
kill -9 <pid of NN>
通過瀏覽器訪問:http://192.168.1.202:50070
NameNode 'hadoop02:9000' (active)
這個時候hadoop02上的NameNode變成了active
在執(zhí)行命令:
hadoop fs -ls /
-rw-r--r-- 3 root supergroup 1926 2014-02-06 15:36 /profile
剛才上傳的文件依然存在E阏薄C啄浮勾扭!
手動啟動那個掛掉的NameNode
sbin/hadoop-daemon.sh start namenode
通過瀏覽器訪問:http://192.168.1.201:50070
NameNode 'hadoop01:9000' (standby)
驗證YARN:
運行一下hadoop提供的demo中的WordCount程序:
hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.2.0.jar wordcount /profile /out
OK,至此結(jié)束L鳌妙色!關(guān)于zookeeper以及HA的問題,后面再詳細說精拟!