Hadoop完全分布式集群搭建

 

搭建环境的时候参考了以下下文章:

Ubuntu14.04下安装Hadoop2.4.0 (单机模式)

Ubuntu14.04下安装Hadoop2.4.0 (伪分布模式)

hadoop学习之hadoop完全分布式集群安装

由于在Hadoop2.4.0版本下对于mapred-site.xml和yarn-site.xml等配置有区别于之前的一些版本。

自己在搭建时遇到一些问题,所以现在结合已有的文章和自己搭建的过程总结一下。

 

环境:Ubuntu14.04、Hadoop2.4.0、openjdk-7-jdk、4台PC(1个master、3个slave)

一、 安装Ubuntu建立用户名及其设备名

二、配置hosts文件

三、配置ssh免密码连入

四、安装Java环境

五、下载并解压hadoop安装包

六、 配置/hadoop/etc/hadoop/文件

七、 配置hadoop-env.sh文件

八、配置slaves文件

九、 向各节点复制hadoop

十、格式化namenode

十一、启动hadoop

十二、用jps检验各后台进程是否成功启动

十三、通过网站查看集群情况

十四、运行自带的wordcount程序

 

一、安装Ubuntu建立用户名及其设备名

在安装Ubuntu时将4台PC用户名都设置为hadoop,设备名分别是master、slave1、slave2、slave3

 二、配置hosts文件

配置hosts文件的作用,它主要用于确定每个结点的IP地址,方便后续

master结点能快速查到并访问各个结点。通过ifconfig命令进行查看本机IP地址。

修改每台机器的/etc/hosts    修改为如下:

127.0.0.1               localhost

192.168.1.101             master

192.168.1.102             slave1

192.168.1.103             slave2

192.168.1.104            slave3

三、配置ssh免密码连入

SSH是什么?Secure Shell Protocol 安全外壳协议(SSH)

这里我们需要使用SSH的基于密匙的安全验证

需要依靠密匙,也就是你必须为自己创建一对密匙,并把公用密匙放在需要访问的服务器上。如果你要连接到SSH服务器上,客户端软件就会向服务器发出请求,请求用你的密匙进行安全验证。服务器收到请求之后,先在该服务器上你的主目录下寻找你的公用密匙,然后把它和你发送过来的公用密匙进行比较。如果两个密匙一致,服务器就用公用密匙加密“质询”(challenge)并把它发送给客户端软件。客户端软件收到“质询”之后就可以用你的私人密匙解密再把它发送给服务器。

安装

sudo apt-get install openssh-server

Hadoop完全分布式集群搭建

安装完成后,启动服务

sudo /etc/init.d/ssh start

查看服务是否正确启动:ps -e | grep ssh

Hadoop完全分布式集群搭建

设置免密码登录,生成私钥和公钥

ssh-keygen -t rsa -P ""

Hadoop完全分布式集群搭建

此时会在/home/hadoop/.ssh下生成两个文件:id_rsa和id_rsa.pub,前者为私钥,后者为公钥。

下面我们将公钥追加到authorized_keys中,它用户保存所有允许以当前用户身份登录到ssh客户端用户的公钥内容。

cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys

登录ssh

ssh localhost

Hadoop完全分布式集群搭建

退出

exit

  让主结点(master)能通过SSH免密码登录三个子结点(slave)

为了实现这个功能,三个slave结点的公钥文件中必须要包含主结点的公钥信息,这样

当master就可以顺利安全地访问这两个slave结点了。操作过程如下:

Hadoop完全分布式集群搭建

如上过程显示了slave1结点通过scp命令远程登录master结点,并复制master的公钥文件到当前的目录下,这一过程需要密码验证。接着,将master结点的公钥文件追加至authorized_keys文件中,通过这步操作,如果不出问题,master结点就可以通过ssh远程免密码连接slave1结点了。在master结点中操作如下:

Hadoop完全分布式集群搭建

由上图可以看出,slave1结点首次连接时需要,“YES”确认连接,这意味着master结点连接slave1结点时需要人工询问,无法自动连接,输入yes后成功接入,紧接着注销退出至master结点。要实现ssh免密码连接至其它结点,还差一步,只需要再执行一遍ssh slave1,如果没有要求你输入”yes”,就算成功了,过程如下:

Hadoop完全分布式集群搭建

