之前的文章已經介紹了搭建單機Hadoop, HBase, Hive, Spark的方式:link
現在希望在單機的基礎上,加一個slave。
首先需要加上信任關系,加信任關系的方式,見前一篇文章:link
把05和06這兩台機器,分別和對方添加上信任關系。
把05上面的目錄 /home/work/data/installed/hadoop-2.7.3/ 拷貝到06機器,
把 etc/hadoop 里面的 IP 10.117.146.12 都改成 11
然后06機器 要安裝 jumbo 和 Java1.8
安裝好之后,JAVA_HOME應該和05機器上配置的一樣:
export JAVA_HOME=/home/work/.jumbo/opt/sun-java8
另外要創建這個目錄 /home/work/data/hadoop/dfs
然后啟動下面這些服務:
首先格式化hdfs:
./bin/hdfs namenode -format myclustername 16/11/04 16:00:44 INFO util.ExitUtil: Exiting with status 0
在slave上面要部署的服務有 datanode, node_manager(沒有namenode)
啟動datanode
$ ./sbin/hadoop-daemon.sh --script hdfs start datanode starting datanode, logging to /home/work/data/installed/hadoop-2.7.3/logs/hadoop-work-datanode-gzns-ecom-baiduhui-201605-m42n06.gzns.baidu.com.out
啟動node manager
$ ./sbin/yarn-daemon.sh start nodemanager starting nodemanager, logging to /home/work/data/installed/hadoop-2.7.3/logs/yarn-work-nodemanager-gzns-ecom-baiduhui-201605-m42n06.gzns.baidu.com.out
在master上面增加slave (etc/hadoop/slaves) :
localhost 10.117.146.11
然后看下master的幾個管理平台:
Overview: http://10.117.146.12:8305
Yarn: http://10.117.146.12:8320
Job History: http://10.117.146.12:8332/jobhistory
Spark:http://10.117.146.12:8340/
上網搜了一個,用root帳號將兩台機器的 /etc/hosts都改成了
127.0.0.1 localhost.localdomain localhost 10.117.146.12 master.Hadoop 10.117.146.11 slave1.Hadoop 以下一樣: 127.0.0.1 localhost.localdomain localhost 10.117.146.12 master.Hadoop 10.117.146.11 slave1.Hadoop
然后把 etc/hadoop/slaves里的內容都改成:
slave1.Hadoop
加了一個文件 etc/hadoop/masters
master.Hadoop
但是,還是始終發現master和slave是各自獨立的,然后在slave上起了namenode 和 yarn之后,slave就知看到自己一個live node了。
看了一下,把所有的服務都停掉,看是否能用 ./sbin/start-all.sh ,跑了一下,發現有提示輸入 work@localhost密碼的,然后grep了一下localhost,發現在core-site.xml有localhost的配置:
<name>fs.defaultFS</name> <value>hdfs://localhost:8390</value>
感覺需要把slave的這里也改掉。然后試了一下,把master和slave的這個地方都改成如下:
<name>fs.defaultFS</name> <value>hdfs://master.Hadoop:8390</value>
然后,在slave啟動datanode報錯,錯誤日志:
2016-11-04 17:44:39,160 WARN org.apache.hadoop.hdfs.server.common.Storage: Failed to add storage directory [DISK]file:/home/work/data/hadoop/dfs/data/ java.io.IOException: Incompatible clusterIDs in /home/work/data/hadoop/dfs/data: namenode clusterID = CID-9808571a-21c3-4aeb-a114-19b99b4722d2; datanode clusterID = CID-c2a59c40-0a4b-4aba-bbab-31ec15b8d64d
貌似是namenode和datanode沖突了。用 rm -rf /home/work/data/hadoop/dfs/data/ 把data node目錄整體刪掉。
重新啟動master上面的所有服務。
然后在slave上面重新啟動datanode:
./sbin/hadoop-daemon.sh --script hdfs start datanode
在日志里能看到heartbeat的內容,看起來通信成功了。
再打開master的管理界面:
http://10.117.146.12:8305/dfshealth.html 能夠看到兩台node了:
現在再把slave的node manager也啟動:
$ ./sbin/yarn-daemon.sh start nodemanager starting nodemanager, logging to /home/work/data/installed/hadoop-2.7.3/logs/yarn-work-nodemanager-gzns-ecom-baiduhui-201605-m42n06.gzns.baidu.com.out
然后觀察下管理界面的各個指標。
發現yarn里面還是只看到一台機器。感覺還是配置的地方有問題。
首先master和slave的配置應該是一樣的。改了如下的地方:
hdfs-site.xml
<property> <name>dfs.namenode.http-address</name> <value>master.Hadoop:8305</value> </property> <property> <name>dfs.namenode.secondary.http-address</name> <value>master.Hadoop:8310</value> </property>
mapred-site.xml
<property> <name>mapreduce.jobhistory.address</name> <value>master.Hadoop:8330</value> </property> <property> <name>mapreduce.jobhistory.webapp.address</name> <value>master.Hadoop:8332</value> </property>
yarn-site.xml
<property>
<name>yarn.resourcemanager.hostname</name>
<value>master.Hadoop</value>
</property>
<property>
<name>yarn.resourcemanager.webapp.address</name>
<value>master.Hadoop:8320</value>
</property>
<property>
<name>yarn.log.server.url</name>
<value>http://master.Hadoop:8325/jobhistory/logs/</value>
</property>
然后重啟master和slave的所有服務。
啟動完成之后,在以上各個管理界面能夠正常看到兩個節點啦。
http://10.117.146.12:8305/dfshealth.html#tab-overview
http://10.117.146.12:8332/jobhistory
http://10.117.146.12:8320/cluster/nodes
跑一條命令試試:
$ ./bin/hadoop jar ./share/hadoop/tools/lib/hadoop-streaming-2.7.3.jar -input /input -output /output -mapper cat -reducer wc packageJobJar: [/tmp/hadoop-unjar8343786587698780884/] [] /tmp/streamjob8627318309812657341.jar tmpDir=null 16/11/04 18:21:44 INFO client.RMProxy: Connecting to ResourceManager at master.Hadoop/10.117.146.12:8032 16/11/04 18:21:45 INFO client.RMProxy: Connecting to ResourceManager at master.Hadoop/10.117.146.12:8032 16/11/04 18:21:45 ERROR streaming.StreamJob: Error Launching job : Output directory hdfs://master.Hadoop:8390/output already exists Streaming Command Failed!
發現失敗。要刪除output目錄,但是像以前那樣刪不行,要加上hdfs的前綴:
$ ./bin/hadoop fs -rm output rm: `output': No such file or directory $ ./bin/hadoop fs -rm -r hdfs://master.Hadoop:8390/output 16/11/04 18:22:54 INFO fs.TrashPolicyDefault: Namenode trash configuration: Deletion interval = 0 minutes, Emptier interval = 0 minutes. Deleted hdfs://master.Hadoop:8390/output
然后重新跑:
$ ./bin/hadoop jar ./share/hadoop/tools/lib/hadoop-streaming-2.7.3.jar -input /input -output /output -mapper cat -reducer wc 命令成功 $ ./bin/hadoop fs -ls hdfs://master.Hadoop:8390/output Found 2 items -rw-r--r-- 3 work supergroup 0 2016-11-04 18:32 hdfs://master.Hadoop:8390/output/_SUCCESS -rw-r--r-- 3 work supergroup 25 2016-11-04 18:32 hdfs://master.Hadoop:8390/output/part-00000 $ ./bin/hadoop fs -cat hdfs://master.Hadoop:8390/output/part-00000 5 5 15
得到了結果。也不太看的出來是哪台機器上跑的。