虚拟机Ubuntu16.04下搭建Hadoop集群
前置条件
一个安装好Hadoop2.7.7并配置好伪分布式,意思是伪分布式没问题
使用NAT连接网络
开始搭建
一:复制虚拟电脑,然后命名为master和slave1、slave2

注意:在复制的时候要勾选为所有网卡重新生成Mac地址

二:进入虚拟电脑中,使用:
sudo vim /etc/hostname
将三个分别命名为:“master、slave1、slave2”然后用:
sudo reboot
重启电脑
使用ifconfig查看三个的ip,然后使用:
sudo vim /etc/hosts
写入每一个ip和主机名,就像是这样:
10.0.2.4 master
10.0.2.5 slave1
10.0.2.6 slave2
127.0.0.1 localhost
196.168.91.133 ubuntu
# The following lines are desirable for IPv6 capable hosts
::1 ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
在每一个电脑中都要这样写。最后测试一下能不能相互ping通,能够说明就OK。
三:建立Hadoop用户和用户组
如果你的之前的用户名就是Hadoop那么这一步可以忽略,如果不是的话就建一个吧:
sudo groupadd hadoop
sudo useradd -s /bin/bash -d /home/hadoop(你的用户名) -m hadoop -g hadoop
四:ssh无密码登录验证设置
如果你原来的电脑设置了ssh免密码登录的话那么可以忽略,因为完全拷贝的所以秘钥一样的,最后可以试一下能不能使用SSH登录,如果可以就OK,不可以的话去百度一下吧。
五:配置Hadoop
修改你Hadoop目录下的“/etc/hadoop/slaves”文件,就像是这样:
sudo vim /usr/local/lib/hadoop/etc/hadoop/slaves
内容如下:
# localhost可以不要,容易报错
localhost
master
slave1
slave2
修改core-site.xml文件:
sudo vim /usr/local/lib/hadoop/etc/hadoop/core-site.xml
内容如下:
<configuration>
<property>
<name>hadoop.tmp.dir</name>
<value>file:/usr/local/lib/hadoop/tmp</value>
<description>注释</description>
</property>
<property>
<name>fs.defaultFS</name>
<value>hdfs://master:9000</value>
</property>
<property>
<name>hadoop.tmp.dir</name>
<value>file:/usr/local/lib/hadoop/tmp</value>
</property>
<property>
<name>fs.trash.interval</name>
<value>10080</value>
</property>
</configuration>
修改hdfs-site.xml:
sudo vim /usr/local/lib/hadoop/etc/hadoop/hdfs-site.xml
内容如下:
<configuration>
<property>
<name>dfs.namenode.secondary.http-address</name>
<value>master:50090</value>
</property>
<property>
<name>dfs.replication</name>
<value>3</value>
</property>
<property>
<name>dfs.namenode.name.dir</name>
<value>file:/usr/local/lib/hadoop/dfs/name</value>
</property>
<property>
<name>dfs.datanode.data.dir</name>
<value>file:/usr/local/lib/hadoop/dfs/data</value>
</property>
<property>
<name>dfs.permissions</name>
<value>false</value>
</property>
<property>
<name>dfs.support.append</name>
<value>true</value>
</property>
</configuration>
修改mapred-site.xml:
sudo vim /usr/local/lib/hadoop/etc/hadoop/mapred-site.xml
内容如下:
<configuration>
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
<property>
<name>mapreduce.jobtracker.address</name>
<value>master:9001</value>
</property>
</configuration>
修改yarn-site.xml:
sudo vim /usr/local/lib/hadoop/etc/hadoop/yarn-site.xml
内容如下:
<configuration>
<property>
<name>yarn.resourcemanager.hostname</name>
<value>master</value>
</property>
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<property>
<name>yarn.log-aggregation-enable</name>
<value>true</value>
</property>
<property>
<name>yarn.log-aggregation.retain-seconds</name>
<value>604800</value>
</property>
<property>
<name>yarn.resourcemanager.webapp.address</name>
<value>master:8099</value>
</property>
</configuration>
然后在master上 格式化:
hadoop namenode -format
子节点配置不需要这样麻烦,只需要在你安装Hadoop的目录下这样:
sudo scp -r Hadoop hadoop@slave1:/usr/local/lib
sudo scp -r Hadoop hadoop@slave2:/usr/local/lib
如果复制不了,需要执行安装Hadoop的目录赋权:
sudo chmod 777 lib
六:启动Hadoop集群
进入master中,使用start-all.sh启动集群,然后记得提前测试能不能ssh登录。然后查看一下

如果在启动的时候出现:
mv: 无法获取"/usr/local/apps/hadoop-2.8.1/logs/hadoop-root-datanode-vm001.out.3" 的文件状态(stat): 没有那个文件或目录
这个错误,你只需要将: /usr/local/lib/hadoop/etc/hadoop/slaves文件中的localhost删除
“/usr/local/lib/hadoop/e”
然后你在slave1和slave2中查看:

你会发现只有Nodemanager,没有Datamanager。不要着急,你需要去查看一下master上:/usr/local/lib/hadoop/dfs/name/current/VERSION和/usr/local/lib/hadoop/dfs/data/current/VERSION的clusterID是否一致,不一致的话把name中的复制给data,同时也要修改两个slave上的data中的clusterID使其和master的保持一致,然后重启就OK了。
查看:
cat /usr/local/lib/hadoop/dfs/name/current/VERSION
cat /usr/local/lib/hadoop/dfs/data/current/VERSION

然后搭建成功的样子
