ubuntu12.04-64 server系统上hadoop2.2.0/2.3.0环境搭建及总结 

第一部分 Hadoop 2.2.0构建准备工作(每台都要做)

Hadoop我们从Apache官方网站直接下载最新版本Hadoop2.2.0。官方目前是提供了linux32位系统可执行文件,所以如果需要在64位系统上部署则需要单独下载src 源码自行编译。

下载地址:http://apache.claz.org/hadoop/common/hadoop-2.2.0/

三台主机的OS:ubuntu12.04-64 server

在三台机器上创建相同的用户

(这是Hadoop的基本要求)

创建用户的步骤如下:

(1) sudoaddgroup hadoop

(2) sudoadduser --ingroup hadoop haduser

编辑/etc/sudoers编辑文件,在root ALL=(ALL)ALL行下添加haduser ALL=(ALL)ALL。如果不添加这行,haduser将不能执行sudo操作。

在三台主机上分别设置/etc/hosts 和/etc/hostname

hosts这个文件用于定义主机名和IP地址之间的映射关系。

127.0.0.1           localhost
172.20.120.200      master
172.20.120.201      slave1
172.20.120.202      slave2

 

hostname这个文件用于定义Ubuntu的主机名:如:master(或者slave1等)注:可能需要重启才生效。

设置无密码登陆

安装完成后会在~目录(当前用户主目录,即这里的/home/haduser)下产生一个隐藏文件夹.ssh(ls  -a 可以查看隐藏文件)。如果没有这个文件,自己新建即可(mkdir .ssh)。

接着在master上生成密钥并配置SSH无密码登录

具体步骤如下:(简化成master无秘钥访问slave,每台机器都做最好)

1、进入.ssh文件夹

2、 ssh-keygen -t  rsa 之后一路回车(产生秘钥)

3、把id_rsa.pub 追加到授权的 key 里面去(catid_rsa.pub >> authorized_keys)

4、重启 SSH 服务命令使其生效

将生成的authorized_keys文件拷贝到两台slave主机相同的文件夹下,命令如下:

scp authorized_keysslave1:~/.ssh/

scp authorized_keysslave2:~/.ssh/

此时已经可以进行ssh的无密码登陆,查看是否可以从master主机无密码登录slave,输入命令

$:ssh slave1

$:ssh slave2

安装jdk

(这里以.tar.gz版本,64位系统为例),下载地址:http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html

选择要安装java的位置,如/usr/目录下,新建文件夹java(mkdirjava)

将文件jdk-8-linux-x64.tar.gz移动到/usr/java

解压:tar -zxvfjdk-8-linux-x64.tar.gz

至此,jkd安装准备完毕,下面配置环境变量

4.3、打开/etc/profile(vim /etc/profile)

在最后面添加如下内容:

exportJAVA_HOME=/usr/java/jdk1.8.0/
exportJRE_HOME=/usr/java/jdk1.8.0/
export PATH=$JAVA_HOME/bin:$JAVA_HOME/jre/bin:$PATH
exportCLASSPATH=$CLASSPATH:.:$JAVA_HOME/lib:$JAVA_HOME/jre/lib
exportJAVA_BIN=/usr/java/jdk1.8.0/bin
执行source/etc/profile
验证是否安装成功:java -version
java version"1.8.0"
Java(TM) SERuntime Environment (build 1.8.0-b132)
JavaHotSpot(TM) 64-Bit Server VM (build 25.0-b70, mixed mode)

注:每台机器执行相同操作,最好将java安装在相同路径下(不是必须的,但这样会使后面的配置方便很多)

ufw disable (重启生效)

至此,准备工作完毕!

第二部分 集群环境搭建

1、这里我们搭建一个由三台机器组成的集群:

172.20.120.200 haduser/passwd master namenode/ secondarynamenode/resourcemanger
172.120.120.201 haduser/passwd slave1 datanode/nodemanage 
172.128.120.202 haduser/passwd slave2 datanode/nodemanage

上面各列分别为IP、user/passwd、hostname和在cluster中充当的角色

进入hadoop-2.2.0安装:

以下操作以haduser登录进行操作。

由于hadoop集群中每个机器上面的配置基本相同,所以我们先在namenode上面进行配置部署,然后再复制到其他节点。所以这里的安装过程相当于在每台机器上面都要执行。但需要注意的是集群中64位系统和32位系统的问题。

1、解压文件

将第一部分中下载的hadoop-2.2.0_64.tar.gz解压到/home/haduser/Hadoop/路径下。然后,将其存放于其他地方进行备份。注意:每台机器的安装路径要相同!!

2、 hadoop配置过程

这里要涉及到的配置文件有7个:

~/hadoop-2.2.0/etc/hadoop/hadoop-env.sh
~/hadoop-2.2.0/etc/hadoop/yarn-env.sh
~/hadoop-2.2.0/etc/hadoop/slaves
~/hadoop-2.2.0/etc/hadoop/core-site.xml
~/hadoop-2.2.0/etc/hadoop/hdfs-site.xml
~/hadoop-2.2.0/etc/hadoop/mapred-site.xml
~/hadoop-2.2.0/etc/hadoop/yarn-site.xml

以上个别文件默认不存在的,可以复制相应的template文件获得。

配置文件1:hadoop-env.sh

修改JAVA_HOME值export JAVA_HOME=/usr/java/jdk1.8.0

配置文件2:yarn-env.sh

修改JAVA_HOME值exportJAVA_HOME=/usr/java/jdk1.8.0

配置文件3:slaves (这个文件里面保存所有slave节点)

写入以下内容:

slave1

slave2

配置文件4:core-site.xml

<configuration>
<property>
<name>fs.defaultFS</name>
<value>hdfs://master:9000</value>
</property>
<property>
<name>io.file.buffer.size</name>
<value>131072</value>
</property>
<property>
<name>hadoop.tmp.dir</name>
<value>file:/home/haduser/hadoop/tmp/</value>
<description>Abase for other temporarydirectories.</description>
</property>
<property>
<name>hadoop.proxyuser.hduser.hosts</name>
<value>*</value>
</property>
<property>
<name>hadoop.proxyuser.hduser.groups</name>
<value>*</value>
</property>
</configuration>

配置文件5:hdfs-site.xml

<configuration>
<property>
<name>dfs.namenode.secondary.http-address</name>
<value>master:9001</value>
</property>
<property>
<name>dfs.namenode.name.dir</name>
<value>file:/home/haduser/hadoop/dfs/name</value>
</property>
<property>
<name>dfs.datanode.data.dir</name>
<value>file:/home/haduser/hadoop/dfs/data</value>
</property>
<property>
<name>dfs.replication</name>
<value>3</value>
</property>
<property>
<name>dfs.webhdfs.enabled</name>
<value>true</value>
</property>
</configuration>

配置文件6:mapred-site.xml

<configuration>
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
<property>
<name>mapreduce.jobhistory.address</name>
<value>master:10020</value>
</property>
<property>
<name>mapreduce.jobhistory.webapp.address</name>
<value>master:19888</value>
</property>
</configuration>
配置文件7:yarn-site.xml
<configuration>
<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.address</name>
<value>master:8032</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>
 
3、复制到其他节点
这里可以写一个shell脚本进行操作(有大量节点时比较方便)
cp2slave.sh
#!/bin/bash
scp –r /home/haduser/hadoop/hadoop-2.2.0 slave1:~/hadoop
scp–r /home/haduser/hadoop/hadoop-2.2.0 slave2:~/hadoop

4、启动验证

4.1 启动hadoop

进入安装目录: cd ~/hadoop/hadoop-2.2.0/

格式化namenode:
./bin/hdfs namenode –format
启动namenode:
sbin/hadoop-daemon.sh start namenode
经验证
jps
NameNode和Jps

成功启动

启动hdfs:

 ./sbin/start-dfs.sh

此时在master上面运行的进程有:namenode secondarynamenode

slave1和slave2上面运行的进程有:

datanode和jps
启动yarn:./sbin/start-yarn.sh
此时在master上面运行的进程有:
namenode 、secondarynamenode和resourcemanager
slave1和slave2上面运行的进程有:datanode和nodemanager
查看集群状态:./bin/hdfsdfsadmin –report
查看HDFS: http://172.20.120.200:50070
查看RM: http:// 172.20.120.200:8088
4.2 运行示例程序1:
./bin/hadoop jar ./share/hadoop/mapreduce/hadoop-mapreduce-examples-2.2.0.jarrandomwriter /randomwriter

运行示例程序2--wordcount

装好的hadoop测试一1个示例程序WordCount,首先需要在操作系统上新建两个任意文件,然后上传到hadoop,再运行该程序统计文件中单词的个数,最后查看结果。

在操作系统上新建任意文件:
 haduser@master:~/hadoop/input$ lstest1.txt  test2.txt 注:可以任意写入几个单词
查看hadoop的文件系统目录:
haduser@master:~/hadoop/hadoop-2.2.0$ ./bin/hadoop fs -ls /
 drwx------   - haduser supergroup          0 2014-04-01 07:30 /tmp创建hadoop的文件目录/input和/output:
./bin/hadoop fs –mkdir /input
./bin/hadoop fs –mkdir /output
执行haduser@master:~/hadoop/hadoop-2.2.0$./bin/hadoop fs -ls /
drwxr-xr-x   - hadusersupergroup          0 2014-04-01 07:28/input
drwxr-xr-x   - hadusersupergroup          0 2014-04-01 07:31 /output
drwx------   - hadusersupergroup          0 2014-04-01 07:30/tmp
上传测试文件到hadoop的/input目录下:
./bin/hadoop fs -put ~/hadoop/input /input
 ./bin/hadoop fs -ls  -R /input
 haduser@master:~/hadoop/hadoop-2.2.0$ ./bin/hadoop fs -ls -R /input-rw-r--r--   3 hadusersupergroup         12 2014-04-01 07:28/input/test1.txt
-rw-r--r--   3 hadusersupergroup         13 2014-04-01 07:28/input/test2.txt
在hadoop文件系统命令查看这两个文件的内容:
./bin/hadoop fs -cat /input/test1.txt
 hello world
 ./bin/hadoop fs -cat /input/test2.txt
 hello hadoop运行示例程序(WordCount):
 ./bin/Hadoop jar ~/hadoop/hadoop-2.2.0/share/hadoop/mapreduce/sources/hadoop-mapreduce-examples-2.2.0-sources.jarorg.apache.hadoop.examples.WordCount /input /output6

………………………………………..省略……………………………………………

File Input Format Counters 
                 Bytes Read=25File Output Format Counters 
                 Bytes Written=25查看程序运行结果:
./bin/hadoop fs -cat /output/part-r-00000
 hadoop  1
 hello   2


world   1

测试用例3:

bin/yarnjar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.2.0.jar pi 10 1000

这是mongodb蒙特卡洛算法计算圆周率的测试用例,pi后跟的两个数字分别表示使用多少个map以及计算的精度。结果如下:

Numberof Maps  = 10
 Samples per Map = 1000
 Wrote input for Map #0
 Wrote input for Map #1
 Wrote input for Map #2
 Wrote input for Map #3
 Wrote input for Map #4
 Wrote input for Map #5
 Wrote input for Map #6
 Wrote input for Map #7
 Wrote input for Map #8
 Wrote input for Map #9
 Starting Job:

注:dataNode 无法启动是配置过程中最常见的问题,主要原因是多次formatnamenode 造成namenode 和datanode的clusterID不一致。建议查看datanode上面的log信息。解决办法:修改每一个datanode上面的CID(位于../dfs/data/current/VERSION文件夹中)使其一致。

export HADOOP_DEV_HOME=/home/haduser/hadoop/hadoop-2.2.0  
export PATH=$PATH:$HADOOP_DEV_HOME/bin  
export PATH=$PATH:$HADOOP_DEV_HOME/sbin  
export HADOOP_MAPARED_HOME=${HADOOP_DEV_HOME}  
export HADOOP_COMMON_HOME=${HADOOP_DEV_HOME} 
export HADOOP_HDFS_HOME=${HADOOP_DEV_HOME}  
export YARN_HOME=${HADOOP_DEV_HOME}  
export HADOOP_CONF_DIR=${HADOOP_DEV_HOME}/etc/hadoop