ubuntu14.04 hadoop在兩臺電腦上的搭建
阿新 • • 發佈:2019-01-08
筆記本IP 115.27.116.52 master
桌上型電腦IP 162.105.13.237 slave1
筆記本:ubuntu12.04 64bit, hadoop-2.5.0,JDK1.7.0_51, 機器名 ubuntu
桌上型電腦:ubuntu14.04 64bit, hadoop-2.5.0,JDK1.8.0_11, 機器名 Tank
兩臺機器的使用者名稱都是flmeng,並且hadoop,JDK都安裝在/usr/local下面
筆記本和桌上型電腦上的hadoop已經配置好,在單機偽叢集分佈下可以正常工作。我以筆記本作為namenode,以桌上型電腦作為datanode
I 這一步對每一臺電腦都要設定
1 對於每一個電腦,都要修改 /etc/hostname為相應的名字
例如,對筆記本
sudo vim /etc/hostname 之後改成master
對臺式機
sudo vim /etc/hostname 改成 slave1
PS:
注意,有時候設定完hostname之後需要重啟機器。同時,注意hostname檔案下只能有你設定的hostname一個量,多了會出現ubuntu桌面沒有辦法正常啟動的錯誤.
2 修改/etc/hosts檔案,增加IP和hostname的對映關係
115.27.116.52 master
162.105.13.237 slave1
(注意只需要追加即可,原來的127.0.0.0之類的可以不必修改)
3 設定無密碼登入。這一步在單機偽叢集分佈的時候已經做過了。
4 配置 xml
1) core-site.xml
-------------
<configuration>
<property>
<name>fs.default.name</name>
<value>hdfs://master:8020</value>
</property>
<property>
<name>hadoop.tmp.dir</name>
<value>/usr/local/hadoop/tmp</value>
</property>
</configuration>
2) hdfs-site.xml
-------------
<configuration>
<property>
<name>dfs.replication</name>
<value>1</value>
</property>
<property>
<name>dfs.name.dir</name>
<value>${hadoop.tmp.dir}/dfs/name</value>
</property>
<property>
<name>dfs.data.dir</name>
<value>${hadoop.tmp.dir}/dfs/data</value>
</property>
<property>
<name>fs.checkpoint.dir</name>
<value>${hadoop.tmp.dir}/dfs/namesecondary</value>
</property>
</configuration>
3) mapred-site.xml
-----------------
<configuration>
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
<property>
<name>mapred.local.dir</name>
<value>${hadoop.tmp.dir}/mapred/local</value>
<final>true</final>
</property>
<property>
<name>mapred.task tracker.map.tasks.maximum</name>
<value>2</value>
<final>true</final>
</property>
<property>
<name>mapred.task tracker.reduce.tasks.maximum</name>
<value>2</value>
<final>true</final>
</property>
</configuration>
4) slaves
-------------
slave1
5) yarn-site.xml
-------------------------
<configuration>
<property>
<name>yarn.resourcemanager.address</name>
<value>master:8021</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.resourcemanager.scheduler.address</name>
<value>master:8030</value>
</property>
<property>
<name>yarn.resourcemanager.resource-tracker.address</name>
<value>master:8031</value>
</property>
<property>
<name>yarn.resourcemanager.admin.address</name>
<value>master:8033</value>
</property>
<property>
<name>yarn.resourcemanager.webapp.address</name>
<value>master:8088</value>
</property>
</configuration>
6) hadoop-env.sh 及 yarn-env.sh中設定JAVA_HOME
PS:
1 注意在設定hadoop.tmp.dir的時候,一定要建立相應的目錄,並且賦予相應的目錄足夠的許可權,以便hadoop系統能夠進行讀寫
III啟動hadoop
1 在筆記本端
hadoop namenode -format 進行格式劃
2 sbin/start-dfs.sh
使用jps會看見,在master上面啟動了NameNode,SecondaryNameNode
在slave1上使用jps檢視,會看見上面啟動了 DataNode
3 sbin/start-yarn.sh
master端多了一個ResourceManager,slave1端多了一個NodeManager。
IV 執行wordcount作業。顯示成功
VI增加一個節點
PS
1 如果出現 java.io.NameNode:java.io.IOException:Cannot create directory,這是因為許可權不夠的問題造成的。
sudo chmod -R a+w /${hadoop.tmp.dir}。為了方便起見,最好將這個目錄放在使用者有許可權的目錄下,以免的對叢集中的每個點都要進行如此操作
2 兩臺機器之間仍然無法免密碼登入。即使重新啟動了電腦也不可以。
3 sbin/start-dfs.sh後,無法啟動datanode.檢視日誌(注意,datanode的日誌是在臺式機的hadoop安裝目錄/etc下的),顯示
014-08-16 02:49:32,599 WARN org.apache.hadoop.hdfs.server.datanode.DataNode: Problem connecting to server: hadoop1:8020
(並且該日誌是不斷增長的,說明namenode仍在不斷試圖連結到datanode
之後又出現瞭如下的錯誤
java.net.UnknownHostException: Tank: Tank: unknown error
at java.net.InetAddress.getLocalHost(InetAddress.java:1484)
at org.apache.hadoop.security.SecurityUtil.getLocalHostName(SecurityUtil.java:186)
at org.apache.hadoop.security.SecurityUtil.login(SecurityUtil.java:206)
at org.apache.hadoop.hdfs.server.datanode.DataNode.instantiateDataNode(DataNode.java:1780)
at org.apache.hadoop.hdfs.server.datanode.DataNode.createDataNode(DataNode.java:1829)
at org.apache.hadoop.hdfs.server.datanode.DataNode.secureMain(DataNode.java:2005)
at org.apache.hadoop.hdfs.server.datanode.DataNode.main(DataNode.java:2029)
Caused by: java.net.UnknownHostException: Tank: unknown error
at java.net.Inet4AddressImpl.lookupAllHostAddr(Native Method)
at java.net.InetAddress$2.lookupAllHostAddr(InetAddress.java:907)
at java.net.InetAddress.getAddressesFromNameService(InetAddress.java:1302)
at java.net.InetAddress.getLocalHost(InetAddress.java:1479)
錯誤slave DataNode的機器 /etc/hosts 下增加一行: 127.0.0.1 Tank即可(源自 http://lvdccyb.iteye.com/blog/1757047)
4.sbin/start-yarn.sh無法啟動Resourcemanager和DodeManager
NodeManager輸出日誌如下所示
java.net.UnknownHostException: Tank: Tank: unknown error
at java.net.InetAddress.getLocalHost(InetAddress.java:1484)
at org.apache.hadoop.metrics2.impl.MetricsSystemImpl.getHostname(MetricsSystemImpl.java:515)
at org.apache.hadoop.metrics2.impl.MetricsSystemImpl.configureSystem(MetricsSystemImpl.java:454)
at org.apache.hadoop.metrics2.impl.MetricsSystemImpl.configure(MetricsSystemImpl.java:450)
at org.apache.hadoop.metrics2.impl.MetricsSystemImpl.start(MetricsSystemImpl.java:181)
at org.apache.hadoop.metrics2.impl.MetricsSystemImpl.init(MetricsSystemImpl.java:157)
at org.apache.hadoop.metrics2.lib.DefaultMetricsSystem.init(DefaultMetricsSystem.java:54)
at org.apache.hadoop.metrics2.lib.DefaultMetricsSystem.initialize(DefaultMetricsSystem.java:50)
at org.apache.hadoop.yarn.server.nodemanager.NodeManager.serviceInit(NodeManager.java:228)
at org.apache.hadoop.service.AbstractService.init(AbstractService.java:163)
at org.apache.hadoop.yarn.server.nodemanager.NodeManager.initAndStartNodeManager(NodeManager.java:425)
at org.apache.hadoop.yarn.server.nodemanager.NodeManager.main(NodeManager.java:472)
Caused by: java.net.UnknownHostException: Tank: unknown error
at java.net.Inet6AddressImpl.lookupAllHostAddr(Native Method)
at java.net.InetAddress$2.lookupAllHostAddr(InetAddress.java:907)
at java.net.InetAddress.getAddressesFromNameService(InetAddress.java:1302)
at java.net.InetAddress.getLocalHost(InetAddress.java:1479)
... 11 more
原因是<property>
<name>yarn.resourcemanager.address</name>
<value> master:8032</value>
</property>
第三行hadoop1前面多加了一個空格,把空格去掉,就不會出現這樣的錯誤.同時resourcemanager也啟動
桌上型電腦IP 162.105.13.237 slave1
筆記本:ubuntu12.04 64bit, hadoop-2.5.0,JDK1.7.0_51, 機器名 ubuntu
桌上型電腦:ubuntu14.04 64bit, hadoop-2.5.0,JDK1.8.0_11, 機器名 Tank
兩臺機器的使用者名稱都是flmeng,並且hadoop,JDK都安裝在/usr/local下面
筆記本和桌上型電腦上的hadoop已經配置好,在單機偽叢集分佈下可以正常工作。我以筆記本作為namenode,以桌上型電腦作為datanode
I 這一步對每一臺電腦都要設定
1 對於每一個電腦,都要修改 /etc/hostname為相應的名字
例如,對筆記本
sudo vim /etc/hostname 之後改成master
對臺式機
sudo vim /etc/hostname 改成 slave1
PS:
注意,有時候設定完hostname之後需要重啟機器。同時,注意hostname檔案下只能有你設定的hostname一個量,多了會出現ubuntu桌面沒有辦法正常啟動的錯誤.
2 修改/etc/hosts檔案,增加IP和hostname的對映關係
115.27.116.52 master
162.105.13.237 slave1
(注意只需要追加即可,原來的127.0.0.0之類的可以不必修改)
3 設定無密碼登入。這一步在單機偽叢集分佈的時候已經做過了。
4 配置 xml
1) core-site.xml
-------------
<configuration>
<property>
<name>fs.default.name</name>
<value>hdfs://master:8020</value>
</property>
<property>
<name>hadoop.tmp.dir</name>
<value>/usr/local/hadoop/tmp</value>
</property>
</configuration>
2) hdfs-site.xml
-------------
<configuration>
<property>
<name>dfs.replication</name>
<value>1</value>
</property>
<property>
<name>dfs.name.dir</name>
<value>${hadoop.tmp.dir}/dfs/name</value>
</property>
<property>
<name>dfs.data.dir</name>
<value>${hadoop.tmp.dir}/dfs/data</value>
</property>
<property>
<name>fs.checkpoint.dir</name>
<value>${hadoop.tmp.dir}/dfs/namesecondary</value>
</property>
</configuration>
3) mapred-site.xml
-----------------
<configuration>
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
<property>
<name>mapred.local.dir</name>
<value>${hadoop.tmp.dir}/mapred/local</value>
<final>true</final>
</property>
<property>
<name>mapred.task tracker.map.tasks.maximum</name>
<value>2</value>
<final>true</final>
</property>
<property>
<name>mapred.task tracker.reduce.tasks.maximum</name>
<value>2</value>
<final>true</final>
</property>
</configuration>
4) slaves
-------------
slave1
5) yarn-site.xml
-------------------------
<configuration>
<property>
<name>yarn.resourcemanager.address</name>
<value>master:8021</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.resourcemanager.scheduler.address</name>
<value>master:8030</value>
</property>
<property>
<name>yarn.resourcemanager.resource-tracker.address</name>
<value>master:8031</value>
</property>
<property>
<name>yarn.resourcemanager.admin.address</name>
<value>master:8033</value>
</property>
<property>
<name>yarn.resourcemanager.webapp.address</name>
<value>master:8088</value>
</property>
</configuration>
6) hadoop-env.sh 及 yarn-env.sh中設定JAVA_HOME
PS:
1 注意在設定hadoop.tmp.dir的時候,一定要建立相應的目錄,並且賦予相應的目錄足夠的許可權,以便hadoop系統能夠進行讀寫
III啟動hadoop
1 在筆記本端
hadoop namenode -format 進行格式劃
2 sbin/start-dfs.sh
使用jps會看見,在master上面啟動了NameNode,SecondaryNameNode
在slave1上使用jps檢視,會看見上面啟動了 DataNode
3 sbin/start-yarn.sh
master端多了一個ResourceManager,slave1端多了一個NodeManager。
IV 執行wordcount作業。顯示成功
VI增加一個節點
PS
1 如果出現 java.io.NameNode:java.io.IOException:Cannot create directory,這是因為許可權不夠的問題造成的。
sudo chmod -R a+w /${hadoop.tmp.dir}。為了方便起見,最好將這個目錄放在使用者有許可權的目錄下,以免的對叢集中的每個點都要進行如此操作
2 兩臺機器之間仍然無法免密碼登入。即使重新啟動了電腦也不可以。
3 sbin/start-dfs.sh後,無法啟動datanode.檢視日誌(注意,datanode的日誌是在臺式機的hadoop安裝目錄/etc下的),顯示
014-08-16 02:49:32,599 WARN org.apache.hadoop.hdfs.server.datanode.DataNode: Problem connecting to server: hadoop1:8020
(並且該日誌是不斷增長的,說明namenode仍在不斷試圖連結到datanode
之後又出現瞭如下的錯誤
java.net.UnknownHostException: Tank: Tank: unknown error
at java.net.InetAddress.getLocalHost(InetAddress.java:1484)
at org.apache.hadoop.security.SecurityUtil.getLocalHostName(SecurityUtil.java:186)
at org.apache.hadoop.security.SecurityUtil.login(SecurityUtil.java:206)
at org.apache.hadoop.hdfs.server.datanode.DataNode.instantiateDataNode(DataNode.java:1780)
at org.apache.hadoop.hdfs.server.datanode.DataNode.createDataNode(DataNode.java:1829)
at org.apache.hadoop.hdfs.server.datanode.DataNode.secureMain(DataNode.java:2005)
at org.apache.hadoop.hdfs.server.datanode.DataNode.main(DataNode.java:2029)
Caused by: java.net.UnknownHostException: Tank: unknown error
at java.net.Inet4AddressImpl.lookupAllHostAddr(Native Method)
at java.net.InetAddress$2.lookupAllHostAddr(InetAddress.java:907)
at java.net.InetAddress.getAddressesFromNameService(InetAddress.java:1302)
at java.net.InetAddress.getLocalHost(InetAddress.java:1479)
錯誤slave DataNode的機器 /etc/hosts 下增加一行: 127.0.0.1 Tank即可(源自 http://lvdccyb.iteye.com/blog/1757047)
4.sbin/start-yarn.sh無法啟動Resourcemanager和DodeManager
NodeManager輸出日誌如下所示
java.net.UnknownHostException: Tank: Tank: unknown error
at java.net.InetAddress.getLocalHost(InetAddress.java:1484)
at org.apache.hadoop.metrics2.impl.MetricsSystemImpl.getHostname(MetricsSystemImpl.java:515)
at org.apache.hadoop.metrics2.impl.MetricsSystemImpl.configureSystem(MetricsSystemImpl.java:454)
at org.apache.hadoop.metrics2.impl.MetricsSystemImpl.configure(MetricsSystemImpl.java:450)
at org.apache.hadoop.metrics2.impl.MetricsSystemImpl.start(MetricsSystemImpl.java:181)
at org.apache.hadoop.metrics2.impl.MetricsSystemImpl.init(MetricsSystemImpl.java:157)
at org.apache.hadoop.metrics2.lib.DefaultMetricsSystem.init(DefaultMetricsSystem.java:54)
at org.apache.hadoop.metrics2.lib.DefaultMetricsSystem.initialize(DefaultMetricsSystem.java:50)
at org.apache.hadoop.yarn.server.nodemanager.NodeManager.serviceInit(NodeManager.java:228)
at org.apache.hadoop.service.AbstractService.init(AbstractService.java:163)
at org.apache.hadoop.yarn.server.nodemanager.NodeManager.initAndStartNodeManager(NodeManager.java:425)
at org.apache.hadoop.yarn.server.nodemanager.NodeManager.main(NodeManager.java:472)
Caused by: java.net.UnknownHostException: Tank: unknown error
at java.net.Inet6AddressImpl.lookupAllHostAddr(Native Method)
at java.net.InetAddress$2.lookupAllHostAddr(InetAddress.java:907)
at java.net.InetAddress.getAddressesFromNameService(InetAddress.java:1302)
at java.net.InetAddress.getLocalHost(InetAddress.java:1479)
... 11 more
原因是<property>
<name>yarn.resourcemanager.address</name>
<value> master:8032</value>
</property>
第三行hadoop1前面多加了一個空格,把空格去掉,就不會出現這樣的錯誤.同時resourcemanager也啟動