目录

hadoop集群搭建

安装zookeeper/kafka集群

下载zookeeper以及kafka

zookeeper下载地址:https://mirrors.tuna.tsinghua.edu.cn/apache/zookeeper/zookeeper-3.6.2/apache-zookeeper-3.6.2.tar.gz

分布式安装部署zookeeper

Zk-kafka1 Zk-kafka2 Zk-kafka3
zookeeper /opt/zookeeper /opt/zookeeper /opt/zookeeper
Kafka /opt/kafka /opt/kafka /opt/kafka
ip 192.168.116.101 192.168.116.102 192.168.116.103
 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
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
安装时间同步ntpdate
yum -y install ntpdate
crontab -e
* * * * * /usr/sbin/ntpdate time.windows.com

安装jdk,版本为build 1.8.0_191-b12 二进制版本
[root@zk-kafka1 ~]# tar -xf jdk-8u191-linux-x64.tar.gz -C /opt/
修改环境变量
[root@zk-kafka1 jdk1.8.0_191]# vi /etc/profile
添加一下内容
export JAVA_HOME=/opt/jdk1.8.0_191
export JAVA_BIN=$JAVA_HOME/bin
export PATH=$PATH:$JAVA_BIN
export CLASSPATH=$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar

所有机器关闭防火墙以及selinux
systemctl disable firewalld --now
setenforce 0
sed -ri 's/(SELINUX=).*/\1disabled/' /etc/selinux/config


[root@zk-kafka1 jdk1.8.0_191]# source /etc/profile
将jdk拷贝到zk-kafka2/3
[root@zk-kafka1 jdk1.8.0_191]# scp -r /opt/jdk1.8.0_191 192.168.110.161:/opt/
[root@zk-kafka1 jdk1.8.0_191]# scp -r /opt/jdk1.8.0_191 192.168.110.162:/opt/

将profile拷贝到zk-kafka2/3
[root@zk-kafka1 jdk1.8.0_191]# scp /etc/profile 192.168.110.161:/etc/
[root@zk-kafka1 jdk1.8.0_191]# scp /etc/profile 192.168.110.162:/etc/

Zk-kafka2/3分别source
[root@zk-kafka2 lib]# source /etc/profile
[root@zk-kafka3 ~]# source /etc/profile

配置hosts文件
[root@zk-kafka1 ~]# cat >> /etc/hosts <<EOF
192.168.110.160 zk-kafka1
192.168.110.161 zk-kafka2
192.168.110.162 zk-kafka3
EOF
[root@zk-kafka1 ~]# scp /etc/hosts 192.168.110.161:/etc/
[root@zk-kafka1 ~]# scp /etc/hosts 192.168.110.162:/etc/

解压安装 zk-kafka1上操作即可
[root@zk-kafka1 ~]# tar -xf apache-zookeeper-3.6.2-bin.tar.gz -C /opt/
[root@zk-kafka1 ~]# mv /opt/apache-zookeeper-3.6.2-bin/ /opt/zookeeper创建数据目录zkData
[root@zk-kafka1 zookeeper]# cd /opt/zookeeper/
[root@zk-kafka1 zookeeper]# mkdir zkData
配置服务器编号,在zkData目录创建一个myid的文本,在文本中添加server对应的编号,编号范围0-255
[root@zk-kafka1 zookeeper]# echo 1 >zkData/myid
配置zoo.cfg文件
[root@zk-kafka1 conf]# cd /opt/zookeeper/conf/
[root@zk-kafka1 conf]# mv zoo_sample.cfg  zoo.cfg
[root@zk-kafka1 conf]# vi zoo.cfg 
修改数据存储路径为/opt/zookeeper/zkData
dataDir=/opt/zookeeper/zkData
增加集群配置
#######################cluster##########################
server.1=192.168.110.160:2888:3888
server.2=192.168.110.161:2888:3888
server.3=192.168.110.162:2888:3888

配置参数解读
server.A=B:C:D
A 是一个数字,表示第几号服务器,对应zkData/myid文件的配置,zookeeper启动时会读取此文件,拿到里面的数据与zoo.cfg里面的配置信息比较从而判断当前到底是哪个server
B 是服务器的ip地址
C 是这个服务器与集群中Leader服务器交换信息的端口,也就是同步数据用的端口
D 是集群中Leader服务器挂了,需要一个端口来重新进行选举,选出一个新的leader,而这个端口就是用来选举时服务器相互通信的端口

