安装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页面
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
可以看到自动升级为了acticve状态
YARN-HA配置
1、YARN-HA工作机制
官方文档:
https://hadoop.apache.org/docs/stable/hadoop-yarn/hadoop-yarn-site/ResourceManagerHA.html
工作机制:
配置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
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
|
网页访问
安装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
|
出现如下图的报错
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
|
安装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
下载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地址
|
第二种 detached mode (-d or –detached),客户端提交给yarn,客户端直接返回,属于后台运行
1
2
|
[root@hadoop1 flink]# bin/yarn-session.sh --detached
|
安装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
|
1
2
3
4
5
6
7
|
配置环境变量
FLINK_HOME /opt/flink
flink.execution.mode yarn
HADOOP_CONF_DIR /opt/hadoop/etc/hadoop
|