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组。
- 命令如下:sudo adduser hadoop
- 修改hadoop用户配置,使其拥有sudo权限。
命令如下:
cd /etc/sudoers.d
sudo vi hadoop
添加内容如下图:
保存退出。
- 修改hadoop文件权限。命令如下:
chmod 0440 hadoop
二. 确定主机名,并为每台主机分配静态IP地址。
为了方便结点之间的通信,需要为Hadoop中的每个结点分配固定的IP地址。
- 为每台主机分配固定IP地址。
- 查看自己所在局域网的网段。(注:三台主机的网络均为桥接模式)
我的宿主机网络如下:
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)
- 为主机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
如下图:
保存退出。
- 手动配置DNS
命令:sudo vi /etc/resolv.conf
删除原DNS的信息,加入以下信息:
nameserver 192.168.10.251
nameserver 192.168.10.252
如下图:
- 重启network,使上述修改生效。
命令:sudo /etc/init.d/networking restart
生效后截图如下:
- 如果重启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中的内容)
- 按照以上步骤,分别配置slave1和slave2的IP地址,为192.168.213.109和192.168.213.110.
- 修改每台主机的主机名。
修改/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并设置无密码登陆
- 安装SSH.
命令为:sudo apt-get install ssh
- 生成SSH密钥
- 在/home/hadoop目录下创建隐藏目录.ssh,命令如下:
mkdir .ssh
- 通过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文件中。
- 接下来,需要将id_dsa.pub中的公钥信息保存到authorized_keys中,命令如下:
cat id_dsa.pub >> authorized_keys
- 配置完成。可以通过ssh localhost来验证,除了在第一次输入yes外,之后不需要任何输入即可登录主机。
- 为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
- 下载并解压缩JDK到/home/hadoop目录中
- 我安装的jdk1.7…….,为了配置的方便,我把目录更名为jdk1.7
mv jdk1.7.(JDK主目录名) jdk1.7
- 修改/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
保存退出
- 使Java配置修改生效。命令:
source /etc/profile
- 验证。命令 java –version
- 有时,还需要将$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
- 进入安装目录:cd ~/hadoop-2.2.0
- 格式化namenode: ./bin/hdfs namenode –format
- 启动hdfs:
命令为: ./sbin/start-dfs.sh
此时在master主机上运行的进程有:NameNode, SecondartNameNode
此时在slave1和slave2主机上运行的进程有:DataNode
截图如下:
master主机:
slave主机:
- 启动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。
我们来运行一下。
- 在主目录下运行:wget http://www.gutenberg.org/cache/epub/20417/pg20417.txt
- 命令:cd hadoop-2.2.0
- 命令:./bin/hdfs dfs –mkdir /input
- ./bin/hdfs fs –copyFromLocal /home/hadoop/pg20417.txt input
- ./bin/hadoop jar ./share/hadoop/mapreduce/hadoop-mapreduce-examples-2.2.0.jar wordcount input output