您的位置:首页 > 运维架构

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也启动
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: