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