将/opt目录下的所有同步到zk-kafka2/zk-kafka3上
[root@zk-kafka1 ~]# scp -r /opt/zookeeper 192.168.110.161:/opt/
[root@zk-kafka1 ~]# scp -r /opt/zookeeper 192.168.110.162:/opt/
分别修改zk-kafka2/3 ./zkData/myid
[root@zk-kafka2 zookeeper]# echo 2 > /opt/zookeeper/zkData/myid
[root@zk-kafka3 ~]# echo 3 > /opt/zookeeper/zkData/myid

分别启动zookeeper
/opt/zookeeper/bin/zkServer.sh start

查看集群状态
[root@zk-kafka3 ~]# /opt/zookeeper/bin/zkServer.sh status
ZooKeeper JMX enabled by default
Using config: /opt/zookeeper/bin/../conf/zoo.cfg
Client port found: 2181. Client address: localhost. Client SSL: false.
Mode: leader

[root@zk-kafka2 zookeeper]# /opt/zookeeper/bin/zkServer.sh status
ZooKeeper JMX enabled by default
Using config: /opt/zookeeper/bin/../conf/zoo.cfg
Client port found: 2181. Client address: localhost. Client SSL: false.
Mode: follower

[root@zk-kafka1 logs]# /opt/zookeeper/bin/zkServer.sh status
ZooKeeper JMX enabled by default
Using config: /opt/zookeeper/bin/../conf/zoo.cfg
Client port found: 2181. Client address: localhost. Client SSL: false.
Mode: follower

分布式安装kafka

 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
[root@zk-kafka1 ~]# tar -xf kafka_2.13-2.6.0.tgz  -C /opt/
[root@zk-kafka1 ~]# cd /opt/ && mv kafka_2.13-2.6.0/ kafka
创建数据目录
[root@zk-kafka1 opt]# cd kafka/ &&  mkdir data
修改配置文件
[root@zk-kafka1 kafka]# vi config/server.properties
#全局唯一编号不能重复
broker.id=0
#开启删除topic功能
delete.topic.enable=true
#监听地址设置,如果不设置默认为PLAINTEXT://hostname:9092
listeners=PLAINTEXT://192.168.110.161:9092
advertised.listeners=PLAINTEXT://192.168.110.161:9092
#处理网络请求的线程数
num.network.threads=3
#用来处理磁盘iO的线程数量
num.io.threads=8
#发送套接字的缓冲区大小
socket.send.buffer.bytes=102400
#接受套接字的缓冲区大小
socket.receive.buffer.bytes=102400
#请求套接字的缓冲区大小
socket.request.max.bytes=104857600
#kafka的数据存放路径
log.dirs=/opt/kafka/data
#topic在当前broker上的分区个数
num.partitions=1
#用来恢复和清理data下数据的线程数量
num.recovery.threads.per.data.dir=1
#segment文件保留最长时间,超时将被删除,默认是7天
log.retention.hours=168
#segment最大大小为1g,超过了将新建一个segment文件
log.segment.bytes=1073741824
#配置连接zookeeper地址
zookeeper.connect=zk-kafka1:2181,zk-kafka2:2181,zk-kafka3:2181

将kafka同步到zk-kafka2/3上
[root@zk-kafka1 kafka]# scp -r /opt/kafka/ 192.168.110.161:/opt/
[root@zk-kafka1 kafka]# scp -r /opt/kafka/ 192.168.110.162:/opt/

分别修改zk-kafka2/3上broker.id
[root@zk-kafka2 ~]# vi /opt/kafka/config/server.properties 
broker.id=1
[root@zk-kafka3 ~]# vi /opt/kafka/config/server.properties
broker.id=2

启动集群
/opt/kafka/bin/kafka-server-start.sh -daemon /opt/kafka/config/server.properties

安装zk_web,只需要在zk-kafka1上安装即可

 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
yum -y install yum-utils device-mapper-persistent-data lvm2 
yum-config-manager \
--add-repo \ http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo yum update -y && yum install -y docker-ce

mkdir /etc/docker
cat >> /etc/docker/daemon.json <<EOF
{
    "registry-mirrors": ["https://uyah70su.mirror.aliyuncs.com"],
    "exec-opts": ["native.cgroupdriver=systemd"],
    "log-driver": "json-file",
    "log-opts": {
        "max-size": "100m"
    }
}
EOF
systemctl enable docker --now

安装docker-compose进行管理docker
下载docker-compose工具(略)
[root@zk-kafka1 ~]# mv docker-compose-Linux-x86_64  docker-compose
[root@zk-kafka1 ~]# chmod +x docker-compose 
[root@zk-kafka1 ~]# mv docker-compose  /usr/local/bin/
[root@zk-kafka1 ~]# mkdir zk-web
[root@zk-kafka1 ~]# cd zk-web/
[root@zk-kafka1 ~]# vi docker-compose.yml
version: '2'
services:
  zkweb:
    image: peterpoker/zkweb:v1.2.1
    ports:
      - 8099:8099
[root@zk-kafka1 zk-web]# docker-compose up -d

Hadoop集群安装

集群部署规划

hadoop1 hadoop2 hadoop3
HDFS NameNode、DataNode、DFSZKFailoverController、JournalNode NameNode、DataNode、DFSZKFailoverController、JournalNode DataNodeJournalNode
YARN NodeManager ResourceManager、NodeManager ResourceManager、NodeManager
ip 192.168.110.165 192.168.110.166 192.168.110.167

jdk版本为1.8

配置hosts

1
2
3
4
5
cat >> /etc/hosts <<EOF
192.168.110.165 hadoop1
192.168.110.166 hadoop2
192.168.110.167 hadoop3
EOF

关闭firewalld、postifx以及selinux

1
2
3
4
systemctl disable firewalld --now
sed -ri 's/(SELINUX=).*/\1disabled/' /etc/selinux/config
setenforce 0
systemctl disable postfix --now

配置ssh密钥互信,hadoop1上操作

1
2
3
4
[root@hodoop1 ~]# ssh-keygen
[root@hodoop1 ~]# mv .ssh/id_rsa.pub .ssh/authorized_keys
[root@hodoop1 ~]# scp -r .ssh/ 192.168.110.166:
[root@hodoop1 ~]# scp -r .ssh/ 192.168.110.167:

配置ntpdate同步

1
2
3
yum -y install ntpdate
[root@hadoop1 ~]# crontab -l
* * * * * /usr/sbin/ntpdate time.windows.com

安装jdk

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
[root@hadoop1 ~]# tar -xf jdk-8u191-linux-x64.tar.gz -C /opt/
修改环境变量
[root@hadoop1 jdk1.8.0_191]# vi /etc/profile
添加一下内容
export JAVA_HOME=/opt/jdk1.8.0_191
export JAVA_BIN=$JAVA_HOME/bin
export PATH=$PATH:$JAVA_BIN
export CLASSPATH=$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar

[root@zk-kafka1 jdk1.8.0_191]# source /etc/profile
将jdk拷贝到zk-kafka2/3
[root@hodoop1 ~]# scp -r /opt/jdk1.8.0_191 192.168.110.166:/opt/
[root@hodoop1 ~]# scp -r /opt/jdk1.8.0_191 192.168.110.167:/opt/

将profile拷贝到zk-kafka2/3
[root@hodoop1 ~]# scp /etc/profile 192.168.110.166:/etc/
[root@hodoop1 ~]# scp /etc/profile 192.168.110.167:/etc/

Zk-kafka2/3分别source
[root@hadoop2 ~]# source /etc/profile
[root@hadoop3 ~]# source /etc/profile

安装hadoop,在Hadoop1上操作

下载hadoop,下载地址:https://hadoop.apache.org/release/3.3.0.html

1
2
[root@hodoop1 ~]# tar -xf hadoop-3.3.0.tar.gz  -C /opt/
[root@hadoop1 opt]# mv hadoop-3.3.0/ hadoop

hadoop的目录结构

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
1、查看hadoop目录结构
[root@hodoop1 hadoop]# cd /opt/hadoop && ll
total 84
drwxr-xr-x. 2 1001 1001   203 Jul  7 03:50 bin
drwxr-xr-x. 3 1001 1001    20 Jul  7 02:47 etc
drwxr-xr-x. 2 1001 1001   106 Jul  7 03:50 include
drwxr-xr-x. 3 1001 1001    20 Jul  7 03:50 lib
drwxr-xr-x. 4 1001 1001   288 Jul  7 03:51 libexec
-rw-rw-r--. 1 1001 1001 22976 Jul  5 01:29 LICENSE-binary
drwxr-xr-x. 2 1001 1001  4096 Jul  7 03:50 licenses-binary
-rw-rw-r--. 1 1001 1001 15697 Mar 25  2020 LICENSE.txt
-rw-rw-r--. 1 1001 1001 27570 Mar 25  2020 NOTICE-binary
-rw-rw-r--. 1 1001 1001  1541 Mar 25  2020 NOTICE.txt
-rw-rw-r--. 1 1001 1001   175 Mar 25  2020 README.txt
drwxr-xr-x. 3 1001 1001  4096 Jul  7 02:47 sbin
drwxr-xr-x. 4 1001 1001    31 Jul  7 04:27 share

