Day02_01_搭建Hadoop完全分布式

搭建Hadoop完全分布式

一、完全分布式结构图

1741744277993

二、完全分布式简易图

1741744380201

三、实现步骤:

1、三个节点需要关闭防火墙

​ ①临时关闭:sudo systemctl stop firewalld

​ ②永久关闭:sudo systemctl disable firewalld

2、三个节点需要修改主机名称

​ ①编辑文件:vim /etc/hostname

​ ②修改主机名称为对应的名称:hadoop01/hadoop02/hadoop03

3、三个节点需要进行IP地址与主机名称的映射

​ ①编辑文件:vim /etc/hosts

​ ②添加配置

1
2
3
192.168.232.128 hadoop01
192.168.232.129 hadoop02
192.168.232.130 hadoop03

4、三个节点重新启动用于加载系统配置:reboot

5、三个节点需要进行免密互通

​ ①生成公钥和秘钥,生成的公钥和秘钥将会自动存储在/root/.ssh目录下:ssh-keygen

​ ②三个节点需要进行执行注册

1
2
3
ssh-copy-id root@hadoop01
ssh-copy-id root@hadoop02
ssh-copy-id root@hadoop03

6、上传JDK的安装包并且解压

1
tar -xvf jdk-8u131-linux-x64.tar.gz -C /home/software/

7、配置环境变量

​ ①编辑文件:vim /etc/profile

​ ②添加配置

1
2
JAVA_HOME=/home/software/jdk1.8
export PATH=$PATH:$JAVA_HOME/bin:

​ ③配置完成之后保存退出并且需要重新生效

1
source /etc/profile

8、上传并解压Hadoop压缩包

1
tar -xvf hadoop-2.7.6.tar.gz -C /home/software/

9、配置Hadoop环境变量

​ ①编辑文件:vim /etc/profile

​ ②添加配置

1
2
3
JAVA_HOME=/home/software/jdk1.8
HADOOP_HOME=/home/software/hadoop-2.7.6
export PATH=$PATH:$JAVA_HOME/bin:$HADOOP_HOME/bin:$HADOOP_HOME/sbin:

​ ③配置完成之后保存退出并且需要重新生效

1
source /etc/profile

===============================配置阶段=================================

进入Hadoop的安装目录下的子目录:cd /home/software/hadoop-2.7.6/etc/hadoop/

1、编辑hadoop-env.sh文件

添加配置

1
2
export JAVA_HOME=/home/software/jdk1.8
export HADOOP_CONF_DIR=/home/software/hadoop-2.7.6/etc/hadoop

保存退出并且重新生效:source hadoop-env.sh

2、编辑slaves文件

添加配置(添加从节点的主机名称)

1
2
3
hadoop01
hadoop02
hadoop03
3、编辑core-site.xml文件

添加配置

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<property>
<!-- 指定在Zookeeper上注册的节点名称 -->
<name>fs.defaultFS</name>
<value>hdfs://ns</value>
</property>
<property>
<!-- 指定Hadoop数据存储的目录 -->
<name>hadoop.tmp.dir</name>
<value>/home/software/hadoop-2.7.6/tmp</value>
</property>
<property>
<!-- 指定Zookeeper的链接地址 -->
<name>ha.zookeeper.quorum</name>
<value>hadoop01:2181,hadoop02:2181,hadoop03:2181</value>
</property>
4、编辑mapred-site.xml文件

​ ①复制模版文件并且重命名:cp mapred-site.xml.template mapred-site.xml

​ ②添加配置

1
2
3
4
5
<property>
<!-- MapReduce程序基于Yarn运行 -->
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
5、编辑hdfs-site.xml文件

