大数据集群服务部署
本文为大数据集群服务的部署文档
包括zookeeper服务部署,Hadoop服务部署,Spark服务部署,Kafka服务部署,Hbase服务部署,Hive服务部署
文档写于2022年初作为学习笔记使用。
系统版本:CentOS Linux release 7.9.2009 (Core)
内核版本:3.10.0-1160.el7.x86_64
内存:4GB
处理器数量(p):2
每个处理器的内核数量(c):2
硬盘:30GB
前置:主机相关配置
Hostname | IPADDR | NETMASK | GATWAY | DNS1 | ROLE | USR | PASSWORD |
---|---|---|---|---|---|---|---|
master | 192.168.88.135 | 255.255.255.0 | 192.168.88.2 | 8.8.8.8 | NN DN RM NM | root | Ccu2021@ |
slave1 | 192.168.88.136 | 255.255.255.0 | 192.168.88.2 | 8.8.8.8 | SNN DN NM | root | Ccu2021@ |
slave2 | 192.168.88.137 | 255.255.255.0 | 192.168.88.2 | 8.8.8.8 | DN NM | root | Ccu2021@ |
规划:所有组件包均在 /export/server 文件目录下
组件 | 版本 | 启动命令 | WebUI |
---|---|---|---|
zookeeper | zookeeper-3.4.10 后期改为zookeeper-3.7.0 | zkServer-all.sh start | 暂无 |
hadoop | hadoop-3.3.0 | start-all.sh | http://master:9870/ http://master:8088/ |
spark | spark-3.2.0 | cd /export/server/spark/bin ./pyspark | http://master:4040/ |
spark-history | 同spark版本 | cd /export/server/spark/sbin ./start-history-server.sh | http://master:18080/ |
hbase | hbase-1.2.4 | cd /export/server/hbase/bin ./start-hbase.sh | http://master:16010/master-status |
Mysql | MySQL5.7 | 启动:/etc/init.d/mysqld start 登录:mysql -u root -p | 暂无 |
jdk | jdk_1.8.0_241 | 暂无 | 暂无 |
kafka | kafka_2.11-2.0.0 | kafka-all.sh start | 暂无 |
hadoop-history | 同hadoop版本 | cd /export/server/hadoop-3.3.0/sbin ./mr-jobhistory-daemon.sh start historyserver | http://master:19888/ |
python | python-3.8.8 | python | 暂无 |
hive | hive-3.0.0 | hive | 暂无 |
网络环境配置
更改三台主机的主机名
1
2
3
4
5
6
7
8# master
echo "master" >/etc/hostname
# slave1
echo "slave1" >/etc/hostname
# slave2
echo "slave2" >/etc/hostname更改网络配置(注:三台主机都需要做)
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# 进入路径 /etc/sysconfig/network-scripts 编辑ifcfg-ens33文件
vim /etc/sysconfig/network-scripts/ifcfg-ens33
# 配置ONBOOT=yes:表示启动这块网卡
# 配置BOOTPROTO=static:表示静态路由协议,可以保持IP固定
# 配置IPADDR:表示虚拟机的IP地址,这里设置的IP地址要与前面IP映射配置时的IP地址一致,否则无法通过主机名找到对应IP;
# 配置GATEWAY:表示虚拟机网关,通常都是将IP地址最后一个位数变为2;
# 配置NETMASK:表示虚拟机子网掩码,通常都是255.255.255.0;
# 配置DNS1:表示域名解析器,此处采用Google提供的免费DNS服务器88.8.8(也可以设置为PC端电脑对应的DNS)。
# master
IPADDR=192.168.88.135
NETMASK=255.255.255.0
GATEWAY=192.168.88.2
DNS1=8.8.8.8
# slave1
IPADDR=192.168.88.135
NETMASK=255.255.255.0
GATEWAY=192.168.88.2
DNS1=8.8.8.8
# slave2
IPADDR=192.168.88.135
NETMASK=255.255.255.0
GATEWAY=192.168.88.2
DNS1=8.8.8.8前两步骤做完后三台主机进行重启
1
shutdown -r 0
测试(注:三台主机都做ping,看是否ping通外网)
1
ping www.baidu.com -c5
hosts映射
打开一个hosts映射文件,为了保证后续相互关联的虚拟机能够通过主机名进行访问,根据实际需求配置对应的IP和主机名映射,分别将主机名master、slave1、slave2 与IP地址 192.168.88.134、192.168.88.135 和192.168.88.136进行了匹配映射(这里通常要根据实际需要,将要搭建的集群主机都配置主机名和IP映射)。
编辑 /etc/hosts 文件
1
vim /etc/hosts
内容修改为(注:三台主机内容一样)
1
2
3
4
5
6127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.88.135 master
192.168.88.136 slave1
192.168.88.137 slave2
集群配置时间同步
定义:网络时间服务协议(Network Time Protocol, NTP),是用来使计算机时间同步化的一种协议,它可以使计算机对其服务器做时间同步化。
原因:时间同步服务器,顾名思义就是来同步时间的。在集群中同步时间有着十分重要的作用,负载均衡集群或高可用集群如果时间不一致,在服务器之间的数据误差就会很大,寻找数据便会成为一件棘手的事情。若是时间无法同步,那么就算是备份了数据,你也可能无法在正确的时间将正确的数据备份。那损失可就大了。
yum 安装 ntp (注:三台主机做同样操作)
1
yum install ntp -y
开机自启动ntp
1
systemctl enable ntpd && systemctl start ntpd
1
2
3结果显示:
[root@master ~]# systemctl enable ntpd && systemctl start ntpd
Created symlink from /etc/systemd/system/multi-user.target.wants/ntpd.service to /usr/lib/systemd/system/ntpd.service.授权 192.168.88.0-192.168.10.255 网段上的所有机器可以从这台机器上查询和同步时间
1
2
3
4
5
6
7
8
9
10
11
12# 查看ntp配置文件
ls -al /etc | grep 'ntp'
# 显示内容
[root@master etc]# ls -al /etc | grep 'ntp'
drwxr-xr-x 3 root root 52 3月 10 18:25 ntp
-rw-r--r-- 1 root root 2041 3月 10 20:03 ntp.conf
# 编辑内容添加 restrict 192.168.88.0 mask 255.255.255.0 (注:在17行左右)
vim /etc/ntp.conf
16 # Hosts on local network are less restricted.
17 restrict 192.168.88.0 mask 255.255.255.0集群在局域网中,不使用其他互联网上的时间
1
2
3
4
5
6
7
8
9
10
11
12# 修改 /etc/ntpd.conf 内容
vim /etc/ntp.conf
# 将21-24行内容注释掉(注:原来未注释)
21 #server 0.centos.pool.ntp.org iburst
22 #server 1.centos.pool.ntp.org iburst
23 #server 2.centos.pool.ntp.org iburst
24 #server 3.centos.pool.ntp.org iburst
# 在25行添加 server masterIP 即为:
server 192.168.88.135
server 127.127.1.0 iburstslave1 和 slave2 相同操作
三台主机同时执行
1
systemctl enable ntpd && systemctl start ntpd
查看ntp端口
1
2
3
4
5
6
7[root@master etc]# ss -tupln | grep '123'
udp UNCONN 0 0 192.168.88.135:123 *:* users:(("ntpd",pid=54823,fd=19))
udp UNCONN 0 0 127.0.0.1:123 *:* users:(("ntpd",pid=54823,fd=18))
udp UNCONN 0 0 *:123 *:* users:(("ntpd",pid=54823,fd=16))
udp UNCONN 0 0 [fe80::2832:5f98:5bc0:e621]%ens33:123 [::]:* users:(("ntpd",pid=54823,fd=23))
udp UNCONN 0 0 [::1]:123 [::]:* users:(("ntpd",pid=54823,fd=20))
udp UNCONN 0 0 [::]:123 [::]:* users:(("ntpd",pid=54823,fd=17))配置完成后三台主机都需要重启
1
shutdown -r 0
三台主机同时执行(注:此过程需要5分钟左右)
1
ntpstat
ssh免密钥登陆
SSH免密钥登陆可以更加方便的实现不同计算机之间的连接和切换
master 生成公钥私钥 (一路回车)
1
ssh-keygen
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22#结果显示:
[root@master .ssh]# ssh-keygen
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /root/.ssh/id_rsa.
Your public key has been saved in /root/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:QUAgFH5KBc/Erlf1JWSBbKeEepPJqMBqpWbc02/uFj8 root@master
The key's randomart image is:
+---[RSA 2048]----+
| .=++oo+.o+. |
| . *. ..*.o . |
|. o.++ *.+ o |
|.o ++ B ... |
|o.=o.o .S |
|.*oo.. . |
|+ .. . o |
| + E |
| =o . |
+----[SHA256]-----+查看隐藏的 .ssh 文件
1
la -al .ssh
1
2
3
4
5
6
7
8
9# 结果显示
[root@master ~]# ls -al .ssh/
总用量 16
drwx------ 2 root root 80 3月 10 21:52 .
dr-xr-x---. 4 root root 175 3月 10 21:45 ..
-rw------- 1 root root 393 3月 10 21:52 authorized_keys
-rw------- 1 root root 1675 3月 10 21:48 id_rsa
-rw-r--r-- 1 root root 393 3月 10 21:48 id_rsa.pub
-rw-r--r-- 1 root root 366 3月 10 21:54 known_hostsmaster 配置免密登录到master slave1 slave2
1
2
3ssh-copy-id master
ssh-copy-id slave1
ssh-copy-id slave2
安装配置 jdk
编译环境软件安装目录
1
mkdir -p /export/server
JDK 1.8安装 上传 jdk-8u241-linux-x64.tar.gz到/export/server/目录下 并解压文件
1
tar -zxvf jdk-8u241-linux-x64.tar.gz
配置环境变量
1
2
3
4
5vim /etc/profile
export JAVA_HOME=/export/server/jdk1.8.0_241
export PATH=$PATH:$JAVA_HOME/bin
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar重新加载环境变量文件
1
source /etc/profile
查看 java 版本号
1
java -version
1
2
3
4
5结果显示:
[root@master jdk1.8.0_241]# java -version
java version "1.8.0_241"
Java(TM) SE Runtime Environment (build 1.8.0_241-b07)
Java HotSpot(TM) 64-Bit Server VM (build 25.241-b07, mixed mode)master 节点将 java 传输到 slave1 和 slave2
1
2scp -r /export/server/jdk1.8.0_241/ root@slave1:/export/server/
scp -r /export/server/jdk1.8.0_241/ root@slave2:/export/server/配置 slave1 和 slave2 的 jdk 环境变量(注:和上方 master 的配置方法一样)
在 master slave1 和slave2 创建软连接
1
2
3cd /export/server
ln -s jdk1.8.0_241/ jdk重新加载环境变量文件
1
source /etc/profile
zookeeper安装配置
配置主机名和IP的映射关系,修改 /etc/hosts 文件,添加 master.root slave1.root slave2.root
1
2
3
4
5
6
7
8
9vim /etc/hosts
#结果显示
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.88.135 master master.root
192.168.88.136 slave1 slave1.root
192.168.88.137 slave2 slave2.rootzookeeper安装 上传 zookeeper-3.4.10.tar.gz到/export/server/目录下 并解压文件
1
2
3cd /export/server/
tar -zxvf zookeeper-3.4.10.tar.gz在 /export/server 目录下创建软连接
1
2
3cd /export/server
ln -s zookeeper-3.4.10/ zookeeper进入 /export/server/zookeeper/conf/ 将 zoo_sample.cfg 文件复制为新文件 zoo.cfg
1
2
3cd /export/server/zookeeper/conf/
cp zoo_sample.cfg zoo.cfg接上步给 zoo.cfg 添加内容
1
2
3
4
5
6
7
8
9
10
11
12
13
14#Zookeeper的数据存放目录
dataDir=/export/server/zookeeper/zkdatas
# 保留多少个快照
autopurge.snapRetainCount=3
# 日志多少小时清理一次
autopurge.purgeInterval=1
# 集群中服务器地址
server.1=master:2888:3888
server.2=slave1:2888:3888
server.3=slave2:2888:3888进入 /export/server/zookeeper/zkdatas 目录在此目录下创建 myid 文件,将 1 写入进去
1
2
3
4
5cd /export/server/zookeeper/zkdata
touch myid
echo '1' > myid将 master 节点中 /export/server/zookeeper-3.4.10 路径下内容推送给slave1 和 slave2
1
2
3scp -r /export/server/zookeeper-3.4.10/ slave1:$PWD
scp -r /export/server/zookeeper-3.4.10/ slave2:$PWD推送成功后,分别在 slave1 和 slave2 上创建软连接
1
ln -s zookeeper-3.4.10/ zookeeper
接上步推送完成后将 slave1 和 slave2 的 /export/server/zookeeper/zkdatas/ 文件夹下的 myid 中的内容分别改为 2 和 3
1
2
3
4
5
6
7
8
9cd /export/server/zookeeper/zkdatas/
结果显示:
[root@slave1 zkdatas]# vim myid
[root@slave1 zkdatas]# more myid
2
[root@slave2 zkdatas]# vim myid
[root@slave2 zkdatas]# more myid
3配置zookeeper的环境变量(注:三台主机都需要配置)
1
2
3
4
5vim /etc/profile
# zookeeper 环境变量
export ZOOKEEPER_HOME=/export/server/zookeeper
export PATH=$PATH:$ZOOKEEPER_HOME/bin重新加载环境变量文件
1
source /etc/profile
进入 /export/server/zookeeper-3.4.10/bin 目录下启动 zkServer.sh 脚本 (注:三台都需要做)
1
2
3cd /export/server/zookeeper-3.4.10/bin
zkServer.sh start1
2
3
4
5结果显示:
[root@master bin]# ./zkServer.sh start
ZooKeeper JMX enabled by default
Using config: /export/server/zookeeper-3.4.10/bin/../conf/zoo.cfg
Starting zookeeper ... STARTED查看 zookeeper 的状态
1
zkServer.sh status
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15结果显示:
[root@master server]# zkServer.sh status
ZooKeeper JMX enabled by default
Using config: /export/server/zookeeper-3.4.10/bin/../conf/zoo.cfg
Mode: follower
[root@slave1 server]# zkServer.sh status
ZooKeeper JMX enabled by default
Using config: /export/server/zookeeper-3.4.10/bin/../conf/zoo.cfg
Mode: follower
[root@slave2 conf]# zkServer.sh status
ZooKeeper JMX enabled by default
Using config: /export/server/zookeeper-3.4.10/bin/../conf/zoo.cfg
Mode: leader1
jps
1
2
3
4
5
6
7
8
9
10
11
12结果显示:
[root@master server]# jps
125348 QuorumPeerMain
16311 Jps
[root@slave1 server]# jps
126688 QuorumPeerMain
17685 Jps
[root@slave2 conf]# jps
126733 QuorumPeerMain
17727 Jps脚本一键启动
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
35vim zkServer.sh
#!/bin/bash
if [ $# -eq 0 ] ;
then
echo "please input param:start stop"
else
if [ $1 = start ] ;then
echo "${1}ing master"
ssh master "source /etc/profile;/export/server/zookeeper/bin/zkServer.sh start"
for i in {1..2}
do
echo "${1}ping slave${i}"
ssh slave${i} "source /etc/profile;/export/server/zookeeper/bin/zkServer.sh start"
done
fi
if [ $1 = stop ];then
echo "${1}ping master "
ssh master "source /etc/profile;/export/server/zookeeper/bin/zkServer.sh stop"
for i in {1..2}
do
echo "${1}ping slave${i}"
ssh slave${i} "source /etc/profile;/export/server/zookeeper/bin/zkServer.sh stop"
done
fi
if [ $1 = status ];then
echo "${1}ing master"
ssh master "source /etc/profile;/export/server/zookeeper/bin/zkServer.sh status"
for i in {1..2}
do
echo "${1}ping slave${i}"
ssh slave${i} "source /etc/profile;/export/server/zookeeper/bin/zkServer.sh status"
done
fi
fi1
2# 将文件放在 /bin 目录下
chmod +x zkServer-all.sh && zkServer-all.sh
Hadoop 安装配置
把 hadoop-3.3.0-Centos7-64-with-snappy.tar.gz 上传到 /export/server 并解压文件
1
tar -zxvf hadoop-3.3.0-Centos7-64-with-snappy.tar.gz
修改配置文件(进入路径 /export/server/hadoop-3.3.0/etc/hadoop)
1
cd /export/server/hadoop-3.3.0/etc/hadoop
hadoop-env.sh
1
2
3
4
5
6
7#文件最后添加
export JAVA_HOME=/export/server/jdk1.8.0_241
export HDFS_NAMENODE_USER=root
export HDFS_DATANODE_USER=root
export HDFS_SECONDARYNAMENODE_USER=root
export YARN_RESOURCEMANAGER_USER=root
export YARN_NODEMANAGER_USER=root
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<!-- 设置默认使用的文件系统 Hadoop支持file、HDFS、GFS、ali|Amazon云等文件系统 -->
<property>
<name>fs.defaultFS</name>
<value>hdfs://master:8020</value>
</property>
<!-- 设置Hadoop本地保存数据路径 -->
<property>
<name>hadoop.tmp.dir</name>
<value>/export/data/hadoop-3.3.0</value>
</property>
<!-- 设置HDFS web UI用户身份 -->
<property>
<name>hadoop.http.staticuser.user</name>
<value>root</value>
</property>
<!-- 整合hive 用户代理设置 -->
<property>
<name>hadoop.proxyuser.root.hosts</name>
<value>*</value>
</property>
<property>
<name>hadoop.proxyuser.root.groups</name>
<value>*</value>
</property>
<!-- 文件系统垃圾桶保存时间 -->
<property>
<name>fs.trash.interval</name>
<value>1440</value>
</property>hdfs-site.xml
1
2
3
4
5<!-- 设置SNN进程运行机器位置信息 -->
<property>
<name>dfs.namenode.secondary.http-address</name>
<value>slave1:9868</value>
</property>mapred-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<!-- 设置MR程序默认运行模式: yarn集群模式 local本地模式 -->
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
<!-- MR程序历史服务地址 -->
<property>
<name>mapreduce.jobhistory.address</name>
<value>master:10020</value>
</property>
<!-- MR程序历史服务器web端地址 -->
<property>
<name>mapreduce.jobhistory.webapp.address</name>
<value>master:19888</value>
</property>
<property>
<name>yarn.app.mapreduce.am.env</name>
<value>HADOOP_MAPRED_HOME=${HADOOP_HOME}</value>
</property>
<property>
<name>mapreduce.map.env</name>
<value>HADOOP_MAPRED_HOME=${HADOOP_HOME}</value>
</property>
<property>
<name>mapreduce.reduce.env</name>
<value>HADOOP_MAPRED_HOME=${HADOOP_HOME}</value>
</property>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<!-- 设置YARN集群主角色运行机器位置 -->
<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.nodemanager.pmem-check-enabled</name>
<value>false</value>
</property>
<!-- 是否将对容器实施虚拟内存限制。 -->
<property>
<name>yarn.nodemanager.vmem-check-enabled</name>
<value>false</value>
</property>
<!-- 开启日志聚集 -->
<property>
<name>yarn.log-aggregation-enable</name>
<value>true</value>
</property>
<!-- 设置yarn历史服务器地址 -->
<property>
<name>yarn.log.server.url</name>
<value>http://master:19888/jobhistory/logs</value>
</property>
<!-- 历史日志保存的时间 7天 -->
<property>
<name>yarn.log-aggregation.retain-seconds</name>
<value>604800</value>
</property>workers
1
2
3master
slave1
slave2分发同步hadoop安装包
1
2
3
4cd /export/server
scp -r hadoop-3.3.0 root@slave1:$PWD
scp -r hadoop-3.3.0 root@slave2:$PWD将hadoop添加到环境变量
1
2
3
4vim /etc/profile
export HADOOP_HOME=/export/server/hadoop-3.3.0
export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin重新加载环境变量文件
1
source /etc/profile
Hadoop集群启动
格式化namenode(只有首次启动需要格式化)
1
hdfs namenode -format
脚本一键启动
1
2
3
4
5
6
7
8
9
10
11
12
13[root@master ~]# start-dfs.sh
Starting namenodes on [master]
上一次登录:五 3月 11 21:27:24 CST 2022pts/0 上
Starting datanodes
上一次登录:五 3月 11 21:27:32 CST 2022pts/0 上
Starting secondary namenodes [slave1]
上一次登录:五 3月 11 21:27:35 CST 2022pts/0 上
[root@master ~]# start-yarn.sh
Starting resourcemanager
上一次登录:五 3月 11 21:27:41 CST 2022pts/0 上
Starting nodemanagers
上一次登录:五 3月 11 21:27:51 CST 2022pts/0 上启动后 输入 jps 查看
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17[root@master ~]# jps
127729 NameNode
127937 DataNode
14105 Jps
128812 NodeManager
128591 ResourceManager
[root@slave1 hadoop]# jps
121889 NodeManager
121559 SecondaryNameNode
7014 Jps
121369 DataNode
[root@slave2 hadoop]# jps
6673 Jps
121543 NodeManager
121098 DataNodeWEB页面
HDFS集群:
1
http://master:9870/
YARN集群:
1
http://master:8088/
Spark安装配置
Spark是专为大规模数据处理而设计的快速通用的计算引擎,其提供了一个全面、统一的框架用于管理各种不同性质的数据集和数据源的大数据处理的需求,大数据开发需掌握Spark基础、SparkJob、Spark RDD、spark job部署与资源分配、Spark shuffle、Spark内存管理、Spark广播变量、Spark SQL、Spark Streaming以及Spark ML等相关知识。
Spark-local模式
本地模式(单机) 本地模式就是以一个独立的进程,通过其内部的多个线程来模拟整个Spark运行时环境
Anaconda On Linux 安装 (单台服务器脚本安装)
安装上传安装包: 资料中提供的Anaconda3-2021.05-Linux-x86_64.sh文件到Linux服务器上安装位置在 /export/server:
1
2
3
4cd /export/server
# 运行文件
sh Anaconda3-2021.05-Linux-x86_64.sh1
2
3
4
5
6
7
8
9
10
11
12过程显示:
...
# 出现内容选 yes
Please answer 'yes' or 'no':'
>>> yes
...
# 出现添加路径:/export/server/anaconda3
...
[/root/anaconda3] >>> /export/server/anaconda3
PREFIX=/export/server/anaconda3
...安装完成后, 退出终端, 重新进来:
1
exit
1
2
3
4结果显示:
# 看到这个Base开头表明安装好了.base是默认的虚拟环境.
Last login: Tue Mar 15 15:28:59 2022 from 192.168.88.1
(base) [root@master ~]#创建虚拟环境 pyspark 基于 python3.8
1
conda create -n pyspark python=3.8
切换到虚拟环境内
1
conda activate pyspark
1
2
3结果显示:
(base) [root@master ~]# conda activate pyspark
(pyspark) [root@master ~]#在虚拟环境内安装包 (有WARNING不用管)
1
pip install pyhive pyspark jieba -i https://pypi.tuna.tsinghua.edu.cn/simple
spark 安装
将文件上传到 /export/server 里面 ,解压
1
2
3
4cd /export/server
# 解压
tar -zxvf spark-3.2.0-bin-hadoop3.2.tgz -C /export/server/建立软连接
1
ln -s /export/server/spark-3.2.0-bin-hadoop3.2 /export/server/spark
- 添加环境变量
1
2
3
4
5SPARK_HOME: 表示Spark安装路径在哪里
PYSPARK_PYTHON: 表示Spark想运行Python程序, 那么去哪里找python执行器
JAVA_HOME: 告知Spark Java在哪里
HADOOP_CONF_DIR: 告知Spark Hadoop的配置文件在哪里
HADOOP_HOME: 告知Spark Hadoop安装在哪里
修改环境变量
1
vim /etc/profile
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添加内容:
.....
注:此部分之前配置过,此部分不需要在配置
#JAVA_HOME
export JAVA_HOME=/export/server/jdk1.8.0_241
export PATH=$PATH:$JAVA_HOME/bin
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
#HADOOP_HOME
export HADOOP_HOME=/export/server/hadoop-3.3.0
export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
#ZOOKEEPER_HOME
export ZOOKEEPER_HOME=/export/server/zookeeper
export PATH=$PATH:$ZOOKEEPER_HOME/bin
.....
# 将以下部分添加进去
#SPARK_HOME
export SPARK_HOME=/export/server/spark
#HADOOP_CONF_DIR
export HADOOP_CONF_DIR=$HADOOP_HOME/etc/hadoop
#PYSPARK_PYTHON
export PYSPARK_PYTHON=/export/server/anaconda3/envs/pyspark/bin/python1
vim .bashrc
1
2
3
4
5内容添加进去:
#JAVA_HOME
export JAVA_HOME=/export/server/jdk1.8.0_241
#PYSPARK_PYTHON
export PYSPARK_PYTHON=/export/server/anaconda3/envs/pyspark/bin/python重新加载环境变量文件
进入 /export/server/anaconda3/envs/pyspark/bin/ 文件夹
1
cd /export/server/anaconda3/envs/pyspark/bin/
开启
1
./pyspark
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20结果显示:
(base) [root@master bin]# ./pyspark
Python 3.8.12 (default, Oct 12 2021, 13:49:34)
[GCC 7.5.0] :: Anaconda, Inc. on linux
Type "help", "copyright", "credits" or "license" for more information.
Setting default log level to "WARN".
To adjust logging level use sc.setLogLevel(newLevel). For SparkR, use setLogLevel(newLevel).
2022-03-15 20:37:04,612 WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable
Welcome to
____ __
/ __/__ ___ _____/ /__
_\ \/ _ \/ _ `/ __/ '_/
/__ / .__/\_,_/_/ /_/\_\ version 3.2.0
/_/
Using Python version 3.8.12 (default, Oct 12 2021 13:49:34)
Spark context Web UI available at http://master:4040
Spark context available as 'sc' (master = local[*], app id = local-1647347826262).
SparkSession available as 'spark'.
>>>查看WebUI界面
1
2
3浏览器访问:
http://master:4040/退出
1
conda deactivate
Spark-Standalone模式
Standalone模式(集群) Spark中的各个角色以独立进程的形式存在,并组成Spark集群环境
Anaconda On Linux 安装 (单台服务器脚本安装 注:在 slave1 和 slave2 上部署)
安装上传安装包: 资料中提供的Anaconda3-2021.05-Linux-x86_64.sh文件到Linux服务器上安装位置在 /export/server:
1
2
3
4cd /export/server
# 运行文件
sh Anaconda3-2021.05-Linux-x86_64.sh1
2
3
4
5
6
7
8
9
10
11
12过程显示:
...
# 出现内容选 yes
Please answer 'yes' or 'no':'
>>> yes
...
# 出现添加路径:/export/server/anaconda3
...
[/root/anaconda3] >>> /export/server/anaconda3
PREFIX=/export/server/anaconda3
...安装完成后, 退出终端, 重新进来:
1
exit
1
2
3
4结果显示:
# 看到这个Base开头表明安装好了.base是默认的虚拟环境.
Last login: Tue Mar 15 15:28:59 2022 from 192.168.88.1
(base) [root@master ~]#在 master 节点上把 ./bashrc 和 profile 分发给 slave1 和 slave2
1
2
3
4
5
6
7#分发 .bashrc :
scp ~/.bashrc root@slave1:~/
scp ~/.bashrc root@slave2:~/
#分发 profile :
scp /etc/profile/ root@slave1:/etc/
scp /etc/profile/ root@slave2:/etc/创建虚拟环境 pyspark 基于 python3.8
1
conda create -n pyspark python=3.8
切换到虚拟环境内
1
conda activate pyspark
1
2
3结果显示:
(base) [root@master ~]# conda activate pyspark
(pyspark) [root@master ~]#在虚拟环境内安装包 (有WARNING不用管)
1
pip install pyhive pyspark jieba -i https://pypi.tuna.tsinghua.edu.cn/simple
master 节点节点进入 /export/server/spark/conf 修改以下配置文件
1
cd /export/server/spark/conf
将文件 workers.template 改名为 workers,并配置文件内容
1
2
3
4
5
6
7
8
9mv workers.template workers
vim workers
# localhost删除,内容追加文末:
master
slave1
slave2
# 功能: 这个文件就是指示了 当前SparkStandAlone环境下, 有哪些worker将文件 spark-env.sh.template 改名为 spark-env.sh,并配置相关内容
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
33mv spark-env.sh.template spark-env.sh
vim spark-env.sh
文末追加内容:
## 设置JAVA安装目录
JAVA_HOME=/export/server/jdk
## HADOOP软件配置文件目录,读取HDFS上文件和运行YARN集群
HADOOP_CONF_DIR=/export/server/hadoop/etc/hadoop
YARN_CONF_DIR=/export/server/hadoop/etc/hadoop
## 指定spark老大Master的IP和提交任务的通信端口
# 告知Spark的master运行在哪个机器上
export SPARK_MASTER_HOST=master
# 告知sparkmaster的通讯端口
export SPARK_MASTER_PORT=7077
# 告知spark master的 webui端口
SPARK_MASTER_WEBUI_PORT=8080
# worker cpu可用核数
SPARK_WORKER_CORES=1
# worker可用内存
SPARK_WORKER_MEMORY=1g
# worker的工作通讯地址
SPARK_WORKER_PORT=7078
# worker的 webui地址
SPARK_WORKER_WEBUI_PORT=8081
## 设置历史服务器
# 配置的意思是 将spark程序运行的历史日志 存到hdfs的/sparklog文件夹中
SPARK_HISTORY_OPTS="-Dspark.history.fs.logDirectory=hdfs://master:8020/sparklog/ -Dspark.history.fs.cleaner.enabled=true"开启 hadoop 的 hdfs 和 yarn 集群
1
2
3start-dfs.sh
start-yarn.sh在HDFS上创建程序运行历史记录存放的文件夹,同样 conf 文件目录下:
1
2
3hadoop fs -mkdir /sparklog
hadoop fs -chmod 777 /sparklog将 spark-defaults.conf.template 改为 spark-defaults.conf 并做相关配置
1
2
3
4
5
6
7
8
9
10
11mv spark-defaults.conf.template spark-defaults.conf
vim spark-defaults.conf
文末追加内容为:
# 开启spark的日期记录功能
spark.eventLog.enabled true
# 设置spark日志记录的路径
spark.eventLog.dir hdfs://master:8020/sparklog/
# 设置spark日志是否启动压缩
spark.eventLog.compress true配置 log4j.properties 文件 将文件第 19 行的 log4j.rootCategory=INFO, console 改为 log4j.rootCategory=WARN, console (即将INFO 改为 WARN 目的:输出日志, 设置级别为WARN 只输出警告和错误日志,INFO 则为输出所有信息,多数为无用信息)
1
2
3mv log4j.properties.template log4j.properties
vim log4j.properties1
2
3
4
5结果显示:
...
18 # Set everything to be logged to the console
19 log4j.rootCategory=WARN, console
....master 节点分发 spark 安装文件夹 到 slave1 和 slave2 上
1
2
3
4
5cd /export/server/
scp -r /export/server/spark-3.2.0-bin-hadoop3.2/ slave1:$PWD
scp -r /export/server/spark-3.2.0-bin-hadoop3.2/ slave2:$PWD在slave1 和 slave2 上做软连接
1
ln -s /export/server/spark-3.2.0-bin-hadoop3.2 /export/server/spark
重新加载环境变量
1
source /etc/profile
进入 /export/server/spark/sbin 文件目录下 启动 start-history-server.sh
1
2
3cd /export/server/spark/sbin
./start-history-server.sh访问 WebUI 界面
1
2
3浏览器访问:
http://master:18080/启动Spark的Master和Worker进程
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17# 启动全部master和worker
sbin/start-all.sh
# 或者可以一个个启动:
# 启动当前机器的master
sbin/start-master.sh
# 启动当前机器的worker
sbin/start-worker.sh
# 停止全部
sbin/stop-all.sh
# 停止当前机器的master
sbin/stop-master.sh
# 停止当前机器的worker
sbin/stop-worker.sh访问 WebUI界面
1
2
3浏览器访问:
http://master:8080/
Spark-Standalone-HA模式
Spark Standalone集群是Master-Slaves架构的集群模式,和大部分的Master-Slaves结构集群一样,存在着Master 单点故障(SPOF)的问题。简单理解为,spark-Standalone 模式下为 master 节点控制其他节点,当 master 节点出现故障时,集群就不可用了。 spark-Standalone-HA 模式下 master 节点不固定,当一个宕机时,立即换另一台为 master 保障不出现故障。
此处因为先前配置时的 zookeeper 版本和 spark 版本不太兼容,导致此模式有故障,需要重新下载配置新的版本的 zookeeper
配置之前需要删除三台主机的 旧版 zookeeper 以及 对应的软连接
在 master 节点上重新进行前面配置的 zookeeper 操作
1
2
3
4
5
6
7
8
9
101.上传apache-zookeeper-3.7.0-bin.tar.gz 到/export/server/目录下 并解压文件
2.在 /export/server 目录下创建软连接
3.进入 /export/server/zookeeper/conf/ 将 zoo_sample.cfg 文件复制为新文件 zoo.cfg
4.接上步给 zoo.cfg 添加内容
5.进入 /export/server/zookeeper/zkdatas 目录在此目录下创建 myid 文件,将 1 写入进去
6.将 master 节点中 /export/server/zookeeper-3.7.0 路径下内容推送给slave1 和 slave2
7.推送成功后,分别在 slave1 和 slave2 上创建软连接
8.接上步推送完成后将 slave1 和 slave2 的 /export/server/zookeeper/zkdatas/文件夹下的 myid 中的内容分别改为 2 和 3
配置环境变量:
因先前配置 zookeeper 时候创建过软连接且以 ’zookeeper‘ 为路径,所以不用配置环境变量,此处也是创建软连接的方便之处.进入 /export/server/spark/conf 文件夹 修改 spark-env.sh 文件内容
1
2
3cd /export/server/spark/conf
vim spark-env.sh为 83 行内容加上注释,此部分原为指定 某台主机 做 master ,加上注释后即为 任何主机都可以做 master
1
2
3
4
5结果显示:
......
82 # 告知Spark的master运行在哪个机器上
83 # export SPARK_MASTER_HOST=master
.........文末添加内容
1
2
3
4SPARK_DAEMON_JAVA_OPTS="-Dspark.deploy.recoveryMode=ZOOKEEPER -Dspark.deploy.zookeeper.url=master:2181,slave1:2181,slave2:2181 -Dspark.deploy.zookeeper.dir=/spark-ha"
# spark.deploy.recoveryMode 指定HA模式 基于Zookeeper实现
# 指定Zookeeper的连接地址
# 指定在Zookeeper中注册临时节点的路径
分发 spark-env.sh 到 salve1 和 slave2 上
1
2
3scp spark-env.sh slave1:/export/server/spark/conf/
scp spark-env.sh slave2:/export/server/spark/conf/启动之前确保 Zookeeper 和 HDFS 均已经启动
启动集群:
1
2
3
4
5# 在 master 上 启动一个master 和全部worker
/export/server/spark/sbin/start-all.sh
# 注意, 下面命令在 slave1 上执行 启动 slave1 上的 master 做备用 master
/export/server/spark/sbin/start-master.sh1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19结果显示:
(base) [root@master ~]# jps
37328 DataNode
41589 Master
35798 QuorumPeerMain
38521 ResourceManager
46281 Jps
38907 NodeManager
41821 Worker
36958 NameNode
(base) [root@slave1 sbin]# jps
36631 DataNode
48135 Master
35385 QuorumPeerMain
37961 NodeManager
40970 Worker
48282 Jps
37276 SecondaryNameNode访问 WebUI 界面
1
http://master:8081/
1
http://slave1:8082/
此时 kill 掉 master 上的 master 假设 master 主机宕机掉
1
2
3
4
5
6
7
8
9
10
11
12# master主机 master 的进程号
kill -9 41589
结果显示:
(base) [root@master ~]# jps
37328 DataNode
90336 Jps
35798 QuorumPeerMain
38521 ResourceManager
38907 NodeManager
41821 Worker
36958 NameNode访问 slave1 的 WebUI
1
http://slave1:8082/
进行主备切换的测试
提交一个 spark 任务到当前 活跃的 master上 :
1
/export/server/spark/bin/spark-submit --master spark://master:7077 /export/server/spark/examples/src/main/python/pi.py 1000
复制标签 kill 掉 master 的 进程号
再次访问 master 的 WebUI
1
http://master:8081/
1
网页访问不了!
再次访问 slave1 的 WebUI
1
http://slave1:8082/
可以看到当前活跃的 master 提示信息
1
2
3
4
5
6
7(base) [root@master ~]# /export/server/spark/bin/spark-submit --master spark://master:7077 /export/server/spark/examples/src/main/python/pi.py 1000
22/03/29 16:11:15 WARN NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable
22/03/29 16:12:16 WARN StandaloneAppClient$ClientEndpoint: Connection to master:7077 failed; waiting for master to reconnect...
22/03/29 16:12:16 WARN StandaloneSchedulerBackend: Disconnected from Spark cluster! Waiting for reconnection...
22/03/29 16:12:16 WARN StandaloneAppClient$ClientEndpoint: Connection to master:7077 failed; waiting for master to reconnect...
Pi is roughly 3.140960
(base) [root@master ~]#1
同样可以输出结果
当新的 master 接收集群后, 程序继续运行, 正常得到结果.
结论 HA模式下, 主备切换 不会影响到正在运行的程序.
最大的影响是 会让它中断大约30秒左右.
Spark On YARN模式
在已有YARN集群的前提下在单独准备Spark StandAlone集群,对资源的利用就不高.Spark On YARN, 无需部署Spark集群, 只要找一台服务器, 充当Spark的客户端
保证 HADOOPCONF和 DIR_YARN_CONF_DIR 已经配置在 spark-env.sh 和环境变量中 (注: 前面配置spark-Standlone 时已经配置过此项了)
1
2
3
4
5
6
7spark-env.sh 文件部分显示:
....
77 ## HADOOP软件配置文件目录,读取HDFS上文件和运行YARN集群
78 HADOOP_CONF_DIR=/export/server/hadoop/etc/hadoop
79 YARN_CONF_DIR=/export/server/hadoop/etc/hadoop
....链接到 YARN 中(注: 交互式环境 pyspark 和 spark-shell 无法运行 cluster模式)
```powershell
bin/pyspark —master yarn —deploy-mode client|cluster
—deploy-mode 选项是指定部署模式, 默认是 客户端模式
client就是客户端模式
cluster就是集群模式
—deploy-mode 仅可以用在YARN模式下1
2
3
- ```powershell
bin/spark-shell --master yarn --deploy-mode client|cluster```powershell
bin/spark-submit —master yarn —deploy-mode client|cluster /xxx/xxx/xxx.py 参数1
2
3
- spark-submit 和 spark-shell 和 pyspark的相关参数- bin/pyspark: pyspark解释器spark环境
- bin/spark-shell: scala解释器spark环境
- bin/spark-submit: 提交jar包或Python文件执行的工具
- bin/spark-sql: sparksql客户端工具这4个客户端工具的参数基本通用.以spark-submit 为例:
1
bin/spark-submit —master spark://master:7077 xxx.py`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
```powershell
Usage: spark-submit [options] <app jar | python file | R file> [app arguments]
Usage: spark-submit --kill [submission ID] --master [spark://...]
Usage: spark-submit --status [submission ID] --master [spark://...]
Usage: spark-submit run-example [options] example-class [example args]
Options:
--master MASTER_URL spark://host:port, mesos://host:port, yarn,
k8s://https://host:port, or local (Default: local[*]).
--deploy-mode DEPLOY_MODE 部署模式 client 或者 cluster 默认是client
--class CLASS_NAME 运行java或者scala class(for Java / Scala apps).
--name NAME 程序的名字
--jars JARS Comma-separated list of jars to include on the driver
and executor classpaths.
--packages Comma-separated list of maven coordinates of jars to include
on the driver and executor classpaths. Will search the local
maven repo, then maven central and any additional remote
repositories given by --repositories. The format for the
coordinates should be groupId:artifactId:version.
--exclude-packages Comma-separated list of groupId:artifactId, to exclude while
resolving the dependencies provided in --packages to avoid
dependency conflicts.
--repositories Comma-separated list of additional remote repositories to
search for the maven coordinates given with --packages.
--py-files PY_FILES 指定Python程序依赖的其它python文件
--files FILES Comma-separated list of files to be placed in the working
directory of each executor. File paths of these files
in executors can be accessed via SparkFiles.get(fileName).
--archives ARCHIVES Comma-separated list of archives to be extracted into the
working directory of each executor.
--conf, -c PROP=VALUE 手动指定配置
--properties-file FILE Path to a file from which to load extra properties. If not
specified, this will look for conf/spark-defaults.conf.
--driver-memory MEM Driver的可用内存(Default: 1024M).
--driver-java-options Driver的一些Java选项
--driver-library-path Extra library path entries to pass to the driver.
--driver-class-path Extra class path entries to pass to the driver. Note that
jars added with --jars are automatically included in the
classpath.
--executor-memory MEM Executor的内存 (Default: 1G).
--proxy-user NAME User to impersonate when submitting the application.
This argument does not work with --principal / --keytab.
--help, -h 显示帮助文件
--verbose, -v Print additional debug output.
--version, 打印版本
Cluster deploy mode only(集群模式专属):
--driver-cores NUM Driver可用的的CPU核数(Default: 1).
Spark standalone or Mesos with cluster deploy mode only:
--supervise 如果给定, 可以尝试重启Driver
Spark standalone, Mesos or K8s with cluster deploy mode only:
--kill SUBMISSION_ID 指定程序ID kill
--status SUBMISSION_ID 指定程序ID 查看运行状态
Spark standalone, Mesos and Kubernetes only:
--total-executor-cores NUM 整个任务可以给Executor多少个CPU核心用
Spark standalone, YARN and Kubernetes only:
--executor-cores NUM 单个Executor能使用多少CPU核心
Spark on YARN and Kubernetes only(YARN模式下):
--num-executors NUM Executor应该开启几个
--principal PRINCIPAL Principal to be used to login to KDC.
--keytab KEYTAB The full path to the file that contains the keytab for the
principal specified above.
Spark on YARN only:
--queue QUEUE_NAME 指定运行的YARN队列(Default: "default").
启动 YARN 的历史服务器
1
2
3cd /export/server/hadoop-3.3.0/sbin
./mr-jobhistory-daemon.sh start historyserver访问WebUI界面
1
http://master:19888/
client 模式测试
1
2
3SPARK_HOME=/export/server/spark
${SPARK_HOME}/bin/spark-submit --master yarn --deploy-mode client --driver-memory 512m --executor-memory 512m --num-executors 1 --total-executor-cores 2 ${SPARK_HOME}/examples/src/main/python/pi.py 3
cluster 模式测试
1
2
3SPARK_HOME=/export/server/spark
${SPARK_HOME}/bin/spark-submit --master yarn --deploy-mode cluster --driver-memory 512m --executor-memory 512m --num-executors 1 --total-executor-cores 2 --conf "spark.pyspark.driver.python=/root/anaconda3/bin/python3" --conf "spark.pyspark.python=/root/anaconda3/bin/python3" ${SPARK_HOME}/examples/src/main/python/pi.py 3
kafka 安装配置
Kafka是一种高吞吐量的分布式发布订阅消息系统,其在大数据开发应用上的目的是通过 Hadoo的并行加载机制来统一线上和离线的消息处理,也是为了通过集群来提供实时的消息。大数据开发需掌握Kafka架构原理及各组件的作用和使用方法及相关功能的实现。
上传文件包 到/export/server/
解压文件
1
tar -zxvf kafka_2.11-2.0.0.tgz
创建软连接
1
ln -s kafka_2.11-2.0.0/ kafka
进入 /export/server/kafka/config 修改 配置文件 server.properties
1
2
3cd /export/server/kafka/config
vim server.properties21 行内容 broker.id=0 为依次增长的:0、1、2、3、4,集群中唯一 id 从0开始,每台不能重复(注:此处不用修改)
1
21 broker.id=0
31 行内容 #listeners=PLAINTEXT://:9092 取消注释,内容改为:listeners=PLAINTEXT://master:9092
PLAINTEXT为通信使用明文(加密ssl)
1
31 listeners=PLAINTEXT://master:9092
59 行内容 log.dirs=/tmp/kafka-logs 为默认日志文件存储的位置,改为 log.dirs=/export/server/data/kafka-logs
1
59 log.dirs=/export/data/kafka-logs
63 行内容为 num.partitions=1 是默认分区数
1
63 num.partitions=1
76 行部分
1
2
3############################ **Log Flush Policy** ###############################
数据安全性(持久化之前先放到缓存上,从缓存刷到磁盘上)interval.messages interval.ms93 行部分
1
2
3########################### **Log Retention Policy** ############################
数据保留策略 168/24=7,1073741824/1024=1GB,300000ms = 300s = 5min超过了删掉(最后修改时间还是创建时间-->日志段中最晚的一条消息,维护这个最大的时间戳-->用户无法干预121 行内容 zookeeper.connect=localhost:2181 修改为 zookeeper.connect=master:2181,slave1:2181,slave2:2181
1
121 zookeeper.connect=master:2181,slave1:2181,slave2:2181
126 行内容 group.initial.rebalance.delay.ms=0 修改为 group.initial.rebalance.delay.ms=3000
1
133 group.initial.rebalance.delay.ms=3000
给 slaves1和 slavs2 scp 分发 kafka
1
2
3
4
5cd /export/server/
scp -r /export/server/kafka_2.11-2.0.0/ slave1:$PWD
scp -r /export/server/kafka_2.11-2.0.0/ slave2:$PWD创建软连接
1
ln -s /export/server/kafka_2.11-2.0.0/ kafka
配置 kafka 环境变量(注:可以一台一台配,也可以在 master 完成后发给 slave1 和slave2)
1
2
3
4
5vim /etc/profile
# kafka 环境变量
export KAFKA_HOME=/export/server/kafka
export PATH=$PATH:$KAFKA_HOME/bin重新加载环境变量
1
source /etc/profile
分别在 slave1 和slave2 上修改配置文件 路径:/export/server/kafka/config
将文件 server.properties 的第 21 行的 broker.id=0 修改为 broker.id=1 同理 slave2 同样操作
1
21 broker.id=1
将文件 server.properties 的第 31 行的 listeners=PLAINTEXT://master:9092 修改为 listeners=PLAINTEXT://slave1:9092 同理slave2 同样操作
1
31 listeners=PLAINTEXT://slave1:9092
启停 kafka (注:kafka 启动需要在 zookeeper 启动的情况下才可)
1
kafka-server-start.sh -daemon /export/server/kafka/config/server.properties
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25hadoop,zookeeper,kafka启动
结果显示:
(base) [root@master ~]# jps
11793 NodeManager
91699 Kafka
85618 QuorumPeerMain
10697 NameNode
10924 DataNode
11596 ResourceManager
109852 Jps
[root@slave1 ~]# jps
9301 DataNode
9493 SecondaryNameNode
95959 Kafka
102971 Jps
9855 NodeManager
89534 QuorumPeerMain
[root@slave2 ~]# jps
88660 QuorumPeerMain
95204 Kafka
9110 NodeManager
8616 DataNode
102104 Jps关闭 kafka
1
kafka-server-stop.sh stop
定制脚本一键启动
```sh
vim kafka-all.sh放入 /bin 路径下
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
```powershell
#!/bin/bash
if [ $# -eq 0 ] ;
then
echo "please input param:start stop"
else
if [ $1 = start ] ;then
echo "${1}ing master"
ssh master "source /etc/profile;kafka-server-start.sh -daemon /export/server/kafka/config/server.properties"
for i in {1..2}
do
echo "${1}ing slave${i}"
ssh slave${i} "source /etc/profile;kafka-server-start.sh -daemon /export/server/kafka/config/server.properties"
done
fi
if [ $1 = stop ];then
echo "${1}ping master "
ssh master "source /etc/profile;kafka-server-stop.sh"
for i in {1..2}
do
echo "${1}ping slave${i}"
ssh slave${i} "source /etc/profile;kafka-server-stop.sh"
done
fi
fi
hbase安装配置
进入 /export/server 将文件 hbase-1.2.4-bin.tar 上传 并解压
1
2
3cd /export/server
tar -zxvf hbase-1.2.4-bin.tar.gz创建软连接
1
ln -s hbase-1.2.4 hbase
进入 /export/server/hbase/conf 修改配置
修改 hbase-env.sh 文件内容 添加
1
2
3
4
5
6vim hbase-env.sh
内容添加末尾:
export HBASE_MANAGES_ZK=false
export JAVA_HOME=/export/server/jdk1.8.0_241
export HBASE_CLASSPATH=/export/server/hadoop-3.3.0/etc/hadoop修改 hbase-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
25vim hbase-site.xml
# 文末删除 <configuration> </configuration> 添加以下内容
<configuration>
<property>
<name>hbase.rootdir</name>
<value>hdfs://master:8020/hbase</value>
</property>
<property>
<name>hbase.cluster.distributed</name>
<value>true</value>
</property>
<property>
<name>hbase.master</name>
<value>hdfs://master:6000</value>
</property>
<property>
<name>hbase.zookeeper.quorum</name>
<value>master,slave1,slave2</value>
</property>
<property>
<name>hbase.zookeeper.property.dataDir</name>
<value>/export/server/ zookeeper</value>
</property>
</configuration>配置 regionservers 添加内容 删除原来的 localhoast
1
2slave1
slave2
进入 /export/server/hadoop-3.3.0/etc/hadoop 将文件 hdfs-site.xml 和 core-site.xml 拷贝到 hbase的配置文件夹下
1
2
3
4cd /export/server/hadoop-3.3.0/etc/hadoop
cp hdfs-site.xml /export/server/hbase/conf/
cp core-site.xml /export/server/hbase/conf/向 slave1 和 slave2 分发配置的 hbase
1
2scp -r /export/server/hbase/ root@slave1:/export/server/
scp -r /export/server/hbase/ root@slave2:/export/server/master slave1 和 slave2三台主机同时配置环境变量
1
2
3
4
5
6vim /etc/profile
# 添加内容
#HBASE_HOME
export HBASE_HOME=/export/server/hbase
export PATH=$PATH:$HBASE_HOME/bin重新加载环境变量
1
source /etc/profile
启动 hbase(注:启动 hbase 之前需要启动 zookeeper 和 hadoop )
1
2
3
4
5
6
7zkServer-all.sh start
start-all.sh
cd /export/server/hbase/bin
./start-hbase.shjps 查看进程
1
2
3
4结果显示:
(base) [root@master bin]# jps
24977 Jps
24534 HMaster访问 WebUI
1
http://master:16010/master-status
Hive安装配置
规划
序号 | 主机 | 角色 |
---|---|---|
01 | master | |
02 | salve1 | mysql,hive server服务器端 |
03 | slave2 | 作为Client客户端 |
Hive 部署之本地模式
本地模式部署本质上是将Hive默认的元数据存储介质由内嵌的Derby数据库替换为独立数据库,即MySQL数据库。本地模式部署Hive需要在一台虚拟机上同时安装MySQL和Hive,接下来,我们以虚拟机slave1为例,使用本地模式部署Hive。
安装 Mysql 安装 Mysql 5.7
下载并安装wget工具,wget是Linux中的一个下载文件的工具
1
yum install wget -y
下载MySQL 5.7的yum资源库,资源库文件会下载到当前目录下
1
2
3cd /export/server
wget -i -c http://dev.mysql.com/get/mysql57-community-release-el7-10.noarch.rpm安装MySQL 5.7的yum资源库
1
yum -y install mysql57-community-release-el7-10.noarch.rpm
进入 /etc/yum.repos.d 文件查看 是否有 mysql-community.repo 和从 mysql-community-source.repo
1
ls /etc/yum.repos.d | grep 'mysql'
1
2
3
4结果显示:
(base) [root@slave1~]# ls /etc/yum.repos.d | grep 'mysql'
mysql-community.repo
mysql-community-source.repomysql-community-source.repo 文件内容是 需要的下载的 mysql 组件
清除缓存
1
yum clean all && yum makecache fast
安装MySQL 5.7服务
1
yum install mysql-community-server --nogpgcheck
启动 mysql 并查看 服务状态
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21systemctl start mysqld.service
systemctl status mysqld.service
结果显示:
(base) [root@slave1 log]# systemctl status mysqld.service
● mysqld.service - MySQL Server
Loaded: loaded (/usr/lib/systemd/system/mysqld.service; enabled; vendor preset: disabled)
Active: active (running) since Sat 2022-04-09 17:26:23 CST; 13s ago
Docs: man:mysqld(8)
http://dev.mysql.com/doc/refman/en/using-systemd.html
Process: 1800 ExecStart=/usr/sbin/mysqld --daemonize --pid-file=/var/run/mysqld/mysqld.pid $MYSQLD_OPTS (code=exited, status=0/SUCCESS)
Process: 1751 ExecStartPre=/usr/bin/mysqld_pre_systemd (code=exited, status=0/SUCCESS)
Main PID: 1803 (mysqld)
CGroup: /system.slice/mysqld.service
└─1803 /usr/sbin/mysqld --daemonize --pid-file=/var/run/mysqld/mysqld.pid
Apr 09 17:26:16 slave1 systemd[1]: Starting MySQL Server...
Apr 09 17:26:23 slave1 systemd[1]: Started MySQL Server.
(base) [root@slave1 log]#MySQL安装完成后需要通过用户名和密码进行登录,MySQL为本地默认用户root自动生成密码,可以在MySQL的日志文件中查看此密码。
1
grep "password" /var/log/mysqld.log
1
2
3
4
5结果显示:
(base) [root@slave1 log]# grep "password" /var/log/mysqld.log
2022-04-09T09:26:19.571037Z 1 [Note] A temporary password is generated for root@localhost: /Xb6caelDqqk
注意:/Xb6caelDqqk 为默认密码知识点:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18数字权限使用格式
在这种使用方式中,首先我们需要了解数字如何表示权限。 首先,我们规定 数字 4 、2 和 1表示读、写、执行权限(具体原因可见下节权限详解内容),即 r=4,w=2,x=1 。此时其他的权限组合也可以用其他的八进制数字表示出来,
如:
rwx = 4 + 2 + 1 = 7
rw = 4 + 2 = 6
rx = 4 +1 = 5
若要同时设置 rwx (可读写运行) 权限则将该权限位 设置 为 4 + 2 + 1 = 7
若要同时设置 rw- (可读写不可运行)权限则将该权限位 设置 为 4 + 2 = 6
若要同时设置 r-x (可读可运行不可写)权限则将该权限位 设置 为 4 +1 = 5
User-Group-Other--->>U-G-O
-rw------- (600) 只有拥有者有读写权限。
-rw-r--r-- (644) 只有拥有者有读写权限;而属组用户和其他用户只有读权限。
-rwx------ (700) 只有拥有者有读、写、执行权限。
-rwxr-xr-x (755) 拥有者有读、写、执行权限;而属组用户和其他用户只有读、执行权限。
-rwx--x--x (711) 拥有者有读、写、执行权限;而属组用户和其他用户只有执行权限。
-rw-rw-rw- (666) 所有用户都有文件读、写权限。
-rwxrwxrwx (777) 所有用户都有读、写、执行权限。登录 mysql 默认密码:/Xb6caelDqqk
1
mysql -u root -p
修改密码为 Ccu2021@ ,密码策略规则要求密码必须包含英文大小写、数字以及特殊符号
1
ALTER USER 'root'@'localhost' IDENTIFIED BY 'Ccu2021@';
创建数据库
1
CREATE DATABASE hive;
刷新MySQL配置,使得配置生效
1
FLUSH PRIVILEGES;
注意:
此部分如果是需要远程登陆的话,mysql 需要创建远程登录,mysql本地登录的话,这步非必要选择
创建 用户:
1
create user 'root'@'%' identified by 'Ccu2022@';
允许远程连接:
1
grant all privileges on *.* to 'root'@'%' with grant option;
更新权限:
1
flush privileges;
安装HIve
网址(注:hive基于hadoop ,因先前部署hadoop版本3.3.0 所以hive版本必须为3.0以上,否则会有不兼容发生):Index of /dist/hive (apache.org)
上传 Hive 安装包到 /export/server
此处如果使用PowerShell 上传的话
1
2# 进入文件所在的文件夹 打开PowerShell
scp -r .\apache-hive-3.0.0-bin.tar.gz root@192.168.88.136:/export/server解压文件
1
tar -zxvf apache-hive-3.0.0-bin.tar.gz
创建软连接
1
ln -s apache-hive-3.0.0-bin hive
配置文件
进入Hive安装目录下的conf目录,复制模板文件hive-env.sh.template并重命名为hive-env.sh,文件hive-env.sh用于配置Hive运行环境。
1
2
3
4
5
6
7
8
9
10cp hive-env.sh.template hive-env.sh
vim hive-env.sh
# 文末添加内容
export HADOOP_HOME=/export/server/hadoop-3.3.0
export HIVE_CONF_DIR=/export/server/hive/conf
export HIVE_AUX_JARS_PATH=/export/server/hive/lib
export JAVA_HOME=/export/server/jdk进入Hive安装目录下的conf目录,创建文件hive-site.xml用于配置Hive相关参数。或者以模板复制一个
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
63cp hive-default.xml.template hive-site.xml
vim hive-site.xml
# <configuration> 添加内容 </configuration>
<!-- 配置Hive数据存储在HDFS上的目录 -->
<property>
<name>hive.metastore.warehouse.dir</name>
<value>/user/hive_local/warehouse</value>
</property>
<!-- 配置Hive在HDFS上的临时目录 -->
<property>
<name>hive.exec.scratchdir</name>
<value>/tmp_local/hive</value>
</property>
<!-- 指定Hive开启本地模式 -->
<property>
<name>hive.metastore.local</name>
<value>true</value>
</property>
<!-- 配置JDBC连接地址 -->
<property>
<name>javax.jdo.option.ConnectionURL</name>
<value>jdbc:mysql://localhost:3306/hive?
createDatabaseIfNotExist=true&usessL=false</value>
<!-- 如果需要配置mysql的远程,需要在这里改-->
<!-- <value>jdbc:mysql://slave2:3306/hive?
createDatabaseIfNotExist=true&usessL=false</value> -->
</property>
<!-- 配置JDBC驱动 -->
<property>
<name>javax.jdo.option.ConnectionDriverName</name> <value>com.mysql.jdbc.Driver</value>
</property>
<!-- 配置连接MySQL的用户名 -->
<property>
<name>javax.jdo.option.ConnectionUserName</name>
<value>root</value>
</property>
<!-- 配置连接MySQL的密码 -->
<property>
<name>javax.jdo.option.ConnectionPassword</name>
<value>Ccu2021@</value>
</property>
<!-- 配置在命令行界面(CLI)中显示表的列名 -->
<property>
<name>hive.cli.print.header</name
<value>true</value>
</property>
<!-- 配置在命令行界面(CLI)中显示当前数据库名称 -->
<property>
<name>hive.cli.print.current.db</name>
<value>true</value>
</property>
上传JDBC 连接MySQL的驱动包,传入 /export/server/hive/lib 文件夹下
注:此部分如需要远程连接 mysql 需要上传MySQL的驱动包 到
1
scp -r .\mysql-connector-java-5.1.32.jar root@192.168.88.136:/export/server/hive/lib
添加环境变量
1
2
3
4
5vim /etc/profile
# HIVE_PATH
export HIVE_HOME=/export/server/hive
export PATH=$PATH:$HIVE_HOME/bin重新加载环境变量
1
source /etc/profile
初始化mysql
1
schematool -initSchema -dbType mysql
1
2
3
4
5
6
7
8
9
10结果显示:
(base) [root@slave1 conf]# schematool -initSchema -dbType mysql
Metastore connection URL: jdbc:mysql://localhost:3306/hive?
createDatabaseIfNotExist=true&usessL=false
Metastore Connection Driver : com.mysql.jdbc.Driver
Metastore connection User: root
Starting metastore schema initialization to 3.0.0
Initialization script hive-schema-3.0.0.mysql.sql
Initialization script completed
schemaTool completed注:如果执行有报错看下方报错解决办法!!!!
注:启动 hive 之前必须启动 hadoop 集群
启动Hive
1
hive
1
2
3
4
5
6
7
8
9
10
11
12结果显示:
(base) [root@slave1 conf]# hive
SLF4J: Class path contains multiple SLF4J bindings.
SLF4J: Found binding in [jar:file:/export/server/hbase/lib/slf4j-log4j12-1.7.5.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: Found binding in [jar:file:/export/server/apache-hive-3.0.0-bin/lib/log4j-slf4j-impl-2.10.0.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: See http://www.slf4j.org/codes.html#multiple_bindings for an explanation.
SLF4J: Actual binding is of type [org.slf4j.impl.Log4jLoggerFactory]
Hive Session ID = a898fd11-e58d-4d25-adf8-21c8077f5a4b
Logging initialized using configuration in jar:file:/export/server/apache-hive-3.0.0-bin/lib/hive-common-3.0.0.jar!/hive-log4j2.properties Async: true
Hive-on-MR is deprecated in Hive 2 and may not be available in the future versions. Consider using a different execution engine (i.e. spark, tez) or using Hive 1.X releases.
hive (default)>报错解决办法:
- 执行 schematool -initSchema -dbType mysql 出现:
1
2
3
4【解决办法】:此问题由于 hive 和 hadoop 中的 log4j-slf4j-impl-2.10.0.jar包冲突删除一个即可
hive中的路径: /export/server/hive/lib
hadoop中的路径: /export/server/hadoop-3.3.0/share/hadoop/common/lib/
任意删除一个- 执行 schematool -initSchema -dbType mysql 出现:
1
2
3
4【解决办法】:此问题com.google.common.base.Preconditions.checkArgument 这是因为hive内依赖的guava.jar和hadoop内的版本不一致造成的
hive中的路径: /export/server/hive/lib
hadoop中的路径: /export/server/hadoop-3.3.0/share/hadoop/common/lib/
查看guava.jar的版本 。如果两者不一致,删除版本低的,并拷贝高版本的,保证两者的版本一致。
Hive 部署之远程模式
远程模式与本地模式一样,同样是使用独立数据库存储元数据。不同的是,远程模式使用的是远端的独立数据库,而本地模式使用的是本地独立数据库。远程模式主要应用于Hive客户端较多的情况。
启动HiveServer2服务
在虚拟机Node_02中执行“hiveserver2”命令启动HiveServer2服务,HiveServer2服务会进入监听状态
1
hiveserver2
1
2
3
4
5
6
7
8
9
10结果显示:
(base) [root@slave1 ~]# hiveserver2
SLF4J: Class path contains multiple SLF4J bindings.
SLF4J: Found binding in [jar:file:/export/server/hbase/lib/slf4j-log4j12-1.7.5.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: Found binding in [jar:file:/export/server/apache-hive-3.0.0-bin/lib/log4j-slf4j-impl-2.10.0.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: See http://www.slf4j.org/codes.html#multiple_bindings for an explanation.
SLF4J: Actual binding is of type [org.slf4j.impl.Log4jLoggerFactory]
2022-04-09 23:48:24: Starting HiveServer2
Hive Session ID = 09ab8af4-5dbf-473f-9e34-d4b929984b5c
Hive Session ID = 9f0ed0a4-b8f6-43ca-9430-7527b81543aa使用后台方式启动HiveServer2服务,则执行“hive —service hiveserver2 &”命令。
1
hive --service hiveserver2 &
1
2
3
4
5
6
7
8
9
10结果显示:
(base) [root@slave1 ~]# hive --service hiveserver2 &
[2] 6640
(base) [root@slave1 ~]# jps
2304 DataNode
6800 Jps
2531 NodeManager
6340 RunJar
2421 SecondaryNameNode
(base) [root@slave1 ~]#上传 Hive 到 /export/server 文件夹下(注:以下部分在slave2上操作)
此处如果使用PowerShell 上传的话
1
2# 进入文件所在的文件夹 打开PowerShell
scp -r .\apache-hive-3.0.0-bin.tar.gz root@192.168.88.137:/export/server解压文件
1
tar -zxvf apache-hive-3.0.0-bin.tar.gz
创建软连接
1
ln -s apache-hive-3.0.0-bin hive
配置Hive
虚拟机 slave2 进入Hive安装目录下的conf目录,创建文件hive-site.xml用于配置Hive相关参数。
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
29cp hive-default.xml.template hive-site.xml
vim hive-site.xml
# <configuration> 添加内容 </configuration>
<!-- 配置Hive数据存储在HDFS上的目录 -->
<property>
<name>hive.metastore.warehouse.dir</name>
<value>/user/hive_local/warehouse</value>
</property>
<!-- 配置Hive在HDFS上的临时目录 -->
<property>
<name>hive.exec.scratchdir</name>
<value>/tmp_local/hive</value>
</property>
<!-- 指定Hive不开启本地模式 -->
<property>
<name>hive.metastore.local</name>
<value>false</value>
</property>
<!-- 指定Metastore服务地址 -->
<property>
<name>hive.metastore.uris</name>
<value>thrift://slave1:9083</value>
</property>编辑环境变量
1
2
3
4
5vim /etc/profile
# HIVE_HOME
export HIVE_HOME=/export/server/hive
export PATH=$PATH:$HIVE_HOME/bin虚拟机 slave2 执行通过Hive客户端工具Beeline远程连接虚拟机 slave1 的HiveServer2服务。
1
beeline -u jdbc:hive2://slave1:10000 -n root -p
1
2
3
4
5
6
7
8
9
10
11
12
13
14结果显示:
(base) [root@slave2 conf]# beeline -u jdbc:hive2://slave1:10000 -n root -p
SLF4J: Class path contains multiple SLF4J bindings.
SLF4J: Found binding in [jar:file:/export/server/apache-hive-3.0.0-bin/lib/log4j-slf4j-impl-2.10.0.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: Found binding in [jar:file:/export/server/hadoop-3.3.0/share/hadoop/common/lib/slf4j-log4j12-1.7.25.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: See http://www.slf4j.org/codes.html#multiple_bindings for an explanation.
SLF4J: Actual binding is of type [org.apache.logging.slf4j.Log4jLoggerFactory]
Connecting to jdbc:hive2://slave1:10000/;user=root
Enter password for jdbc:hive2://slave1:10000/: ********
Connected to: Apache Hive (version 3.0.0)
Driver: Hive JDBC (version 3.0.0)
Transaction isolation: TRANSACTION_REPEATABLE_READ
Beeline version 3.0.0 by Apache Hive
0: jdbc:hive2://slave1:10000/>执行“hive”命令,通过Hive客户端工具HiveCLI操作本地模式下的Hive,在HiveCLI的命令行界面执行“create database test;”命令创建数据库test。然后分别执行“show databases;”命令分别查看 slave1 和 slave2 数据库列表。
1
结果显示:
文档内容来自于网络采集和自己编写,不做任何盈利,仅供学习。如有侵权请及时联系博主,博主会在第一时间进行删改。