网上对于全分布式的介绍也是一堆!!要么是假的!要么是1.x版本的全分布式!我实在是无力吐槽,很多博客大牛转载的或者“原创”的我看完我都问他们自己。。。他们自己实现了吗?以下是我的安装过程:
如有问题随时联系我 E-mail:[email protected]
此次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组。
命令如下:
cd /etc/sudoers.d
sudo vi hadoop
添加内容如下图:
保存退出。
chmod 0440 hadoop
二. 确定主机名,并为每台主机分配静态IP地址。
为了方便结点之间的通信,需要为Hadoop中的每个结点分配固定的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)
命令: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
如下图:
保存退出。
命令:sudo vi /etc/resolv.conf
删除原DNS的信息,加入以下信息:
nameserver 192.168.10.251
nameserver 192.168.10.252
如下图:
命令:sudo /etc/init.d/networking restart
生效后截图如下:
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中的内容)
修改/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并设置无密码登陆
命令为:sudo apt-get install ssh
mkdir .ssh
ssh-keygen –t dsa –P ‘’ –f /home/hadoop/.ssh/id_dsa
生成的私钥保存在/home/hadoop/.ssh/id_dsa文件中,生成的公钥保存在/home/hadoop/.ssh/id_dsa.pub文件中。
cat id_dsa.pub >> 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
mv jdk1.7.(JDK主目录名) jdk1.7
命令: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
保存退出
source /etc/profile
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文件,即给文件改一下名字。
修改JAVA_HOME值
export JAVA_HOME=/home/hadoop/jdk1.7
修改JAVA_HOME值
export JAVA_HOME=/home/hadoop/jdk1.7
写入以下内容:
slave1
slave2
修改如下内容:
注意,name标签中的名称与hadoop1.0有比较一些的不同。
修改内容如下:
修改如下内容:
修改如下内容:
命令如下:
scp –r /home/hadoop/hadoop-2.2.0 hadoop@slave1:~/
scp –r /home/hadoop/hadoop-2.2.0 hadoop@slave2:~/
七. 启动Hadoop
命令为: ./sbin/start-dfs.sh
此时在master主机上运行的进程有:NameNode, SecondartNameNode
此时在slave1和slave2主机上运行的进程有:DataNode
截图如下:
master主机:
slave主机:
命令如下:./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。
我们来运行一下。