2、重要目录
bin 目录: 存放对hadoop相关服务(HDFS/YARN)进行操作的脚本
etc 目录: Hadoop的配置文件目录,存放Hadoop的配置文件
Lib 目录: 存放Hadoop的本地库(对数据进行压缩解压缩功能)
sbin目录: 存放启动或停止hadoop相关服务的脚本
share目录: 存放Hadoop的依赖jar包、文档和官方案例

配置集群

核心配置文件
core-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
<configuration>
<!-- 指定HDFS中NameNode的地址,把2个namenode的地址组装成一个集群mycluster -->
    <property>
          <name>fs.defaultFS</name>
          <value>hdfs://mycluster</value>
    </property>
<!-- 指定Hadoop运行时产生文件的存储目录 -->
    <property>
    	<name>hadoop.tmp.dir</name>
    	<value>/opt/hadoop/data/tmp</value>
    </property>
<!--声明jounalnode服务器存储目录-->
    <property>
      <name>dfs.journalnode.edits.dir</name>
      <value>/opt/hadoop/data/tmp/data</value>
    </property>

<!--自动故障转义的zookeeper配置-->
 <property>
   <name>ha.zookeeper.quorum</name>
   <value>zk1.example.com:2181,zk2.example.com:2181,zk3.example.com:2181</value>
 </property>
</configuration>

 
hdfs-site.xml
<configuration>
<!--完全分布式集群名称-->
    <property>
      <name>dfs.nameservices</name>
      <value>mycluster</value>
    </property>
<!--集群中NameNode节点都有哪些-->
    <property>
      <name>dfs.ha.namenodes.mycluster</name>
      <value>nn1,nn2</value>
    </property>
<!--nn1的RPC通信地址-->
    <property>
      <name>dfs.namenode.rpc-address.mycluster.nn1</name>
      <value>192.168.110.165:9000</value>
    </property>
<!--nn2的RPC通信地址-->
    <property>
      <name>dfs.namenode.rpc-address.mycluster.nn2</name>
      <value>192.168.110.166:9000</value>
    </property>
<!--nn1的http通信地址-->
    <property>
      <name>dfs.namenode.http-address.mycluster.nn1</name>
      <value>192.168.110.165:50070</value>
    </property>
<!--nn2的http通信地址-->
    <property>
      <name>dfs.namenode.http-address.mycluster.nn2</name>
      <value>192.168.110.166:50070</value>
    </property>

<!--指定NameNode元数据在JournalNode上的存放位置-->
    <property>
      <name>dfs.namenode.shared.edits.dir</name>
      <value>qjournal://192.168.110.165:8485;192.168.110.166:8485;192.168.110.167:8485/mycluster</value>
    </property>

<!--配置隔离机制,即同一时刻只能有一台服务器对外响应-->
    <property>
      <name>dfs.ha.fencing.methods</name>
      <value>sshfence</value>
    </property>

<!--使用隔离机制时需要ssh无秘钥登陆-->
    <property>
      <name>dfs.ha.fencing.ssh.private-key-files</name>
      <value>/root/.ssh/id_rsa</value>
    </property>
    <!--访问代理类:client,mycluster,active 配置失败自动切换实现方式-->
    <property>
      <name>dfs.client.failover.proxy.provider.mycluster</name>
      <value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>
    </property>

</configuration>
workers 工作节点配置文件,之前的版本叫slaves
1
2
3
hadoop1
hadoop2
hadoop3
hadoop-env.sh添加JAVA_HOME环境变量
1
export JAVA_HOME=/opt/jdk1.8.0_191
yarn-env.sh添加 JAVA_HOME环境变量
1
export JAVA_HOME=/opt/jdk1.8.0_191
将hadoop同步到hadoop2/3机器上
1
2
[root@hadoop1 hadoop]# scp -r /opt/hadoop/ 192.168.110.166:/opt/
[root@hadoop1 hadoop]# scp -r /opt/hadoop/ 192.168.110.167:/opt/
启动HDFS-HA集群
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
各个journalNode节点上,输入以下命令启动journalNode服务
cd /opt/hadoop/
sbin/hadoop-daemon.sh  start journalnode