如上图所示,master已经可以通过ssh免密码登录至slave1结点了。

对slave1结点也可以用同样的方法进行,如下图:

slave1结点复制master结点中的公钥文件

Hadoop完全分布式集群搭建

Master通过ssh免密码登录至slave1结点测试:

第一次登录时:

Hadoop完全分布式集群搭建

第二次登录时:

Hadoop完全分布式集群搭建

表面上看,这两个结点的ssh免密码登录已经配置成功,但是我们还需要对主结点master也要进行上面的同样工作,这一步有点让人困惑,但是这是有原因的,具体原因现在也说不太好,据说是真实物理结点时需要做这项工作,因为jobtracker有可能会分布在其它结点上,jobtracker有不存在master结点上的可能性。

对master自身进行ssh免密码登录测试工作:

Hadoop完全分布式集群搭建

Hadoop完全分布式集群搭建

至此,SSH免密码登录已经配置成功。

四、 安装Java环境

sudo apt-get install openjdk-7-jdk

 Hadoop完全分布式集群搭建

查看安装结果,输入命令:java -version,结果如下表示安装成功。

 

 

五、下载并解压hadoop安装包

官网下载http://mirror.bit.edu.cn/apache/hadoop/common/

安装

 在所有机器上安装配置Hadoop

首先在namenode上配置,配置后在分发到datanode上

解压

sudo tar xzf hadoop-2.4.0.tar.gz        

假如我们要把hadoop安装到/usr/local下

拷贝到/usr/local/下,文件夹为hadoop

sudo mv hadoop-2.4.0 /usr/local/hadoop  

     

赋予用户对该文件夹的读写权限

sudo chmod 774 /usr/local/hadoop

 

 配置~/.bashrc     

配置该文件前需要知道Java的安装路径,用来设置JAVA_HOME环境变量,可以使用下面命令行查看安装路径

        update-alternatives - -config java

        执行结果如下:

        

   

完整的路径为

    /usr/lib/jvm/java-7-openjdk-amd64/jre/bin/java

    我们只取前面的部分 /usr/lib/jvm/java-7-openjdk-amd64

    配置.bashrc文件

    sudo gedit ~/.bashrc

    

    该命令会打开该文件的编辑窗口,在文件末尾追加下面内容,然后保存,关闭编辑窗口。

  

最终结果如下图:

 Hadoop完全分布式集群搭建

 

 

执行下面命,使添加的环境变量生效:

        source ~/.bashrc

 

六、修改/hadoop/etc/hadoop文件

     配置core-site.xml

    /usr/local/hadoop/etc/hadoop/core-site.xml 包含了hadoop启动时的配置信息。

    编辑器中打开此文件

    sudo gedit /usr/local/hadoop/etc/hadoop/core-site.xml

    

<configuration>



<property>



                <name>fs.default.name</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/hadoop/hadoop/tmp</value>



               <description>Abase for other temporary   directories.</description>



       </property>



        <property>



               <name>hadoop.proxyuser.hadoop.hosts</name>



               <value>*</value>



       </property>



       <property>



               <name>hadoop.proxyuser.hadoop.groups</name>



               <value>*</value>



       </property>



</configuration>      

 

 

配置yarn-site.xml

    /usr/local/hadoop/etc/hadoop/yarn-site.xml包含了MapReduce启动时的配置信息。

    编辑器中打开此文件

    sudo gedit yarn-site.xml

    

<configuration> 



 



 <!-- Site specific YARN configuration properties --> 



<!--211.65.240.61  主机IP-->



       <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>  

 

 创建和配置mapred-site.xml

 

    默认情况下,/usr/local/hadoop/etc/hadoop/文件夹下有mapred.xml.template文件,我们要复制该文件,并命名为mapred.xml,该文件用于指定MapReduce使用的框架。

    

    复制并重命名

    cp mapred-site.xml.template mapred-site.xml

    编辑器打开此新建文件

    sudo gedit 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> 

 

 

配置hdfs-site.xml

    /usr/local/hadoop/etc/hadoop/hdfs-site.xml用来配置集群中每台主机都可用,指定主机上作为namenode和datanode的目录。

 

    创建文件夹,如下图所示

 Hadoop完全分布式集群搭建

    

你也可以在别的路径下创建上图的文件夹,名称也可以与上图不同,但是需要和hdfs-site.xml中的配置一致。

 

