搭建集群hadoop

准备工作

在单机的hadoop的基础上搭建集群的hadoop

先克隆3台虚拟机:
在VMware中,右键虚拟机(已关闭状态),依次选择

1
[管理]->[克隆]->[下一步]->[虚拟机中当前状态]->[下一步]

如图所示


hadoop_001

选择位置后克隆机器,克隆2~3台虚拟机即可

修改网卡IP主机名

克隆的机器叫做02,先右键机器->设置->网络适配器->高级,给02生成一个新的mac地址


hadoop_002

更改规则

1
vim /etc/udev/rules.d/70-persistent-net.rules


hadoop_003

删除多余的网卡,将第二个网卡的NAME改为eth0

配置IP地址

1
vim /etc/sysconfig/network-scripts/ifcfg-eth0

将IP地址修改为和01机器在同一个网段下,保证01和02相互能ping通
重启网络service network restart,测试一下ping,02与Windows和01都能互相ping通

和搭建伪分布式一样,修改主机名和hosts文件,修改完成

1
2
vim /etc/sysconfig/network
vim /etc/hosts

删除原有的hadoop环境

我是复制了3份,VMware中共有01,02,03,04虚拟机,依次删除原有的hadoop(也可以先删除再拷贝的)

1
2
3
4
# 从环境变量中删除
vim /etc/profile
# 从磁盘中删除
rm -rf /hadoop

为了操作方便,可以用xshell工具连接,免得虚拟机来回切换

02,03,04删除root下的.ssh文件夹,重新生成秘钥ssh-keygen -t rsa -C "zhang0chao0@gmail.com"

开始安装

将安装包hadoop-2.8.4.tar.gz上传到01机器上,和单机一样,解压并配置环境变量

hosts文件配置,01~04机器都追加hosts文件

1
2
3
4
192.168.8.2 hadoop01
192.168.8.3 hadoop02
192.168.8.4 hadoop03
192.168.8.5 hadoop04

cd到目录/hadoop/hadoop-2.8.4/etc/hadoop,开始修改配置文件

修改JAVA_HOME

1
vim hadoop-env.sh

core-site.xml,配置namenode和tmp目录

1
2
3
4
5
6
7
8
9
10
<configuration>
  <property>
    <name>fs.default.name</name>
    <value>hdfs://192.168.8.2:9000</value>
  </property>
  <property>
    <name>hadoop.tmp.dir</name>
    <value>/hadoop/hadoop-2.8.4/tmp</value>
  </property>
</configuration>

hdfs-site.xml,配置副本数量和name/data-node本地文件位置

1
2
3
4
5
6
7
8
9
10
11
12
13
14
<configuration>
  <property>
    <name>dfs.replication</name>
    <value>3</value>
  </property>
  <property>
    <name>dfs.namenode.name.dir</name>
    <value>/hadoop/hadoop-2.8.4/tmp/dfs/name</value>
  </property>
  <property>
    <name>dfs.datanode.data.dir</name>
    <value>/hadoop/hadoop-2.8.4/tmp/dfs/data</value>
  </property>
</configuration>

mapred-site.xml,指定运行在YARN上

1
2
3
4
5
6
<configuration>
  <property>
    <name>mapreduce.framework.name</name>
    <value>yarn</value>
  </property>
</configuration>

yarn-site.xml,指定resourcemanager的地址,可以不和namenode在一台机器上,以减轻压力

1
2
3
4
5
6
7
8
9
10
<configuration>
  <property>
    <name>yarn.resourcemanager.hostname</name>
    <value>hadoop02</value>
  </property>
  <property>
    <name>yarn.nodemanager.aux-services</name>
    <value>mapreduce_shuffle</value>
  </property>
</configuration>

slaves,添加slave节点

1
2
3
hadoop02
hadoop03
hadoop04

将配置好的文件拷贝到其它机器,在拷贝前先删除doc文档,提高拷贝的速度

1
rm -rf /hadoop/hadoop-2.8.4/share/doc/

拷贝

1
2
3
scp -r /hadoop/ hadoop02:/
scp -r /hadoop/ hadoop03:/
scp -r /hadoop/ hadoop04:/

02,03,04机器上添加环境变量

1
2
3
4
vim /etc/profile
export HADOOP_HOME=/hadoop/hadoop-2.8.4
export PATH=$PATH:$HADOOP_HOME/bin
source /etc/profile

01机器上格式化hdfs

1
hadoop namenode -format

启动hdfs

cd到sbin目录,命令

1
./start-dfs.sh

然后启动了namenode后,在启动datanode的时候卡住了,卡着不动,怎么办?找错误

在启动hadoop03机器的datanode时卡出了,就去对应的日志文件找,找到日志

1
vim hadoop-root-datanode-hadoop03.log

发现错误

1
2
3
4
5
2018-10-14 05:34:44,052 WARN org.apache.hadoop.ipc.Client: Failed to connect to server: hadoop01/192.168.8.2:9000: retries get failed due to exceeded maximum allowed retries number: 10
java.net.ConnectException: Connection refused
at sun.nio.ch.SocketChannelImpl.checkConnect(Native Method)
at sun.nio.ch.SocketChannelImpl.finishConnect(SocketChannelImpl.java:717)
xxxxxx

就是hadoop03无法与hadoop01通信,那么就配置一下秘钥

配ssh

从01->[02,03,04]

1
2
3
ssh-copy-id hadoop02
ssh-copy-id hadoop03
ssh-copy-id hadoop04

从[02,03,04]->01

1
ssh-copy-id hadoop01

再次启动hdfs,成功~

启动yarn

因为我在hadoop02上配置的resourcemanager,那么就在hadoop02上启动yarn

和01一样,将02与[01,03,04]之间都配上ssh权限,启动sbin/start-yarn.sh,出现错误

1
The authenticity of host 'hadoop02 (192.168.8.3)' can't be established.

自己到自己没有免登陆,再ssh-copy-id localhost,再次启动。终于成功

检验进程

挨个jps,发现hadoop02

1
2
3
4
2595 DataNode
3653 Jps
3480 NodeManager
2815 ResourceManager

ResourceManager和NodeManager在一起,而hadoop01缺少NodeManager

解决,编辑hadoop02中的slaves文件,修改为

1
2
3
hadoop01
hadoop03
hadoop04

停止yarn后再运行,一切进程都正常

访问

1
2
http://192.168.8.2:50070/dfshealth.html#tab-overview
http://192.168.8.3:8088/cluster/nodes

一切正常,集群搭建完成