Hadoop2.x版本全分布式详细安装过程!!【原创!非抄袭!】

网上对于全分布式的介绍也是一堆!!要么是假的!要么是1.x版本的全分布式!我实在是无力吐槽,很多博客大牛转载的或者“原创”的我看完我都问他们自己。。。他们自己实现了吗?以下是我的安装过程:

如有问题随时联系我 E-mail:yanghg@pku.edu.cn

 

此次Hadoop分布式共搭建了三个虚拟机,分别如下:

主机名

IP

运行进程

master

192.168.213.108

NameNode, SecondaryNameNode, ResourceManager

slave1

192.168.213.109

DataNode, NodeManager

slave2

192.168.213.110

DataNode, NodeManager

 

本文主要包括以下步骤:

一. 为每个主机建立hadoop用户,用户属于hadoop组。

二. 确定主机名,并为每台主机分配静态IP地址

三. 为每台主机安装SSH并设置无密码登陆

四. 为每台主机安装JDK

五. 关闭每台主机的防火墙

六. 配置Hadoop

七. 启动Hadoop

八. 在Hadoop上运行wordcount程序

 

完整的搭建步骤如下:

一.   为每个主机建立hadoop用户,用户属于hadoop组。

  1. 命令如下:sudo adduser hadoop
  2. 修改hadoop用户配置,使其拥有sudo权限。

命令如下:

cd /etc/sudoers.d

sudo vi hadoop

添加内容如下图:

 

保存退出。

  1. 修改hadoop文件权限。命令如下:

chmod 0440 hadoop

二.   确定主机名,并为每台主机分配静态IP地址。

为了方便结点之间的通信,需要为Hadoop中的每个结点分配固定的IP地址。

  1. 为每台主机分配固定IP地址。
    1. 查看自己所在局域网的网段。(注:三台主机的网络均为桥接模式)

我的宿主机网络如下:

IPv4地址:192.168.213.177

子网掩码:255.255.255.0

默认网关:192.168.213.254

DNS服务器:192.168.10.251

                                                    192.168.10.252

(额外的小注释: 谷歌搭建了两个免费的DNS服务器:8.8.8.8和8.8.4.4)

  1. 为主机master配置静态IP地址192.168.213.108

命令:sudo vi /etc/network/interfaces

删除其中关于eth0的部分,加入以下内容:

           auto eth0

           iface eth0 inet static

           address 192.168.213.108

           gateway 192.168.213.254

           netmask 255.255.255.0

           network 192.168.213.0

                      broadcast 192.168.213.255

如下图:

 

保存退出。

  1. 手动配置DNS

命令:sudo vi /etc/resolv.conf

删除原DNS的信息,加入以下信息:

nameserver 192.168.10.251

nameserver 192.168.10.252

如下图:

 

  1. 重启network,使上述修改生效。

命令:sudo /etc/init.d/networking restart

生效后截图如下:

 

  1. 如果重启ubuntu后,会发现又不能上网了,因为DNS又被修改为默认值了。为了一劳永逸,永久修改DNS值,命令如下:

sudo vi /etc/resolvconf/resolv.conf.d/head

将原有内容修改为如下:

nameserver 192.168.10.251

nameserver 192.168.10.252

截图如下:

 

(注:因为ubuntu重启后,/etc/resolv.conf文件中的内容会被覆盖为/etc/resolvconf/resolv.conf.d/head中的内容)

  1. 按照以上步骤,分别配置slave1和slave2的IP地址,为192.168.213.109和192.168.213.110.
  2. 修改每台主机的主机名。

修改/etc/hostname文件,命令如下:sudo vi /etc/hostname

将原主机名更换为master,截图如下:

 

修改/etc/hosts文件,命令如下:sudo vi /etc/hosts

添加内容如下:

192.168.213.108       master

192.168.213.109       slave1

192.168.213.110       slave2

如截图:

 

同样的步骤修改slave1主机和slave2主机。

三.   为每台主机安装SSH并设置无密码登陆

  1. 安装SSH.

命令为:sudo apt-get install ssh

  1. 生成SSH密钥
    1. 在/home/hadoop目录下创建隐藏目录.ssh,命令如下:

mkdir .ssh

  1. 通过ssh-keygen生成dsa密钥对,并将其放置在.ssh目录下,通过-P选项来设置空的密码,从而实现SSH的无密码登陆,具体命令如下:

ssh-keygen –t dsa –P ‘’ –f /home/hadoop/.ssh/id_dsa

生成的私钥保存在/home/hadoop/.ssh/id_dsa文件中,生成的公钥保存在/home/hadoop/.ssh/id_dsa.pub文件中。

  1. 接下来,需要将id_dsa.pub中的公钥信息保存到authorized_keys中,命令如下:

cat id_dsa.pub >> authorized_keys

  1. 配置完成。可以通过ssh localhost来验证,除了在第一次输入yes外,之后不需要任何输入即可登录主机。
  2. 为slave1和slave2进行同样的操作。并将master的公钥信息导入到slave1和slave2的authorized_keys文件中。

命令如下:

scp id_dsa.pub hadoop@slave1:~/frommaster

