Hadoop 2.7.0模拟分布式实验环境搭建[亲测]

实验目的:
本实验通过在PC电脑上同时运行3个虚拟机,一个为master节点,两个slave节点。 
 
搭建环境
主机:mac os 10.10
 
OS:CenOS 6.5
虚拟机:VMware fusion
 
 
一、虚拟机配置安装
     本实验采用三台虚拟机作为分布式模拟,因此建立了三台虚拟机。每台虚拟机分别分配1g内存,15G硬盘空间。分别命名为Node1(master192.168.0.1),       Node2(slave192.168.0.2),Node3(slave192.168.0.3
修改/etc/hosts,添加
192.168.0.1 Node1
192.168.0.2 Node2
192.168.0.3 Node3
     1.虚拟机OS安装
  •      三台虚拟机安装linux(CenOS 6.5)
  •      关闭防火墙、iptables(在root权限下,运行chkconfig iptables off永久关闭防火墙,然后运行service iptables status查看防火墙运行状态)
     2.网络配置
  •      由于在局域网环境进行实验,因此虚拟机的网络适配器选择桥接模式(虚拟机-网络适配器-桥接模式)。
  •      同时选择网络适配器设置(虚拟机-网络适配器-网络适配器设置),选择“连接网络适配器”
  •      静态ip设置:局域网可以自行给每台主机设置静态ip,在网络里选择ipv4为手动模式,进行ip配置。(我分别设置为192.168.0.1/2/3)
     验证:分别在三台主机上打开终端,进行ping其他主机的ip,若都能互相ping通,则设置成功
 
二、jdk安装
  在oracle官网下载java SE的jdk。下载后解压到主机上,由于jdk安装网上很多,因此不再细讲jdk安装。
  验证:在终端输入java -version后有提示说明安装成功
 
三.SSH免密码登陆
  由于在互相远程操作的话,我们使用ssh [ip]命令进行ssh登录,需要输入远程主机的密码才能登陆。因此要将ssh设置为免密码登陆。
  在设置的时候要做两方面ssh免密码登陆,一方面是自己登陆到自己(localhost)需要设置,另外一方面是需要将自己到其他各个主机之间都设置为ssh免密码登陆。
  其实ssh免密码登陆的设置,就是将本机的rsa公钥传到远程主机上,将公钥内容放到对方主机的/.ssh文件夹里面的authorized_keys里面,即可实现免密码登陆。
操作如下:
  首先关闭本机的防火墙及iptables等
  Node1(master)
  A:免密码登陆到其他主机
  1.回到用户主目录(cd ~)
  2.运行ssh-keygen -t rsa,一直回车   (生成rsa 密钥)
  3.进入生成的文件夹.ssh,运行scp id_rsa.pub   username@192.168.0.X:/home/username/.ssh/authorized_keys将pub公钥分别传给其他两个主机
  4.再次运行ssh [ip]则不需要密码登陆。
  B:免密码登陆到本机
  将id_rsa.pub里面的内容加到同目录下的 authorized_keys即可。
 
  同理,将其余两个节点都设置为互相ssh免密码登陆。
 
[其实不用这么麻烦,可以将其与两个slave和master自己的id_rsa.pub都加到master的authorized_keys里,然后master的这个authorized_keys都复制到其他节点的.ssh/里面就行了]
  验证:在各个主机上,输入[ssh 目标ip]都不用输入密码,直接登录
 
四、Hadoop配置
  非常重要的来了。中间遇到各种问题,由于查的各种资料不靠谱,搞了一周才把这步搞定。
  1.hadoop下载
    首先,毫无疑问我们得去官网上下载hadoop的包。http://mirror.bit.edu.cn/apache/hadoop/common/
    在界面中,我选择的是2.7.0的版本。选择下载hadoop-2.7.0.tar.gz(当然也能复制下载链接用wget,都一样)
  2.解压hadoop,将其放到用户主目录下,命名为hadoop
  3.配置hadoop文件
    A.配置环境变量
    打开/etc/profile,编辑如下
#set Java   JAVA环境变量
export JAVA_HOME=/usr/java

export JAVA_BIN=/usr/java/bin
export PATH=$PATH:$JAVA_HOME/bin
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
export JAVA_HOME JAVA_BIN PATH CLASSPATH
export JAVA_LIBRARY_PATH=/home/renjie/hadoop/lib/native

#set Hadoop hadoop环境变量
export HADOOP_HOME=/home/renjie/hadoop
export PATH=$PATH:HADOOP_HOME/bin

立即生效:source /etc/profile

 

   B.在hadoop目录下,分别建立tmp、dfs、dfs/name、dfs/data文件夹

   C.配置hadoop环境文件

    修改hadoop/etc/hadoop/hadoop-env.sh,取消export JAVA_HOME=/usr/java的注释,并且配置java的绝对路径

    修改hadoop/etc/hadoop/yarn-env.sh,同样将java路径配置为绝对路径

   D.修改hadoop/etc/hadoop/core-site.xml

<configuration>
<property>
<name>fs.defaultFS</name>
<value>hdfs://192.168.0.1:9000</value>
</property>
<property>
<name>hadoop.tmp.dir</name>
<value>/home/renjie/hadoop/tmp</value>
</property>
</configuration>

  E.修改hadoop/etc/hadoop/hdfs-site.xml

<configuration>
<property>
<name>dfs.nameservices</name>
<value>Node1</value>
</property>
<property>
<name>dfs.ha.namenodes.Node1</name>
<value>Node1</value>
</property>
<property>
<name>dfs.datanode.data.dir</name>
<value>file:/home/renjie/hadoop/dfs/data</value>
</property><property>
<name>dfs.namenode.secondary.http-address</name>
<value>Node1:9001</value>
</property>
<property>
<name>dfs.webhdfs.enabled</name>
<value>true</value>
</property>

<property>
<name>dfs.replication</name>
<value>2</value>
</property>
</configuration>

 

  F.修改hadoop/etc/hadoop/mapred-site.xml

<configuration>
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<property>
<name>yarn.nodemanager.auxservices.mapreduce.shuffle.class</name>
<value>org.apache.hadoop.mapred.ShuffleHandler</value>
</property>
<property>
<name>yarn.resourcemanager.address</name>
<value>192.168.0.1:8032</value>
</property>
<property>
<name>yarn.resourcemanager.scheduler.address</name>
<value>192.168.0.1:8030</value>
</property>
<property>
<name>yarn.resourcemanager.resource-tracker.address</name>
<value>192.168.0.1:8031</value>
</property>
<property>
<name>yarn.resourcemanager.admin.address</name>
<value>192.168.0.1:8033</value>
</property>
<property>
<name>yarn.resourcemanager.webapp.address</name>
<value>192.168.0.1:8088</value>
</property>
<property>
<name>yarn.nodemanager.resource.memory-mb</name>
<value>768</value>
</property></configuration>

 

 

  G.修改hadoop/etc/hadoop/slaves

  其中注销掉localhost,添加

  Node2

  Node3

 

五、分发hadoop

  将配置好的hadoop分发到其他节点。

  在用户主目录下,scp -r hadoop username@192.168.0.2:/home/username     //将当前目录下的hadoop文件夹传到192.168.0.2的username用户文件夹下。剩下节点也这样操作

 

六、初始化

  进入hadoop目录。运行bin/hadoop namenode -format 若最后出现success,则成功初始化

七、运行hadoop

  在master上,进入hadoop/sbin,运行./start-all.sh,运行hadoop

  这个时候如果hadoop没有配置好的话,可能会进行报错。这一步运行后,提示中不能出现任何错误。我做的时候运行这一步,出现了

WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... 
using builtin-java classes where applicable
这种情况是没有找到本地库。解决方案:http://dl.bintray.com/sequenceiq/sequenceiq-bin/。在这个网站下载对应的版本包。下载后解压,将里面的文件覆盖到hadoop/lib/native/就行。

最后成功运行后,输入jps。出现此时运行的程序,若出现

10914 Jps
9112 ResourceManager
8862 NameNode

则master成功

在slave上,运行jps,若出现

2326 DataNode
3423 Jps

则slave成功。

 

至此,hadoop成功运行。接下来可以运行example了

 

 

 
posted @ 2016-03-19 15:07  SnailRen  阅读(1740)  评论(0编辑  收藏  举报