Hadoop2.0.0-cdh4.5.0部署文档
Hadoop 2.0.0-cdh4.5.0
java version "1.7.0_45"
Ubuntu 12.04.3 LTS (GNU/Linux3.8.0-29-generic x86_64)
VMware虚拟机3台:
192.168.0.8 master
192.168.0.9 slave1
192.168.0.10 slave2
用户名密码都是root / 123456
准备三台虚拟机,操作系统为:
Ubuntu 12.04.3 LTS (GNU/Linux3.8.0-29-generic x86_64)
为三台虚拟机做以下配置(具体步骤自行百度):
Ø 配置静态IP
Ø 配置/etc/hosts
Ø 配置/etc/hostname
Ø 安装JDK
第一步:所有节点分别生成密钥对
所有节点都要做:
命令行中,通过cd命令进入根目录,在根目录执行以下命令生成秘钥:
ssh-keygen -t rsa
密钥成功生成后存储在根目录下的.ssh隐藏目录下,直接用 cd .ssh 就能进入,然后用ls命令就能看到id_rsa id_rsa.pub
第二步:拷贝生成authorized_keys
所有节点都要做:
将id_rsa.pub拷贝到文件anthorized_keys文件中,在 .ssh 文件夹中执行以下命令:
cp id_rsa.pub authorized_keys
第三步:合并所有节点的authorized_keys文件,并分发到所有节点根目录的 .ssh 隐藏文件夹下
slave1中将authorized_keys发送到master的temp1临时文件中:
scp authorized_keys root@master:~/.ssh/temp1
slave2中将authorized_keys发送到master的temp2临时文件中:
scp authorized_keys root@master:~/.ssh/temp2
master中将temp1和temp2附加到authorized_keys文件中,这样的话master的authorized_keys文件就包含了所有节点的公钥:
cat temp1 >> authorized_keys
cat temp2 >> authorized_keys
rm temp1
rm temp2
master中将合并好的authorized_keys文件分发到各节点:
scp authorized_keys root@slave1:~/.ssh/
scp authorized_keys root@slave2:~/.ssh/
第四步:所有系统配置 /etc/ssh/sshd_config 文件,使得系统使用公钥认证,并能识别 authorized_keys
cd /etc/ssh/ 以后,
sudo vi sshd_config
在文件中找到以下几行
RSAAuthentication yes
PubkeyAuthentication yes
#AuthorizedKeysFile%h/.ssh/authorized_keys
把#去掉即可,系统就能通过authorized_keys来识别公钥了
第五步:检查sshd是否运行/安装,如果未安装将不能成功相互连接
运行 ps -e | grep ssh,查看是否有sshd进程
如果没有,说明server没启动,通过 /etc/init.d/ssh -start 启动server进程
如果提示ssh不存在那么就是没安装server
通过 sudo apt-get install openssh-server命令安装即可
第六步:解决 Agentadmitted failure to sign using the key
如果出现该错误,则需要在所有的节点都执行 ssh-add ~/.ssh/id_rsa 将私钥加入ssh。
至此,大功告成,应该就可以在任意一台机器使用 ssh master/slave1/slave2 免密码连入对方了。
官网或者百度搜索下载hadoop-2.0.0-cdh4.5.0.tar.gz
可在windows下载,拷贝到虚拟机。
注意:配置hadoop相关步骤仅在一台机器做即可,配好好后scp拷贝到其它机器。
在压缩包的当前目录下执行以下命令解压:
tar –zxvf hadoop-2.0.0-cdh4.5.0.tar.gz
解压后的文件夹拷贝到/home/fulong/hadoop/下,并改名为cdh,以/home/fulong/hadoop/cdh作为HADOOP_HOME配置环境变量。
使用任意编辑器编辑环境变量/etc/profile,配置好后的环境变量为:
# /etc/profile:system-wide .profile file for the Bourne shell (sh(1))
# and Bournecompatible shells (bash(1), ksh(1), ash(1), ...).
if [ "$PS1"]; then
if [ "$BASH" ] && ["$BASH" != "/bin/sh" ]; then
# The file bash.bashrc already sets thedefault PS1.
# PS1='\h:\w\$ '
if [ -f /etc/bash.bashrc ]; then
. /etc/bash.bashrc
fi
else
if [ "`id -u`" -eq 0 ]; then
PS1='# '
else
PS1='$ '
fi
fi
fi
# The default umaskis now handled by pam_umask.
# See pam_umask(8)and /etc/login.defs.
if [ -d/etc/profile.d ]; then
for i in /etc/profile.d/*.sh; do
if [ -r $i ]; then
. $i
fi
done
unset i
fi
export JAVA_HOME=/usr/lib/jvm7/jdk
export HADOOP_HOME=/home/fulong/hadoop/cdh
exportPATH=$JAVA_HOME/bin:$JAVA_HOME/jre/bin:$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
exportCLASSPATH=$CLASSPATH:.:$JAVA_HOME/lib:$JAVA_HOME/jre/lib
注意最后部分的HADOOP_HOME和PATH中与hadoop相关的部分。
配置完后,通过以下命令使得环境变量立即生效:
sudo source /etc/profile
Cdh4.5(Hadoop2.0)的配置文件在/cdh/etc/hadoop路径下,和Hadoop1.0的路径不同。
1) hadoop-env.sh
修改hadoop-env.sh配置文件,设置jdk所在的路径,在里面找到JAVA_HOME,并将它的值设置为你电脑jdk所在的绝对路径:
export JAVA_HOME=/usr/lib/jvm7/jdk
2) 修改core-site.xml
添加如下代码:
<property>
<name>fs.default.name</name>
<value>hdfs://master:8020</value>
<final>true</final>
</property>
<property>
<name>hadoop.tmp.dir</name>
<value>/home/fulong/hadoop/tempdata</value>
</property>
3) 修改yarn-site.xml
添加如下代码:
<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>
<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>
注意:yarn.nodemanager.aux-services的值是“mapreduce_shuffle”(在hadoop-2.1-beta中的值是“mapreduce.shuffle”)
4) 修改mapred-site.xml
添加如下代码:
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
<property>
<name>mapred.system.dir</name>
<value>file:/home/fulong/hadoop/mapred_system</value>
<final>true</final>
</property>
<property>
<name>mapred.local.dir</name>
<value>file:/home/fulong/hadoop/mapred_local</value>
<final>true</final>
</property>
5) 修改hdfs-site.xml
添加如下代码:
<property>
<name>dfs.namenode.name.dir</name>
<value>/home/fulong/hadoop/name</value>
</property>
<property>
<name>dfs.datanode.data.dir</name>
<value>/home/fulong/hadoop/data</value>
</property>
<property>
<name>dfs.replication</name>
<value>2</value>
</property>
<property>
<name>dfs.permissions</name>
<value>false</value>
</property>
根据配置内容,需创建几个用于存储数据的目录:
/home/fulong/hadoop/tempdata
/home/fulong/hadoop/mapred_system
/home/fulong/hadoop/mapred_local
/home/fulong/hadoop/name
/home/fulong/hadoop/data
注意:本实验中几个新建的存数据目录在cdh之外,需要分别在各个机器创建。如果将这几个目录建到cdh中,则可直接scp拷贝。
配置好Hadoop的配置文件后,使用如下命令将整个hadoop文件夹分别拷贝到slave1和slave2主机上去:
scp -r /home/fulong/hadoop/cdh root@slave1:/home/fulong/hadoop/
scp -r /home/fulong/hadoop/cdh root@slave1: /home/fulong/hadoop/
格式化hdfs文件系统:
hdfs namenode -format
启动hdfs:
Start-dfs.sh
启动yarn
Start-yarn.sh
如果成功启动,
则在master机器执行jps命令可以看到如下进程:
12916 NameNode
13280 ResourceManager
13133 SecondaryNameNode
15025 Jps
在所有slave机器执行jps可看到如下进程:
576 Jps
31403 NodeManager
31252 DataNode
如果出现任何问题,进入相应机器/home/fulong/hadoop/cdh/logs目录查看日志。
成功启动后,浏览器访问以下页面可以查看hadoop相关信息:
http://master:50070/dfshealth.jsp
http://master:8088/cluster/nodes
在/cdh/share/hadoop/mapreduce下有hadoop自带的实例程序,可以通过wordcount程序测试hadoop集群是否正常运行。
Wordcount是hadoop-mapreduce-examples-2.0.0-cdh4.5.0.jar中的一个程序,用于统计文本中单词的出现次数。
1.在hdfs根目录下创建存储输入文本的目录
hadoopfs -mkdir /testinput
然后用以下命令可以查看hdfs文件目录,绿色文字是输出:
hadoop fs -ls /
13/12/10 16:42:34WARN util.NativeCodeLoader: Unable to load native-hadoop library for yourplatform... using builtin-java classes where applicable
Found 2 items
drwxr-xr-x - root supergroup 0 2013-12-10 16:42 /testinput
drwx------ - root supergroup 0 2013-12-10 14:28 /tmp
将输入文本上传到hdfs:
hadoop fs -put/home/fulong/hadoop/cdh/etc/hadoop/yarn-site.xml /testinput
执行wordcount程序:
hadoop jarhadoop-mapreduce-examples-2.0.0-cdh4.5.0.jar wordcount /testinput/* /testoutput
执行完后,通过以下命令查看结果:
hadoop fs -cat /testoutput/*