ubuntu14.04 hadoop在两台电脑上的搭建
2014-09-04 16:49
429 查看
笔记本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也启动
相关文章推荐
- ubuntu14.04 搭建hadoop2.5.1环境
- linux(ubuntu14.04)下hadoop 单机及伪分布式搭建
- 在ubuntu14.04上使用ambari搭建hadoop集群
- Hadoop-2.7.2高可用集群搭建(Ubuntu14.04)
- hadoop2.6.4 在ubuntu14.04下的搭建
- ubuntu 14.04 LTS下Hadoop源代码环境搭建
- ubuntu 14.04 下搭建hadoop-2.7.2
- ubuntu14.04 Hadoop单机开发环境搭建MapReduce项目
- hadoop2.6.4+Ubuntu14.04的单机模式和伪分布模式环境搭建
- ubuntu 14.04搭建Hadoop-2.7.2(完全分布式)
- ubuntu14.04 i686搭建hadoop-2.5.2
- Ubuntu14.04+hadoop2.5.2完全分布式集群搭建
- hadoop2.7.0分布式系统搭建(ubuntu14.04)
- 搭建ubuntu14.04的hadoop集群【docker容器充当服务器】
- Ubuntu 两台电脑用网线搭建一个局域网(学习笔记)
- Ubuntu 14.04 搭建单机版 hadoop 2.6.0 环境
- 在ubuntu14.04环境下搭建伪分布式hadoop-2.2.0 64位系统
- Hadoop集群搭建(hadoop+zookeeper+hbase)Ubuntu14.04
- Eclipse在基于Ubuntu14.04的hadoop2.7.1分布式集群下的搭建