材料:三台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,结果如图