​ 添加配置

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
<property>
<!-- 绑定在Zookeeper上注册节点的名称 -->
<name>dfs.nameservices</name>
<value>ns</value>
</property>
<property>
<!-- ns集群下两个NameNode,分别是nn1和nn2 -->
<name>dfs.ha.namenodes.ns</name>
<value>nn1,nn2</value>
</property>
<property>
<!-- nn1的RPC通信 -->
<name>dfs.namenode.rpc-address.ns.nn1</name>
<value>hadoop01:9000</value>
</property>
<property>
<!-- nn1的http通信 -->
<name>dfs.namenode.http-address.ns.nn1</name>
<value>hadoop01:50070</value>
</property>
<property>
<!-- nn2的RPC通信 -->
<name>dfs.namenode.rpc-address.ns.nn2</name>
<value>hadoop02:9000</value>
</property>
<property>
<!-- nn2的http通信 -->
<name>dfs.namenode.http-address.ns.nn2</name>
<value>hadoop02:50070</value>
</property>
<property>
<!-- 指定JournalNode在本地磁盘上存储数据目录 -->
<name>dfs.journalnode.edits.dir</name>
<value>/home/software/hadoop-2.7.6/tmp/journal</value>
</property>
<property>
<!--
指定NameNode的元数据在journalNode存储位置,这样子备份状态的NameNode就可以
从journalnode集群中的指定位置获取信息达到热备效果
-->
<name>dfs.namenode.shared.edits.dir</name>
<value>qjournal://hadoop01:8485;hadoop02:8485;hadoop03:8485/ns</value>
</property>
<property>
<!-- 开启NameNode故障时的自动切换 -->
<name>dfs.ha.automatic-failover.enabled</name>
<value>true</value>
</property>
<property>
<!-- 配置失败自动切换实现方式 -->
<name>dfs.client.failover.proxy.provider.ns</name>
<value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>
</property>
<property>
<!-- 配置隔离机制 -->
<name>dfs.ha.fencing.methods</name>
<value>sshfence</value>
</property>
<property>
<!-- 使用隔离机制需要SSH免密登录 -->
<name>dfs.ha.fencing.ssh.private-key-files</name>
<value>/root/.ssh/id_rsa</value>
</property>
<property>
<!-- 配置NameNode存放元数据的目录 -->
<name>dfs.namenode.name.dir</name>
<value>file:///home/software/hadoop-2.7.6/tmp/hdfs/name</value>
</property>
<property>
<!-- 配置DataNode存放元数据的目录 -->
<name>dfs.datanode.data.dir</name>
<value>file:///home/software/hadoop-2.7.6/tmp/hdfs/data</value>
</property>
<property>
<!-- 配置副本数量 -->
<name>dfs.replication</name>
<value>3</value>
</property>
<property>
<!-- 设置用户的操作权限,false表示关闭权限验证,任何用户都可以操作 -->
<name>dfs.permissions</name>
<value>false</value>
</property>
6、编辑yarn-site.xml文件

​ 添加配置

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
<property>
<!-- 配置Yarn的高可用 -->
<name>yarn.resourcemanager.ha.enabled</name>
<value>true</value>
</property>
<property>
<!-- 指定两个ResourceManager的名称 -->
<name>yarn.resourcemanager.ha.rm-ids</name>
<value>rm1,rm2</value>
</property>
<property>
<!-- 配置rm1的主机名称 -->
<name>yarn.resourcemanager.hostname.rm1</name>
<value>hadoop01</value>
</property>
<property>
<!-- 配置rm2的主机名称 -->
<name>yarn.resourcemanager.hostname.rm2</name>
<value>hadoop03</value>
</property>
<property>
<!-- 开启Yarn的恢复机制 -->
<name>yarn.resourcemanager.recovery.enabled</name>
<value>true</value>
</property>
<property>
<!-- 执行rm恢复机制实现类 -->
<name>yarn.resourcemanager.store.class</name>
<value>org.apache.hadoop.yarn.server.resourcemanager.recovery.ZKRMStateStore</value>
</property>
<property>
<!-- 配置Zookeeper的链接地址 -->
<name>yarn.resourcemanager.zk-address</name>
<value>hadoop01:2181,hadoop02:2181,hadoop03:2181</value>
</property>
<property>
<!-- 指定yarn集群的别名 -->
<name>yarn.resourcemanager.cluster-id</name>
<value>ns-yarn</value>
</property>
<property>
<!-- 指定NodeManager启动加载服务的方式为shuffle server -->
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<property>
<!-- 指定ResourceManager的地址 -->
<name>yarn.resourcemanager.hostname</name>
<value>hadoop03</value>
</property>

10、将第一个节点上的Hadoop安装包远程拷贝给另外的两个节点

1
2
scp -r hadoop-2.7.6/ root@hadoop02:/home/software/
scp -r hadoop-2.7.6/ root@hadoop03:/home/software/

=======================Hadoop集群的格式化与启动=============================

1、三个节点启动Zookeeper

1
2
3
cd /home/software/zookeeper-3.4.7/bin/
sh zkServer.sh start
sh zkServer.sh status

2、在第一个节点上格式化Zookeeper

1
hdfs zkfc -formatZK

3、在三个节点上启动JournalNode

1
hadoop-daemon.sh start journalnode

4、在第一个节点上格式化NameNode

1
hadoop namenode -format

5、在第一个节点上启动NameNode

1
hadoop-daemon.sh start namenode

6、在第二个节点上格式化NameNode

1
hadoop namenode -bootstrapStandby

7、在第二个节点上启动NameNode

1
hadoop-daemon.sh start namenode

8、三个节点上启动DataNode

1
hadoop-daemon.sh start datanode

9、在第一个节点上和第二个节点上启动

1
hadoop-daemon.sh start zkfc

10、在第三个节点上启动Yarn

1
start-yarn.sh

11、在第一个节点上启动ResourceManager

1
yarn-daemon.sh start resourcemanager