Hadoop 0.20.2 集群配置

说明:本文档是个人研究配置Hadoop 集群过程后产生的,参考了别人的配置文档,同时结合自己实际的情况,解决遇到的问题后最终配置成功。

 

1准备机器 :没有多余机器,安装了vmware7.0 后模拟的 2 台系统,操作系统是 Ubuntu10.10

 

 

所有的系统必须有相同的用户和密码,这里两个系统都是用hadoop:hadoop 作用户名和密码

以下操作均是以hadoop 身份进行的。

 

2 根据机器 IP 地址更改 hosts 文件

  说明:master 代表第一台机器,主节点( IP:202.112.1.50 ), slave 代表第二台机器,数据节点( IP:202.112.1.49 ),以下可能直接使用此名称。

 

Master上的 hosts 文件

127.0.0.1 hadoop1 localhost

202.112.1.50 hadoop1 hadoop1

202.112.1.49 hadoop2 hadoop2

Slave上的 hosts 文件

127.0.0.1 hadoop2 localhost

202.112.1.50 hadoop1 hadoop1

202.112.1.49 hadoop2 hadoop2

 

另外:需要将/etc/hostname文件内容更改为hadoop1或者hadoop2(不知道是否是必须,我这个该了的,OK)

(引用别人的:对于hadoop 来说,从 hdfs 来看,节点分为 namenode 和 datanode ,其中 namenode 只有一个, datanode 有多个;从 mapreduce 来看,节点分为 jobtracker 和 tasktracker ,其中 jobtracker 只有一个, tasktracker 有多个;)

 

3 安装 ssh  (为什么要安装这个东西,我不知道,或者说可以去百度一下看看别人怎么说的,他们好像说集群中通信用 ssh ,谁在乎呢,安装吧)

Master和 Slave 机器上都要 ssh

命令: apt-get install ssh   (没有多余配置了,哦,有一个需要输入Y 表示同意安装:::)

 

在master 机器上做以下操作

安装成功后执行以下命令:

 [hadoop@hadoop1:~]$ ssh-keygen  -t  dsa  -P  ''  -f  ~/.ssh/id_dsa

 然后是

[hadoop@hadoop1:~]$ cat ~/.ssh/id_dsa.pub  >>   ~/.ssh/authorized_keys

 

在slave 机器上建立 .ssh 文件夹, master 上通过以上命令自己创建了一个, slave 就要自己动手了,毕竟是 slave 嘛。

[hadoop@hadoop2:~]$ mkdir .ssh

 

然后将master 上的 authorized_keys 拷贝到 slave 的 .ssh 文件夹下,可以通过以下命令:

[hadoop@hadoop1:~]$ scp ~/.ssh/authorized_keys  hadoop2: /home/hadoop/.ssh/

 

测试一下:[hadoop@hadoop1:~] ssh hadoop2

提示是否连接,输入yes ,连接成功。以后就不需要输入 yes 了。只需要从 master 到 slave 的无密码连接,而不需要测试从 slave 到 master 的无密码连接;在 master 和 slave 机器上 .ssh 文件夹下的内容也是不完全一样的。

 

4安装 jdk

Ubuntu下执行 [hadoop@hadoop1:~] sudo apt-get instal sun-java6-jdk

Master和 Slave 机器都需要 jdk 环境。在 ubuntu 下 10.10 下是不需要再去设置 java_home 等环境变量的,安装完后直接输入  java -version 和 javac -version 测试一下, OK 。

至于其他Linux 环境,需要安装 jdk 和配置 jdk 环境变量的,请百度 /Google 吧,直到 java -version 返回正确结果为止。

 

5 下载 hadoop0.20.2

http://mirror.bjtu.edu.cn/apache/hadoop/core/hadoop-0.20.2/

6 部署 Hadoop

在master 机器上更改配置,然后再拷贝到 slave 机器上,这样所有机器上的 hadoop 就能保证一模一样了。

假定放到hadoop 用户根目录下:

首先解压 hadoop-0.20.2.tar.gz

[hadoop@hadoop1:~]$ tar -zxvf  hadoop-0.20.2.tar.gz

Ok,更改配置开始了,包括 hadoop-env.sh , masters , slaves , core-site.xml, hdfs-site.xml, mapred-site.xml 一共 6 个文件。

hadoop-env.sh

添加以下两行(根据实际路径可能有变化哦):

 export JAVA_HOME=/usr/lib/jvm/java-6-sun

 export HADOOP_HOME=/home/hadoop/hadoop-0.20.2

  masters:

   hadoop1

  slaves:

   hadoop2

core-site.xml:

<?xml version="1.0"?>

<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>

<configuration>

 <property>

  <name>fs.default.name</name>

  <value>hdfs://202.112.1.50:9000</value>

  <description>这里 202.112.1.50 这个是指 master 机器 IP 地址,当然可以使用 hadoop1 主机名,条件是 DNS 能够解析,否则会有问题, datanode 连接 namenode 时会报连接不上的错误。所以实际应用中根据 master 机器的 IP 来更改吧,最好使用 IP 这样就不存在问题了。 The name of the default file system.  A URI whose scheme and authority determine the FileSystem implementation.  The uri's scheme determines the config property (fs.SCHEME.impl) naming  the FileSystem implementation class.  The uri's authority is used to determine the host, port, etc. for a filesystem.</description>

</property>

<property>

  <name>hadoop.tmp.dir</name>

  <value>/home/hadoop/HadoopTemp</value>

  <description>这里这个 HadoopTemp 目录需要自己手动建立,在 master 和 slave 机器上都需要手动创建 </description>

