在Ubuntu9.04上配置Hadoop集群

来源:互联网 发布:概率阶层的算法 编辑:程序博客网 时间:2024/04/28 07:48

参考《Hadoop开发者入门专刊.pdf》

 

实践环境:

Ubuntu9.04+jdk1.6.20+hadoop-0.20.2(两台实体机)

机器名                 IP                    作用
ibm           125.216.227.173    NameNode、master、jobTracker
ibm01        125.216.227.152    DataNode、slave、taskTracker

 

安装步骤:

1、安装ubuntu9.04

     我用ubuntu9.04的光盘在xp系统下安装双系统,但不知道为什么安装后ubuntu总是用户名和密码验证不通过,装ubuntu单系统时能正常验证。没办法,只有两台机子都安装ubuntu单系统。

     还有就是更新源用默认的就可以了,没必要像《Hadoop开发者入门专刊.pdf》那样修改教育网的源!

创建用户:为了操作的简便,在所有机器上创建相同用户名和相同密码的用户。本例创建了相同的用户ibm。
修改机器名:$ hostname 机器名。(注:安装ubuntu时默认hostname时ibm-desktop,在用hostname命令修改后,重启ubuntu,会自动变回ibm-desktop,所以重启电脑后记得把hostname改回来,免得与下面设置的/etc/hosts文件不一致!我就试过了,会报错:too many fetch-failures等等,导致reduce阶段失败!)

在/etc/hosts 中添加机器名和相应的IP:

127.0.0.1 localhost
125.216.227.173 ibm
125.216.227.152 ibm01

# The following lines are desirable for IPv6 capable hosts
::1     localhost ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
ff02::3 ip6-allhosts

2、开启ssh 服务

注意:自动安装openssh-server 时,先要进行sudo apt-get update 操作。

安装openssh-server:$ sudo apt-get install openssh-server

3、建立ssh 无密码登录

(1)在NameNode 上实现无密码登录本机:
$ ssh-keygen -t dsa -P '' -f ~/.ssh/id_dsa ,
直接回车,完成后会在~/.ssh/生成两个文件:id_dsa 和id_dsa.pub。这两个是成对出现,类似钥匙和锁。

再把id_dsa.pub 追加到授权key 里面(当前并没有authorized_keys文件):

$ cat ~/.ssh/id_dsa.pub >> ~/.ssh/authorized_keys。

完成后可以实现无密码登录本机:$ ssh localhost。

(2)实现NameNode 无密码登录其他DataNode(不用设置DataNode无密码登录NameNode!):
把NameNode 上的id_dsa.pub 文件追加到dataNode 的authorized_keys 内( 以125.216.227.152节点为例):
a. 拷贝NameNode 的id_dsa.pub 文件:
$ scp id_dsa.pub ibm@125.216.227.152:/home/ibm/
b. 登录125.216.227.152,执行$ cat id_dsa.pub >> .ssh/authorized_keys
其他的dataNode 执行同样的操作。

注意:如果配置完毕,如果namenode 依然不能访问datanode,可以修改datanode 的authorized_keys:$ chmod 600 authorized_keys。

注意:

(1)在配置过程中我试过namenode ssh localhost 时报错:Agent admitted failure to sign using the key,解决:$ ssh-agent ;$ ssh-add id_dsa

详细请看:http://www.jiangmiao.org/blog/559.html

(2)配置完毕后,还是不能无密码链接到DataNode,于是查看DataNode的.ssh文件夹,里面只有authorized_keys,在DataNode用ssh链接以下NameNode,新生成known_hosts文件,之后在NameNode就能无密码链接DataNode了,也不知具体原因是什么。

4、关闭防火墙
$ sudo ufw disable

注意:这步非常重要。如果不关闭,会出现找不到datanode 问题

5、安装jdk1.6

由于教育网不能访问外网,ubuntu的Firefox也没有装代理,所以没法从sun主页下载jdk安装。(注:不能从windows下载linux的jdk然后传到ubuntu后安装,具体看我另一篇文章《 ubuntu9.04 JDK,JRE 环境变量配置》。)

安装配置JAVA 1.6.20
$sudo apt-get install sun-java6-jre sun-java6-jdk sun-java6-plugin

然后配置环境变量:

        vi  /etc/profile

在其中添加如下:
export JAVA_HOME=/usr/lib/jvm/java-6-sun-1.6.0.20
export CLASSPATH=.:$JAVA_HOME/lib:$JAVA_HOME/jre/lib
export PATH=$JAVA_HOME/bin:$JAVA_HOME/jre/bin:$PATH:$HOME/bin
保存退出。

重启ubuntu!

 测试

    java -version

    ...   java version "1.6.0_20"
    ...  Java(TM) SE Runtime Environment (build 1.6.0_20-b03)
    ...  Java HotSpot(TM) Client VM (build 11.3-b02, mixed mode, sharing)

 

 注意:每台机器的java 环境最好一致。

6、安装hadoop

下载hadoop-0.20.2.tar.gz:

http://labs.xiaonei.com/apache-mirror/hadoop/core/hadoop-0.20.2/hadoop-0.20.2.tar.gz

解压:$ tar –zvxf hadoop-0.20.2.tar.gz

把Hadoop 的安装路径添加到环/etc/profile 中:

export HADOOP_HOME=/home/ibm/hadoop-0.20.2

export PATH=$HADOOP_HOME/bin:$PATH

7、配置hadoop

hadoop 的主要配置都在hadoop-0.20.2/conf 下。

(1)在conf/hadoop-env.sh 中配置Java 环境(namenode 与datanode 的配置相同):
$ gedit hadoop-env.sh
$ export JAVA_HOME=/usr/lib/jvm/java-6-sun-1.6.0.20

(2)配置conf/masters 和conf/slaves 文件:(只在namenode 上配置)
masters: 125.216.227.173

slaves:125.216.227.152

(3)配置conf/core-site.xml, conf/hdfs-site.xml 及conf/mapred-site.xml(简单配置,namenode 与datanode 的配置相同)

core-site.xml:
<configuration>
<!--- global properties -->
<property>
<name>hadoop.tmp.dir</name>
<value>/home/ibm/tmp</value>
<description>A base for other temporary directories.</description>
</property>
<!-- file system properties -->
<property>
<name>fs.default.name</name>
<value>hdfs://125.216.227.173:9000</value>
</property>
</configuration>
hdfs-site.xml:( replication 默认为3,如果不修改,datanode 少于三台就会报错)
<configuration>
<property>
<name>dfs.replication</name>
<value>1</value>
</property>
</configuration>
mapred-site.xml:
<configuration>
<property>
<name>mapred.job.tracker</name>
<value>125.216.227.173:9001</value>
</property>
</configuration>

8、运行hadoop

进入hadoop-0.20.2/bin,首先格式化文件系统:$ hadoop namenode –format
启动Hadoop:$ start-all.sh
用jps 命令查看进程,NameNode 上的结果如下:

5023 JobTracker
4767 NameNode
4908 SecondaryNameNode
8107 Jps

DataNode 上的结果:

4453 TaskTracker
8653 Jps
4302 DataNode 

查看集群状态:$ hadoop dfsadmin -report

Hadoop 的web 方式查看:http://125.216.227.173:50070

NameNode 'ibm:9000'
Started:  Tue Jul 13 04:36:49 CST 2010
Version:  0.20.2, r911707
Compiled:  Fri Feb 19 08:07:34 UTC 2010 by chrisdo
Upgrades:  There are no upgrades in progress.

Browse the filesystem
Namenode Logs
Cluster Summary
26 files and directories, 16 blocks = 42 total. Heap Size is 7.62 MB / 966.69 MB (0%)
Configured Capacity : 71.99 GB
DFS Used : 296 KB
Non DFS Used : 6.75 GB
DFS Remaining : 65.24 GB
DFS Used% : 0 %
DFS Remaining% : 90.62 %
Live Nodes  : 1
Dead Nodes  : 0

NameNode Storage:
Storage Directory Type State
/home/ibm/tmp/dfs/name IMAGE_AND_EDITS Active

Hadoop, 2010.   

9、运行wordcount.java 程序

(1)先在本地磁盘建立两个输入文件file01 和file02:
$ echo “Hello World Bye World” > file01
$ echo “Hello Hadoop Goodbye Hadoop” > file02
(2)在hdfs 中建立一个input 目录:$ hadoop fs –mkdir input
(3)将file01 和file02 拷贝到hdfs 中:
$ hadoop fs –copyFromLocal /home/ibm/soft/file0* input
(4)执行wordcount:
$ hadoop jar hadoop-0.20.2-examples.jar wordcount input output
(5)完成之后,查看结果:

10/07/13 05:10:04 INFO input.FileInputFormat: Total input paths to process : 2
10/07/13 05:10:05 INFO mapred.JobClient: Running job: job_201007130437_0003
10/07/13 05:10:06 INFO mapred.JobClient:  map 0% reduce 0%
10/07/13 05:10:21 INFO mapred.JobClient:  map 100% reduce 0%
10/07/13 05:10:36 INFO mapred.JobClient:  map 100% reduce 100%
10/07/13 05:10:41 INFO mapred.JobClient: Job complete: job_201007130437_0003
10/07/13 05:10:41 INFO mapred.JobClient: Counters: 17
10/07/13 05:10:41 INFO mapred.JobClient:   Job Counters
10/07/13 05:10:41 INFO mapred.JobClient:     Launched reduce tasks=1
10/07/13 05:10:41 INFO mapred.JobClient:     Launched map tasks=2
10/07/13 05:10:41 INFO mapred.JobClient:     Data-local map tasks=2
10/07/13 05:10:41 INFO mapred.JobClient:   FileSystemCounters
10/07/13 05:10:41 INFO mapred.JobClient:     FILE_BYTES_READ=79
10/07/13 05:10:41 INFO mapred.JobClient:     HDFS_BYTES_READ=50
10/07/13 05:10:41 INFO mapred.JobClient:     FILE_BYTES_WRITTEN=228
10/07/13 05:10:41 INFO mapred.JobClie 
(注意:/etc/hosts设置的ip和主机名一定要对应上,否则reduce会失败!)
$ hadoop fs -cat output/part-r-00000

Bye         1

Goodbye 1

Hadoop   2

Hello        2

World      2