在nn1上对其进行格式化,并启动
[root@hadoop1 hadoop]# bin/hdfs namenode -format
[root@hadoop1 hadoop]# sbin/hadoop-daemon.sh  start namenode
在nn2 上同步nn1的元数据信息,并启动
[root@hadoop2 hadoop]#  bin/hdfs namenode -bootstrapStandby
[root@hadoop2 hadoop]# sbin/hadoop-daemon.sh  start namenode

查看web页面

/images/posts/wps1.jpg

/images/posts/image-20210516150936259.png

1
2
3
4
5
6
7
在nn1上启动所有的datanode
[root@hadoop1 hadoop]# sbin/hadoop-daemons.sh start datanode
将nn1切换为active
[root@hadoop1 hadoop]# bin/hdfs haadmin -transitionToActive nn1
查看nn1是否为active
[root@hadoop1 hadoop]# bin/hdfs haadmin -getServiceState nn1
active
配置HDFS-HA自动故障转移
 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
1、在etc/hadoop/hdfs-site.xml 添加配置
<!--自动故障转移配置-->
     <property>
       <name>dfs.ha.automatic-failover.enabled</name>
       <value>true</value>
     </property>

2、etc/hadoop/core-site.xml 添加配置
<!--自动故障转义的zookeeper配置-->
 <property>
   <name>ha.zookeeper.quorum</name>
   <value>192.168.110.160:2181,192.168.110.161:2181,192.168.110.162:2181</value>
 </property>
同步到hadoop2、3
[root@hadoop1 hadoop]# rsync -alv --delete  etc/ 192.168.110.166:/opt/hadoop/etc/
[root@hadoop1 hadoop]# rsync -alv --delete  etc/ 192.168.110.167:/opt/hadoop/etc/

3、关闭所有HDFS服务
由于我们使用的是root用户,所以需要在关闭脚本里面添加环境变量
[root@hadoop1 hadoop]# vim sbin/stop-dfs.sh
#!/usr/bin/env bash
HDFS_DATANODE_USER=root
HADOOP_SECURE_DN_USER=root
HDFS_ZKFC_USER=root
HDFS_NAMENODE_USER=root
HDFS_SECONDARYNAMENODE_USER=root
HDFS_JOURNALNODE_USER=root

[root@hadoop1 hadoop]# sbin/stop-dfs.sh

4 初始化HA在Zookeeper中的状态
[root@hadoop1 hadoop]# bin/hdfs zkfc -formatZK

5 启动所有HDFS服务,同样也需要在启动脚本添加环境变量
[root@hadoop1 hadoop]# vim sbin/start-dfs.sh
#!/usr/bin/env bash
HDFS_DATANODE_USER=root
HADOOP_SECURE_DN_USER=root
HDFS_ZKFC_USER=root
HDFS_NAMENODE_USER=root
HDFS_SECONDARYNAMENODE_USER=root
HDFS_JOURNALNODE_USER=root

[root@hadoop1 hadoop]# sbin/start-dfs.sh

注意在测试自动切换之前需要安装系统工具,否则无法自动切换,namenode节点都需要安装
yum install psmisc 具体原因估计切换脚本使用的killall来杀进程的

6、测试,关闭nn1的namenode,看nn2是否自动提升为active
[root@hadoop1 hadoop]# jps
22000 DFSZKFailoverController
21498 DataNode
23578 NameNode
23757 Jps
21759 JournalNode
[root@hadoop1 hadoop]# kill -9 23578

网页查看nn2

/images/posts/image-20210516151103747.png

可以看到自动升级为了acticve状态

YARN-HA配置
1、YARN-HA工作机制

官方文档:

https://hadoop.apache.org/docs/stable/hadoop-yarn/hadoop-yarn-site/ResourceManagerHA.html

工作机制:

/images/posts/wps2.jpg

配置YARN-HA集群