</property>

</configuration>

 

hdfs-site.xml

 

<?xml version="1.0"?>

<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>

<configuration>

<property>

  <name>dfs.replication</name>

  <value>1</value>

  <description>这里指定数据文件默认保留几份备份,默认的是 3 ,自己可以指定,测试时可以指定 1 减少空间需求。 Default block replication.  The actual number of replications can be specified when the file is created. The default is used if replication is not specified in create time.

  </description>

</property>

</configuration>

 

 mapred-site.xml

 

<?xml version="1.0"?>

<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>

<configuration>

<property>

  <name>mapred.job.tracker</name>

  <value> 202.112.1.50 :9001</value>

  <description>同意这里指定 Master 的 IP 或者 host ,最好指定 IP 。 The host and port that the MapReduce job tracker runs at.  If "local", then jobs are run in-process as a single map and reduce task.

  </description>

</property>

</configuration>

 

至此,所有配置已经完成,hadoop 的配置文件只需要更改自己需要更改的,以上就仅仅更改了很少属性,而其自身有相当多的属性, hadoop 在工作时如果用户更改了,则使用更改后的属性值,如果没有在 *-site.xml 文档里出现,则 hadoop 使用默认的属性,默认属性值 *-default.xml 文档里(默认文档中 /hadoop-0.20.2/src/ 目录下);当然也可以将整个 -default.xml 文档内容拷贝过来,修改需要更改的属性。

以上配置是在master 上进行的,现在将整个 hadoop-0.20.2 文件夹拷贝到 slave 机器上,使用命令:

[hadoop@hadoop1:~]$ scp -r ~/hadoop-0.20.2 hadoop2:/home/hadoop/

 

7 启动 hadoop

  Hadoop的命令在 /hadoop-0.20.2/bin/ 目录下,启动过程在 master 机器上进行。

启动之前需要进行格式化,类似于Windows 文件系统格式化, hadoop 的文件系统也需要格式化后才能被 hadoop 使用。

[hadoop@hadoop1:hadoop-0.20.2]$ bin/hadoop namenode -format

此时配置文件里设置的HadoopTemp 目录会发生变化, check 一下了。如果此命令出错,请百度 /Google 了。

启动:

[hadoop@hadoop1:hadoop-0.20.2]$ bin/start-all.sh

如果有错误,请查看log 文件

测试:

[hadoop@hadoop1:hadoop-0.20.2]$ bin/hadoop dfs -mkdir testdir   #创建一个文件夹

[hadoop@hadoop1:hadoop-0.20.2]$ bin/hadoop dfs -put /home/hadoop/test.txt  /testdir/test.txt 

#上传一个文件

[hadoop@hadoop1:hadoop-0.20.2]$ bin/hadoop dfs -ls   #列出文件目录

当然也可以访问:http://202.112.1.50:50070

                http://202.112.1.50:50030

 

 

 

 

8 问题及解决

1 安装 jdk 时找不到 jdk 

我在终端输入:sudo apt-get install sun_java6_jdk

出现了问题:package sun_java6_jdk 不能被找到

apt-get提示了以下信息:

Package sun-java6-jdk is not available, but is referred to by another package.

This may mean that the package is missing, has been obsoleted, or

is only available from another source

E: Package sun-java6-jdk has no installation candidate

 

解决办法如下:

1. 在终端输入:  sudo add-apt-repository "deb http://archive.canonical.com/ lucid partner"   回车

2. 在终端输入: sudo apt-get update,  回车

3. 在终端输入: sudo apt-get install sun_java6_jdk

OK

问题解决了

2 虚拟机上不能联网问题,即不能自动获得 IP

解决办法:设置固定IP

更改/etc/network/interfaces 文件内容如下:

# This file describes the network interfaces available on your system

# and how to activate them. For more information, see interfaces(5).

auto lo

iface lo inet loopback

auto eth0

iface eth0 inet static

address 9.186.54.50

netmask 255.255.255.0

gateway 9.186.54.1

然后重新启��新IP : sudo /etc/init.d/networking restart

3最严重的问题是启动 hadoop 后一切都表现正常 ,然而执行  bin/hadoop dfs -put /home/hadoop/test.txt  /testdir/test.txt命令时出错:

10/01/07 19:50:23 INFO hdfs.DFSClient: org.apache.hadoop.ipc.RemoteException: java.io.IOException: File /user/administrator/chen3/NOTICE.txt  could only be replicated to 0 nodes, instead of 1 
    at org.apache.hadoop.hdfs.server.namenode.FSNamesystem.getAdditionalBlock(FSNamesystem.java:1270) 
    at org.apache.hadoop.hdfs.server.namenode.NameNode.addBlock(NameNode.java:351) 
    at sun.reflect.GeneratedMethodAccessor3.invoke(Unknown Source) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) 
    at java.lang.reflect.Method.invoke(Method.java:597) 
    at org.apache.hadoop.ipc.RPC$Server.call(RPC.java:452) 
    at org.apache.hadoop.ipc.Server$Handler.run(Server.java:892)

百度一下有很多相关的解决办法,当然这些办法都没有解决我的错误,也就是说有其它原因引起了该错误,最后查得该错误就是配置文件里使用了 hostname而不是 IP 地址,因为没有 DNS 服务器来解析,所以 ...

推荐阅读文章

大数据工程师在阿里面试流程是什么?

学习大数据需要具备怎么样基础?

年薪30K的大数据开发工程师的工作经验总结?

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值