scp id_dsa.pub hadoop@slave2:~/frommaster

分别进入slave1和slave2的/home/hadoop/.ssh目录,并执行如下命令:

cat frommaster >> authorized_keys

rm –f frommaster

四.   为每台主机安装JDK

  1. 下载并解压缩JDK到/home/hadoop目录中
  2. 我安装的jdk1.7…….,为了配置的方便,我把目录更名为jdk1.7

mv jdk1.7.(JDK主目录名) jdk1.7

  1. 修改/etc/profile文件,

命令:sudo vi /etc/profile

加入如下Java配置信息:

export JAVA_HOME=/home/hadoop/jdk1.7

export JRE_HOME=/home/hadoop/jdk1.7/jre

export CLASSPATH=.:$JAVA_HOME/lib:$JRE_HOME/lib:$CLASSPATH

export PATH=$JAVA_HOME/bin:$JRE_HOME/bin:$PATH

保存退出

  1. 使Java配置修改生效。命令:

source /etc/profile

  1. 验证。命令 java –version
  2. 有时,还需要将$JAVA_HOME/bin目录信息加入到/etc/environment中,以保证我们能正常运行Java相关主函数。

PATH=”balbalbalblablalballbabllba(前面是原内容):/home/hadoop/jdk1.7/bin”如下图:

 

五.   关闭每台主机的防火墙

ubuntu系统:ufw disable(重启生效)

六.   配置Hadoop

将下载的hadoop-2.2.tar.gz解压到master主机的/home/hadoop路径下。(注意,如果是64位系统,需要编译源代码,将编译后的结果放在此路径下。64位系统与32位系统安装有些不同。)

配置之前,需要在master本地文件系统创建以下文件夹:

~/dfs/name

~/dfs/data

~/tmp

这里要涉及到的配置文件有7个:

~/hadoop-2.2.0/etc/hadoop/hadoop-env.sh

~/hadoop-2.2.0/etc/hadoop/yarn-env.sh

~/hadoop-2.2.0/etc/hadoop/slaves

~/hadoop-2.2.0/etc/hadoop/core-site.xml

~/hadoop-2.2.0/etc/hadoop/hdfs-site.xml

~/hadoop-2.2.0/etc/hadoop/mapred-site.xml

~/hadoop-2.2.0/etc/hadoop/yarn-site.xml

如果有文件不存在,可以将它在目录中对应的.template文件改为上述的.xml文件,即给文件改一下名字。

  • 配置文件一:hadoop-env.sh

修改JAVA_HOME值

export JAVA_HOME=/home/hadoop/jdk1.7

  • 配置文件二:yarn-env.sh

修改JAVA_HOME值

export JAVA_HOME=/home/hadoop/jdk1.7

  • 配置文件三:slaves(该文件保存所有的slave节点)

写入以下内容:

slave1

slave2

  • 配置文件四:core-site.xml

修改如下内容:

 

注意,name标签中的名称与hadoop1.0有比较一些的不同。

  • 配置文件五:hadf-site.xml。

修改内容如下:

 

  • 配置文件六:mapred-site.xml

修改如下内容:

 

  • 配置文件七:yarn-site.xml

修改如下内容:

 

  • 最后一步:将hadoop复制到其他节点

命令如下:

scp –r /home/hadoop/hadoop-2.2.0 hadoop@slave1:~/

scp –r /home/hadoop/hadoop-2.2.0 hadoop@slave2:~/

七.   启动Hadoop

  1. 进入安装目录:cd ~/hadoop-2.2.0
  2. 格式化namenode: ./bin/hdfs namenode –format
  3. 启动hdfs:

命令为: ./sbin/start-dfs.sh

此时在master主机上运行的进程有:NameNode, SecondartNameNode

此时在slave1和slave2主机上运行的进程有:DataNode

截图如下:

master主机:

 

slave主机:

 

  1. 启动yarn:

命令如下:./sbin/start-yarn.sh

此时在master主机上运行的进程有:NameNode, SecondaryNameNode, ResourceManager

此时在slave主机上运行的进程有:DataNode, NodeManager

截图如下:

master主机:

 

slave主机:

 

           至此,Hadoop已经安装完成。

           查看集群状态:

          

           打开浏览器,输入192.168.213.8088,查看ResourceManager

           如图:

 

八.   在hadoop上运行wordcount程序

下面,我们在自己搭建的Hadoop平台上运行第一个wordcount程序。

Hadoop自带了一个例子程序,为

~/hadoop-2.2.0/share/hadoop/mapreduce/hadoop-mapreduce-examples-2.2.0.jar。

我们来运行一下。

  1. 在主目录下运行:wget http://www.gutenberg.org/cache/epub/20417/pg20417.txt
  2. 命令:cd hadoop-2.2.0
  3. 命令:./bin/hdfs dfs –mkdir /input
  4. ./bin/hdfs fs –copyFromLocal /home/hadoop/pg20417.txt input
  5. ./bin/hadoop jar ./share/hadoop/mapreduce/hadoop-mapreduce-examples-2.2.0.jar wordcount input output 
posted @ 2014-12-11 18:31  pku_smile  阅读(362)  评论(0编辑  收藏  举报