修改配置 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
51
52
53
54
55
56
57
58
59
 <!--启动resourcemanager ha-->
    <property>
      <name>yarn.resourcemanager.ha.enabled</name>
      <value>true</value>
    </property>
    <!--声明两台resourcemanager的地址-->
    <property>
      <name>yarn.resourcemanager.cluster-id</name>
      <value>cluster1</value>
    </property>
    <property>
      <name>yarn.resourcemanager.ha.rm-ids</name>
      <value>rm1,rm2</value>
    </property>
    <property>
      <name>yarn.resourcemanager.hostname.rm1</name>
      <value>192.168.110.167</value>
    </property>
    <property>
      <name>yarn.resourcemanager.hostname.rm2</name>
      <value>192.168.110.166</value>
    </property>
    <property>
      <name>yarn.resourcemanager.webapp.address.rm1</name>
      <value>192.168.110.167:8088</value>
    </property>
    <property>
      <name>yarn.resourcemanager.webapp.address.rm2</name>
      <value>192.168.110.166:8088</value>
    </property>
    <property>
      <name>hadoop.zk.address</name>
      <value>192.168.110.160:2181,192.168.110.161:2181,192.168.110.162:2181</value>
    </property>



注意由于使用的root,所以需要在启动和停止脚本添加环境变量
sbin/stop-yarn.sh / sbin/start-yarn.sh
YARN_RESOURCEMANAGER_USER=root
YARN_NODEMANAGER_USER=root

将配置同步到其他节点
[root@hadoop1 hadoop]# rsync -alv --delete  etc/ 192.168.110.166:/opt/hadoop/etc/
[root@hadoop1 hadoop]# rsync -alv --delete  etc/ 192.168.110.167:/opt/hadoop/etc/

启动yarn
[root@hadoop1 hadoop]# sbin/start-yarn.sh
测试,通过网页访问发现,现在192.168.110.166:8088/cluster 可以访问,说明当前是active状态
[root@hadoop2 hadoop]# jps
21394 NodeManager
18868 JournalNode
18997 DFSZKFailoverController
21305 ResourceManager
21769 Jps
18766 DataNode
20350 NameNode
You have new mail in /var/spool/mail/root
[root@hadoop2 hadoop]# kill -9 21305

访问hadoop3上的8088

/images/posts/image-20210516151319705.png

1
2
3
4
5
或者可以通过命令查看活跃状态
[root@hadoop1 hadoop]# bin/yarn  rmadmin -getServiceState rm1
actice
[root@hadoop1 hadoop]# bin/yarn  rmadmin -getServiceState rm2
standby

安装hbase

下载hbase并解压

下载地址:

https://mirrors.tuna.tsinghua.edu.cn/apache/hbase/2.3.3/hbase-2.3.3-bin.tar.gz

1
2
3
[root@hadoop1 ~]# tar -xf hbase-2.3.3-bin.tar.gz  -C /opt/

[root@hadoop1 ~]# mv /opt/hbase-2.3.3-bin /opt/hbase

HBase的配置文件

 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
Hbase对应的配置文件修改
1、/opt/hbase/conf/hbase-env.sh 修改内容
[root@hadoop1 hbase]# egrep -v '^#|^$' /opt/hbase/conf/hbase-env.sh
export JAVA_HOME=/opt/jdk1.8.0_191
export HBASE_MANAGES_ZK=false

2、/opt/hbase/conf/hbase-site.xml内容修改:
  <!--设置HRegionServers共享的HDFS目录,必须设为在hdfs-site中dfs.nameservices的值:mycluster,而且不能有端口号,该属性会让hmaster在hdfs集群上创建一个hbase的目录-->
  <property>
    <name>hbase.rootdir</name>
    <value>hdfs://mycluster/hbase</value>
  </property>
  <!--启用分布式模式-->
  <property>
    <name>hbase.cluster.distributed</name>
    <value>true</value>
  </property>
  <!--启用分布式模式时,以下的流能力加强需设为false-->
  <property>
    <name>hbase.unsafe.stream.capability.enforce</name>
    <value>false</value>
  </property>
  <!--指定zookeeper集群-->
  <property>
    <name>hbase.zookeeper.quorum</name>
    <value>192.168.110.160:2181,192.168.110.161:2181,192.168.110.162:2181</value>
  </property>
  <!--0.98后的新变动,之前版本没有.port,默认端口为60000-->
  <property>
    <name>hbase.master.port</name>
    <value>16000</value>
  </property>

如果zookeeper也是装在这台机器上,可以独立指定zookeeper的数据目录
  <property>
    <name>hbase.zookeeper.property.dataDir</name>
    <value>/opt/zookeeper/zkData</value>
  </property>

3、/opt/hbase/conf/regionservers 
hadoop1
hadoop2
hadoop3

4、软连接hadoop配置文件到hbase
[root@hadoop1 hbase]# ln -sf /opt/hadoop/etc/hadoop/core-site.xml  /opt/hbase/conf/core-site.xml
[root@hadoop1 hbase]# ln -sf /opt/hadoop/etc/hadoop/hdfs-site.xml  /opt/hbase/conf/hdfs-site.xml

