材料:三台VM,jdk,Hadoop-2.5.2.tar.gz
VM的IP:192.168.0.9 (主)
192.168.0.27 (从)
192.168.0.28 (从)
一、为三台VM安装JDK(因为老师的CentOS模版自带JDK,详细过程略)
1. 找到合适的JDK版本
2. 解压安装并通过修改/etc/profile添加环境变量(JAVA_HOME的值是安装路径)
JAVA_HOME=/xxxxxx CLASSPATH=.:$JAVA_HOME/lib/tools.jar:$JAVA_HOME/lib/dt.jar PATH=$JAVA_HOME/bin:$PATH export JAVA_HOME CLASSPATH PATH
3. #java -version 测试JDK是否安装成功
二、无密钥登录
1. 修改三台VM名称
# vi /etc/sysconfig/network
修改其中的HOSTNAME,主为Master,从为Slave1和Slave2,修改完毕#reboot重启VM
2. 配置三台VM的hosts文件
#cd /etc/hosts,在该文件末尾添加内容,这样就可以用主机名代替IP
192.168.0.9 Master 192.168.0.27 Slave1 192.168.0.28 Slave2
3. 为三台VM准备无密钥登录
通过以下命令检查是否已安装sshd服务:#rpm –qa | grep openssh,#rpm –qa | grep rsync
如果没有安装sshd服务和rsync,可以通过下面命令进行安装: #yum install ssh,#yum install rsync
然后重启sshd服务: #service sshd restart
并且关闭FireWall:#service iptables stop
4. 生成无密钥登陆
在Master节点上执行以下命令: #ssh-keygen –t rsa –P '',生成无密码密钥对id_rsa和id_rsa.pub,默认存储在"/root/.ssh"目录下。
接着在Master节点上执行如下命令,把id_rsa.pub追加到授权的key里面去。 $cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
5. 修改文件权限
修改文件"authorized_keys",#chmod 600 ~/.ssh/authorized_keys
修改SSH配置#vi /etc/ssh/sshd_config,RSAAuthentication yes # 启用 RSA 认证,PubkeyAuthentication yes# 启用公钥私钥配对认证方式,
AuthorizedKeysFile .ssh/authorized_keys # 公钥文件路径
重启sshd服务:#service sshd restart
6. 配置无密钥登陆
在Master使用scp命令格式进行复制公钥::$scp ~/.ssh/id_rsa.pub root@192.168.0.27:~/
进入Slave1,#cat ~/id_rsa.pub >> ~/.ssh/authorized_keys,#chmod 600 ~/.ssh/authorized_keys
和Master一样修改ssh配置#vi /etc/ssh/sshd_config
Slave2也按上述操作。
此后在Master上就可以直接#ssh Slave1进入到Slave1。
三、安装Hadoop
1. 三台VM都输入#cd /home,#mkdir hadoop,把hadoop-2.5.2-tar.gz放到新创建的/home/hadoop文件夹中解压,#tar -zxvf hadoop-2.5.2.tar.gz
解压得到/home/hadoop/hadoop-2.5.2文件夹
2. 配置core-site.xml
三台VM都进入#cd hadoop-2.5.2/etc/hadoop,#vi core-site.xml添加下列内容
<configuration> <property> <name>hadoop.tmp.dir</name> <value>/home/hadoop/tmp</value> <description>Abase for other temporary directories.</description> </property> <property> <name>fs.defaultFS</name> <value>hdfs://192.168.0.9:9000</value> </property> <property> <name>io.file.buffer.size</name> <value>4096</value> </property> </configuration>
3. 配置hdfs-site.xml
在Master中输入#vi hdfs-site.xml添加下列内容
<configuration> <property> <name>dfs.nameservices</name> <value>hadoop-cluster1</value> </property> <property> <name>dfs.namenode.secondary.http-address</name> <value>192.168.0.9:50090</value> </property> <property> <name>dfs.namenode.name.dir</name> <value>file:///home/hadoop/dfs/name</value> </property> <property> <name>dfs.datanode.data.dir</name> <value>file:///home/hadoop/dfs/data</value> </property> <property> <name>dfs.replication</name> <value>2</value> </property> <property> <name>dfs.webhdfs.enabled</name> <value>true</value> </property> </configuration>
4. 配置mapred-site.xml(解压出来的只有一个模版mapred-site.xml.template,只需要复制一份模版修改之后重命名为mapred-site.xml即可)
在Master中输入#vi mapred-site.xmll添加下列内容
<configuration> <property> <name>mapreduce.framework.name</name> <value>yarn</value> </property> <property> <name>mapreduce.jobtracker.http.address</name> <value>192.168.0.9:50030</value> </property> <property> <name>mapreduce.jobhistory.address</name> <value>192.168.0.9:10020</value> </property> <property> <name>mapreduce.jobhistory.webapp.address</name> <value>192.168.0.9:19888</value> </property> </configuration>
5. 配置yarn-site.xml
在Master中输入#vi yarn-site.xml添加下列内容
<configuration> <!-- Site specific YARN configuration properties --> <property> <name>yarn.nodemanager.aux-services</name> <value>mapreduce_shuffle</value> </property> <property> <name>yarn.resourcemanager.address</name> <value>192.168.0.9:8032</value> </property> <property> <name>yarn.resourcemanager.scheduler.address</name> <value>192.168.0.9:8030</value> </property> <property> <name>yarn.resourcemanager.resource-tracker.address</name> <value>192.168.0.9:8031</value> </property> <property> <name>yarn.resourcemanager.admin.address</name> <value>192.168.0.9:8033</value> </property> <property> <name>yarn.resourcemanager.webapp.address</name> <value>192.168.0.9:8088</value> </property> </configuration>
6. 修改slaves文件
在Master中输入#vi slaves改成下列内容
localhost
192.168.0.27
192.168.0.28
7. 格式化文件系统
在Master的hadoop-2.5.2文件夹中输入#bin/hdfs namenode -format,这里的格式化文件系统并不是硬盘格式化,只是针对主服务器hdfs-site.xml的dfs.namenode.name.dir和dfs.datanode.data.dir目录做相应的清理工作。
8. 测试Hadoop启动与停止
在Master中进入hadoop-2.5.2/sbin文件夹,#./start-all.sh
此时可能会JDK路径的错误,根据错误提示到对应IP的VM进行9和10步骤
在Master中进入hadoop-2.5.2/sbin文件夹,#./stop-all.sh,可以停止所有服务
通过浏览器可以监控Hadoop状态,http://192.168.0.9:50070/
#jps,用来查看当前主机中关于Hadoop的进程
Master的进程:
Slave的进程:
9. 在三台VM输入#vi hadoop-env.sh,找到export JAVA_HOME =/xxxxx这一句
修改JAVA_HOME的值为当前JDK的路径,老师给的CentOS模版JAVA_HOME =/jdk17
10. 在三台VM输入#vi yarn-env.sh,找到export JAVA_HOME =/xxxxx这一句
修改JAVA_HOME的值为当前JDK的路径,老师给的CentOS模版JAVA_HOME =/jdk17
四、测试,词频统计
1. 进入到hadoop-2.5.2目录下
cd /home/hadoop/hadoop-2.5.2
2. 创建输入文件testtemp
bin/hdfs dfs -mkdir /testtemp
3. 事先在hadoop-2.5.2目录下创建好一个test.txt文件,作为测试文件
Hello World!
Hello Hadoop!
4. 将测试文件上传到testtemp文件中
bin/hdfs dfs -copyFromLocal /home/hadoop/hadoop-2.5.2/test.txt /testtemp
5. 查看是否上传成功
bin/hdfs dfs -ls /testtemp
6. 执行hadoop-mapreduce-examples-2.5.2.jar里面的wordcount
bin/hadoop jar ./share/hadoop/mapreduce/hadoop-mapreduce-examples-2.5.2.jar wordcount /testtemp/ /tmp-output
这句命令其实是调用了一个Hadoop框架的wordcount函数,/testtemp/作为第一个参数表示输入数据的路径,/tmp-output作为第二个参数表示输出文件的路径,这里输出文件的路径必须是事先不存在的,不然会报错。
7. 查看文件结构
bin/hadoop dfs -ls /
8. 查看统计结果
bin/hadoop dfs -cat /xxxx/xxxx/zzz (xxx都是由第8步查看的路径,zzz是统计结果文件)
此例中bin/hadoop dfs -cat /tmp-output/part-r-00000,结果如图