编辑器打开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>/home/hadoop/hadoop/hdfs/name</value>



 



    </property>



 



    <property>



  <name>dfs.datanode.data.dir</name>



  <value>/home/hadoop/hadoop/hdfs/data</value>



 



    </property>



 



    <property>



  <name>dfs.replication</name>



  <value>3</value>



    </property>



  <property>



                 <name>dfs.webhdfs.enabled</name>



                  <value>true</value>



         </property>



</configuration>    

 

 

七、配置hadoop-env.sh文件

编辑/usr/local/hadoop/etc/hadoop/hadoop-env.sh

        执行下面命令,打开该文件的编辑窗口

        sudo gedit /usr/local/hadoop/etc/hadoop/hadoop-env.sh

找到JAVA_HOME变量,修改此变量如下

        export JAVA_HOME=/usr/lib/jvm/java-7-openjdk-amd64    

        修改后的hadoop-env.sh文件如下所示:

    Hadoop完全分布式集群搭建

 

 

八、配置slaves文件

在/hadoop/etc/hadoop/下修改slaves文件,加入三个slave设备名

 slave1

 slave2

 slave3

 

九、向各节点复制hadoop

 到此,hadoop的有关配置已经完成,namenode端通过如下命令把配置好的hadoop发送到各个datanode处:

scp -r hadoop路径 slave1:对应路径

 

十、格式化namenode

进入hadoop目录下,格式化hdfs文件系统

     cd /home/hadoop/hadoop

    bin/hdfs namenode -format  

    只需要执行一次即可,如果在hadoop已经使用后再次执行,会清除掉hdfs上的所有数据。(如果格式化两次时,启动HDFS会报错,原因是序列号不同。解决方法是删除hadoop下的temp和log文件夹,重新启动HDFS)

 

十一、启动hadoop

     经过上文所描述配置和操作后,下面就可以启动这个单节点的集群    

执行启动命令:

进入hadoop目录下

     cd /home/hadoop/hadoop

   sbin/start-all.sh   启动hadoop

sbin/stop-all.sh    停止hadoop

  

 

十二、用jps检验各后台进程是否成功启动

   执行 jps命令,会看到Hadoop相关的进程
master上

Jps

NameNode

SecondaryNameNode

ResourceManager

slave上

Jps

DataNode

NodeManager

 

十三、通过网站查看集群情况

浏览器打开 http://localhost:50070/ ,会看到hdfs管理页面(如果lives节点为0,就说明HDFS没有成功启动)

 Hadoop完全分布式集群搭建

 

浏览器打开http://localhost:8088,会看到hadoop进程管理页面(Active Nodes为0,说明hadoop配置出错了)

Hadoop完全分布式集群搭建

 十四、WordCount验证

    dfs上创建input目录

    bin/hadoop fs -mkdir -p input

 

    

把hadoop目录下的README.txt拷贝到dfs新建的input里

    hadoop fs -copyFromLocal README.txt input

 

    运行WordCount

    hadoop jar share/hadoop/mapreduce/sources/hadoop-mapreduce-examples-2.4.0-sources.jar org.apache.hadoop.examples.WordCount input output

 

可以看到执行过程

 Hadoop完全分布式集群搭建

 

运行完毕后,查看单词统计结果

    hadoop fs -cat output/*

 Hadoop完全分布式集群搭建

 

 

PS:其它一些常用命令

bin/hdfs dfs -mkdir /tmp

bin/hdfs dfs -mkdir /tmp/wordcount         HDFS中新建/tmp/wordcount

bin/hdfs dfs -copyFromLocal /home/hadoop/xx.txt  /tmp/wordcount/xx.txt        本地文件拷贝到HDFS

bin/hadoop dfs -ls /tmp/wordcount/out/*    HDFS查看结果文件夹

bin/hadoop dfs -cat /tmp/wordcount/out/*   HDFS查看结果文件

bin/hadoop dfs -rm -r  /tmp/wordcount/o    HDFS上删除文件

 

bin/hadoop jar /home/hadoop/hadoop/share/hadoop/mapreduce/sources/hadoop-mapreduce-examples-2.4.0-sources.jar org.apache.hadoop.examples.WordCount /tmp/wordcount/xx.txt  /tmp/wordcount/out 运行java HDFS文件 HDFS结果存放文件夹(自动生成)

你可能感兴趣的:(hadoop)