5、hbase配置高可用hmaster,需要创建配置文件backup-masters
[root@hadoop1 hbase]# cat /opt/hbase/conf/backup-masters 
192.168.110.167

6、将hbase发送到其他机器hadoop2/3
[root@hadoop1 hbase]# rsync -avl /opt/hbase 192.168.110.166:/opt/
[root@hadoop1 hbase]# rsync -avl /opt/hbase 192.168.110.167:/opt/

7、hbase服务启动
启动方式1
[root@hadoop1 hbase]# /opt/hbase/bin/hbase-daemon.sh start master
[root@hadoop1 hbase]# /opt/hbase/bin/hbase-daemon.sh start regionserver
对应的关闭方式
/opt/hbase/bin/hbase-daemon.sh stop master
/opt/hbase/bin/hbase-daemon.sh stop regionserver

启动方式2
/opt/hbase/bin/start-hbase.sh
对应的关闭方式
/opt/hbase/bin/stop-hbase.sh

网页访问

/images/posts/image-20210516151553668.png

安装sqoop

下载sqoop,并解压

下载sqoop

https://mirrors.tuna.tsinghua.edu.cn/apache/sqoop/1.4.7/sqoop-1.4.7.bin__hadoop-2.6.0.tar.gz

1
2
3
[root@hadoop1 ~]# tar -xf sqoop-1.4.7.bin__hadoop-2.6.0.tar.gz  -C /opt/
[root@hadoop1 ~]# cd /opt/
[root@hadoop1 opt]# mv sqoop-1.4.7.bin__hadoop-2.6.0/ sqoop

修改配置文件

1
2
3
4
5
6
重命名配置文件
[root@hadoop1 opt]# mv /opt/sqoop/conf/sqoop-env-template.sh /opt/sqoop/conf/sqoop-env.sh

修改配置文件 /opt/sqoop/conf/sqoop-env.sh,添加配置
export HADOOP_COMMON_HOME=/opt/hadoop
export HBASE_HOME=/opt/hbase

尝试连接访问

1
 /opt/sqoop/bin/sqoop list-tables --connect jdbc:mysql://192.168.110.95:3306/ --username DemoCloudUser --password 123456@lcb

出现如下图的报错

/images/posts/wps3.jpg

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
报错原因已经很明显了,没有找到类org.apache.commons.lang.StringUtils
也就是说sqoop中没有这个类或者这个类的jar包

下载地址:
http://mirror.bit.edu.cn/apache//commons/lang/binaries/
注意:尽量下载2版本,因为sqoop版本大部分支持2
[root@hadoop1 ~]# tar -xf commons-lang-2.6-bin.tar.gz
[root@hadoop1 commons-lang-2.6]# cp *.jar /opt/sqoop/lib/
再次执行
[root@hadoop1 commons-lang-2.6]# /opt/sqoop/bin/sqoop list-tables --connect jdbc:mysql://192.168.110.95:3306/AllianceCloud --username DemoCloudUser --password 123456@lcb

/images/posts/image-20210516152121402.png

安装flume

下载flume,并解压

下载地址:

https://mirrors.tuna.tsinghua.edu.cn/apache/flume/1.9.0/apache-flume-1.9.0-bin.tar.gz

1
2
3
[root@hadoop1 ~]# tar -xf apache-flume-1.9.0-bin.tar.gz  -C /opt/
[root@hadoop1 ~]# cd /opt/
[root@hadoop1 opt]# mv apache-flume-1.9.0-bin/ flume

下载Flink,并解压

下载地址:

https://mirrors.tuna.tsinghua.edu.cn/apache/flink/flink-1.12.0/flink-1.12.0-bin-scala_2.11.tgz

1
2
3
[root@hadoop1 ~]# tar -xf flink-1.12.0-bin-scala_2.11.tgz  -C /opt/
[root@hadoop1 ~]# cd /opt/
[root@hadoop1 opt]# mv flink-1.12.0/ flink

JobManager高可用配置

 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
[root@hadoop1 flink]# cd /opt/hadoop/etc/hadoop/
在yarn-site.xml 中添加配置
    <property>
      <name>yarn.resourcemanager.am.max-attempts</name>
      <value>4</value>
      <description>
        The maximum number of application master execution attempts.
      </description>
</property>
分发到其他机器
[root@hadoop1 hadoop]# rsync -alv . 192.168.110.166:/opt/hadoop/etc/hadoop/
[root@hadoop1 hadoop]# rsync -alv . 192.168.110.167:/opt/hadoop/etc/hadoop/

重启yarn
[root@hadoop1 hadoop]# ../../sbin/stop-yarn.sh
[root@hadoop1 hadoop]# ../../sbin/start-yarn.sh

配置flink配置文件
[root@hadoop1 hadoop]# cd /opt/flink/conf/
[root@hadoop1 conf]# vim flink-conf.yaml
#jobmanager.rpc.address: localhost 注释掉
#添加一下内容
high-availability: zookeeper
high-availability.zookeeper.quorum: 192.168.110.160:2181,192.168.110.161:2181,192.168.110.162:2181
high-availability.storageDir: hdfs:///flink/recovery
high-availability.zookeeper.path.root: /flink
yarn.application-attempts: 10

修改masters文件
[root@hadoop1 conf]# vim masters
192.168.110.165
192.168.110.166

修改workers文件
192.168.110.165
192.168.110.166
192.168.110.167

分发到hadoop2/3机器上
[root@hadoop1 conf]# rsync -alv /opt/flink 192.168.110.166:/opt/
[root@hadoop1 conf]# rsync -alv /opt/flink 192.168.110.167:/opt/

配置环境变量
[root@hadoop1 conf]# vim /etc/profile
添加如下配置
#flink环境变量配置
export FLINK_HOME=/opt/flink/
export PATH=$PATH:$FLINK_HOME/bin

#flink on yarn配置
HADOOP_CONF_DIR=/opt/hadoop/
export PATH=$PATH:$HADOOP_CONF_DIR/bin:$HADOOP_CONF_DIR/sbin
export HADOOP_CLASSPATH=`/opt/hadoop/bin/hadoop classpath`

分发到hadoop2/3上
[root@hadoop1 conf]# rsync -avl --delete /etc/profile 192.168.110.166:/etc/
[root@hadoop1 conf]# rsync -avl --delete /etc/profile 192.168.110.167:/etc/

启动flink
[root@hadoop1 conf]# ../bin/start-cluster.sh

关闭flink 
[root@hadoop1 conf]# ../bin/stop-cluster.sh


测试

向yarn申请资源并提交任务 Session模式有两种 第一种attached mode ,也是默认的,客户端提交给yarn,前台运行,如下

1
2
3
4
5
6
1、申请资源
[root@hadoop1 conf]# ../bin/yarn-session.sh -nm wordCount -n 2
2、查看申请的资源
使用命令查看
[root@hadoop1 flink]# /opt/hadoop/bin/yarn application --list
3、使用webui查看,用命令查看的时候会有一个Tracking-URL地址

/images/posts/image-20210516152617048.png

第二种 detached mode (-d or –detached),客户端提交给yarn,客户端直接返回,属于后台运行

1
2
[root@hadoop1 flink]# bin/yarn-session.sh --detached

/images/posts/image-20210516152700645.png

安装Zeppelin

下载Zepplin,并解压

下载地址:

https://mirrors.tuna.tsinghua.edu.cn/apache/zeppelin/zeppelin-0.9.0-preview2/zeppelin-0.9.0-preview2-bin-all.tgz

1
2
3
[root@hadoop1 ~]# tar -xf zeppelin-0.9.0-preview2-bin-all.tgz  -C /opt/
[root@hadoop1 ~]# cd /opt/
[root@hadoop1 opt]# mv zeppelin-0.9.0-preview2-bin-all/ zeppelin

配置zeppelin

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
[root@hadoop1 opt]# cp zeppelin-site.xml.template zeppelin-site.xml
[root@hadoop1 opt]# vim zeppelin-site.xml
修改监听地址
<property>
  <name>zeppelin.server.addr</name>
  <value>0.0.0.0</value> 
  <description>Server binding address</description>
</property>

启动
[root@hadoop1 opt]# ../bin/zeppelin-daemon.sh start
关闭
[root@hadoop1 opt]# ../bin/zeppelin-daemon.sh stop
与flink集成(注意目前只支持flink1.10版本),配置interpreter

/images/posts/image-20210516152950041.png

1
2
3
4
5
6
7
配置环境变量

FLINK_HOME         /opt/flink

flink.execution.mode    yarn

HADOOP_CONF_DIR      /opt/hadoop/etc/hadoop

/images/posts/wps4.jpg

/images/posts/image-20210516153031596.png