当前位置:   article > 正文

利用docker搭建服务器集群并部署大数据生态软件_docker搭建大数据集群

docker搭建大数据集群

1.集群搭建与配置

本来想使用centos镜像搭建服务器集群,但最小化安装版的镜像也需要1G左右,如果后面再部署一些大数据软件,单是多台服务器环境部署就会占用大量空间,加上此版本镜像在不同电脑环境的安装过程中可能会有一些问题出现,因此选择使用docker容器方式来搭建集群。
在这里插入图片描述docker搭建的集群包含3个节点,其中每个节点在原始centos镜像基础上安装了一些必要命令工具和部署了包括Hadoop、Zookeeper等集群软件后,占用空间在2G左右。
在这里插入图片描述

1.1 centos镜像配置

本次集群服务器选择centos镜像来部署

#docker下载centos镜像,不加tag默认下载最新版本(latest)
docker pull centos

#查看所有镜像信息
docker images

#用centos镜像创建容器
	#name 自定义容器名称
	#privileged 以真正root身份操作容器
	#centos:latest 镜像的名称:版本,用镜像id替代也可以
docker run -itd --name serverbase --privileged centos:latest init

#查看所有运行中的容器
docker ps

#进入容器
docker exec -it serverbase /bin/bash

#设置root用户密码
passwd

#容器使用的centos镜像版本是latest,需要修改镜像源后才能正常安装一些工具,在容器内部分别执行
cd /etc/yum.repos.d/
sed -i 's/mirrorlist/#mirrorlist/g' /etc/yum.repos.d/CentOS-*
sed -i 's|#baseurl=http://mirror.centos.org|baseurl=http://vault.centos.org|g' /etc/yum.repos.d/CentOS-*
yum makecache
yum update -y

#安装一些必要工具
yum -y install vim
yum install passwd
sudo yum install net-tools
yum install telnet
yum install openssh-server -y
yum install openssh-clients -y

#修改ssh配置文件sshd_config,修改参照图1红框两处
vi /etc/ssh/sshd_config

#修改完保存,重启ssh服务
systemctl start sshd

#退出容器
exit

#将修改后的容器打包生成新的镜像
	#serverbase 上面修改的容器名称,使用容器id也可以
	#centos:serverbase 要生成的新镜像的名称:tag
docker commit -a “作者名称” -m "一些说明信息" serverbase centos:serverbase

#查看新生成的镜像
docker images
  • 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

图1:配置文件sshd_config的修改

在这里插入图片描述

1.2 IP问题

Docker网络模式

docker在创建容器时,默认使用的网络模式是bridge,即桥接网络模式。docker默认情况下会建立bridge、host和none三种网络类型,

#查看docker网络类型
docker network ls
  • 1
  • 2

默认的bridge网络模式在创建容器时会在网段内按照顺序获取IP地址,IP地址取决于目前已有多少容器在运行,所以docker重启后会变化,我们希望通过docker创建的linux服务器集群要有固定的IP,可以使用docker自定义桥接网络方式来实现容器IP的固定。

自定义桥接网络

#使用如下命令创建自定义桥接网络
	#subnet	指定一个docker网段,要和docker自建的bri0不同
	#mydocnetwork	自定义网络名称
docker network create --subnet=172.18.0.0/16 mydocnetwork

#创建完后再次查看docker网络,发现多了一个mydocnetwork,表示已成功创建
docker network ls
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

1.3 集群节点配置

本集群包含3个节点,注意节点的命名最好不要有下划线或特殊字符,否则在后面部署软件集群时可能会引发一些问题。

创建第1个节点-node1

docker run -d --name node1 --hostname node1 --net mydocnetwork --ip 172.18.0.2 -p 10100:22 -p 10101:9870 -p :10102:8088 -p 10103:9000 -p 10104:16010 -p :10105:8081 -p 10106:3000 -p 10107:8042 --privileged centos:serverbase /usr/sbin/init
  • 1

参数解释:

  • name 容器名称(集群节点名称)

  • hostname 指定主机名,创建后可以查看容器内的 /etc/hosts

  • net 指定网络,这里的mydocnetwork是上面自定义的桥接网络,使用此网络可以给容器指定固定IP地址

  • ip 指定的固定IP地址

  • p 注意是小写的p,比如第一个,9001是宿主机端口,22是容器内部端口,可以同时定义多个,宿主机端口可以自定义,不要有冲突就行。xshell等工具连接此节点时使用宿主机ip、端口10100,其他接口用于访问后面部署的一些软件监控页面,这里端口暂时写不全也没关系,容器创建后也可以在配置文件里新增端口

  • privileged 使容器拥有真正root权限

  • centos:serverbase 上面重新创建后的镜像名:tag

*选读:容器创建后添加端口方法

#查看要新增暴露端口的容器id,比如上面创建的节点1的容器id:596e1712214d
docker ps -a

#查找要修改的容器的完整ID,结果为 596e1712214d23e7b2c648f47f24a441b8e645b1155e747796a357d1507cad9a
docker inspect 596e1712214d | grep Id

#到 /var/lib/docker/containers 路径()目录下找到与完整Id相同的目录
#修改此目录下的 hostconfig.json 与 config.v2.json 两个配置文件

#修改前需要先停掉容器与docker服务
docker stop 容器ID
systemctl stop docker

#hostconfig.json需要修改 PortBindings ,按下面这个格式来添加端口对
#格式:"{容器内部端口}/tcp":[{"HostIp":"","HostPort":"映射的宿主机端口"}]
"PortBindings":{"22/tcp":[{"HostIp":"","HostPort":"10100"}],"9870/tcp":[{"HostIp":"","HostPort":"10101"}]}

#config.v2.json需要修改 ExposedPorts ,按下面这个格式来添加端口(容器内的端口)
#格式:"{容器内部端口}/tcp":{}
"ExposedPorts":{"22/tcp":{},"9870/tcp":{}}

#修改完,重启docker服务
systemctl restart docker
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23

创建第2个节点-node2

docker run -d --name node2 --hostname node2 --net mydocnetwork --ip 172.18.0.3 -p 10200:22 -p 10201:9870 -p :10202:8088 -p 10203:9000 -p 10204:16010 -p :10205:8081 -p 10206:3000 -p 10207:8042 --privileged centos:serverbase /usr/sbin/init
  • 1

创建第3个节点-node3

docker run -d --name node3 --hostname node3 --net mydocnetwork --ip 172.18.0.4 -p 10300:22 -p 10301:9870 -p :10302:8088 -p 10303:9000 -p 10304:16010 -p :10305:8081 -p 10306:3000 -p 10307:8042 --privileged centos:serverbase /usr/sbin/init
  • 1

修改节点root用户密码

#依次进入三个节点的容器内
docker exec -it 容器id /bin/bash

#设置root用户密码
passwd
  • 1
  • 2
  • 3
  • 4
  • 5

配置hosts

#为了使节点间互相通过节点名称(主机名)来识别连通,需要在 /etc/hosts 里面配置域名解析,但由于每次重启容器都会重置 /etc/hosts ,所以需要在三个节点的 /etc/bashrc 文件里面加上如下内容,这样每次进入容器都会自动写入 /etc/hosts
#172.18.0.2、172.18.0.3、172.18.0.4分别是三个节点的ip,也即容器内部ip,可以在进入容器后通过ifconfig命令查看

# node1
result=$(cat /etc/hosts | grep ".*172.18.0.2.*node1.*")
if [[ "$result" = "" ]]
then
    echo "172.18.0.2 node1" >> /etc/hosts
fi

# node2
result=$(cat /etc/hosts | grep ".*172.18.0.3.*node2.*")
if [[ "$result" = "" ]]
then
    echo "172.18.0.3 node2" >> /etc/hosts
fi

# node3
result=$(cat /etc/hosts | grep ".*172.18.0.4.*node3.*")
if [[ "$result" = "" ]]
then
    echo "172.18.0.4 node3" >> /etc/hosts
fi

#没有ll别名的可以加上
alias ll="ls -alF"

#修改完执行
source /etc/bashrc

#为了方便xshell等软件使用节点名连接,需要在自己电脑的hosts文件里配置域名解析,Mac系统在 /etc/hosts 文件里修改,windows系统在 C:\Windows\System32\drivers\etc 文件里加上
宿主机ip node1
宿主机ip node2
宿主机ip node3
  • 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

容器自启动

#设置容器开机自启动
docker update --restart=always 容器id
#关闭容器自启动
docker update --restart=no 容器id
  • 1
  • 2
  • 3
  • 4

1.4 ssh免密登录

#集群间经常需要互相访问,设置免密登录能极大方便节点间的协作。在三个节点分别执行
ssh-keygen -t rsa -b 4096
#一路回车直至结束

#在三个节点分别执行
ssh-copy-id node1
ssh-copy-id node2
ssh-copy-id node3
#输入对应节点root用户密码即可
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

1.5 集群时区修改与时间同步

时区修改

#默认的centos镜像时区并不是beijing时间,因此和系统时间会有差异,需要同步时间。进入节点容器,查看时间
date
#如有差异,再查看节点服务器时区
timedatectl
#如果想把时区修改成 Asia/Shanghai
timedatectl set-timezone Asia/Shanghai
#修改完再次查看时区和时间
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

时间同步-chrony服务端节点设置

#chrony工具可以用一台服务器作为其他节点的server服务端来同步集群服务器时间。需要先安装chrony
yum -y install chrony
#安装完成后开启服务、设置开机自启动
systemctl start chronyd
systemctl enable chronyd

#选择一台作为server服务端的服务器(此处以节点node1为例),chrony服务端节点需要修改配置文件chrony.conf,修改两处如图2所示
vi /etc/chrony.conf

#修改完成后重启chrony服务
systemctl restart chronyd
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

图2:服务端配置文件chrony.conf的修改

  • allow 0.0.0.0/0 允许哪些客户端来同步本机的时间

  • local stratum 10 本机不同步任何主机的时间,本机作为时间源

在这里插入图片描述

时间同步-chrony客户端节点设置

#在节点2、3上同样安装chrony、开启服务、设置开机自启动
#修改节点2、3上的配置文件chrony.conf,修改两处如图3所示,然后重启服务
#查看server和同步节点信息
chronyc activity
chronyc tracking
  • 1
  • 2
  • 3
  • 4
  • 5

图3:客户端配置文件chrony.conf的修改
在这里插入图片描述

1.6 防火墙管理

#三个节点安装防火墙
yum install firewalld firewall-config

#关闭防火墙
systemctl stop firewalld
systemctl disable firewalld
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

2.大数据生态集群软件部署

2.1 jdk安装配置

jdk下载

jdk官方下载地址

#在3个节点创建软件安装文件夹
mkdir -p /export/server

#在node1上将下载的jdk压缩包解压
tar -zxvf jdk-8u351-linux-aarch64.tar.gz -C /export/server

#使用scp将jdk安装目录分发到node2、node3
cd /export/server
scp -r jdk1.8.0_351 node2:`pwd`/
scp -r jdk1.8.0_351 node3:`pwd`/

#在3个节点建立软链接
ln -s /export/server/jdk1.8.0_351 /export/server/jdk
#有些linux系统会自带java,删除并重建软连接
rm -f /usr/bin/java
ln -s /export/server/jdk/bin/java /usr/bin/java
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16

配置java环境变量

#在3个节点上修改配置文件
vi /etc/profile
#在最后加上
export JAVA_HOME=/export/server/jdk
export PATH=$PATH:$JAVA_HOME/bin

#修改完保存并运行
source /etc/profile
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

2.2 Zookeeper集群安装

#安装wget
yum -y install wget

#node1下载Zookeeper
wget http://archive.apache.org/dist/zookeeper/zookeeper-3.5.9/apache-zookeeper-3.5.9-bin.tar.gz

#解压
tar -zxvf apache-zookeeper-3.5.9-bin.tar.gz -C /export/server

#创建zookeeper数据存储目录
mkdir /export/server/zookeeper/data

#重命名配置文件
mv /export/server/zookeeper/conf/zoo_sample.cfg /export/server/zookeeper/conf/zoo.cfg
#修改配置文件zoo.cfg
vi /export/server/zookeeper/conf/zoo.cfg
#对应修改以下内容
tickTime=2000
dataDir=/export/server/zookeeper/data
clientPort=2181
initLimit=5
syncLimit=2
server.1=node1:2888:3888
server.2=node2:2888:3888
server.3=node3:2888:3888

#myid的配置,创建文件myid,内容写1(node1节点写1,node2节点写2,以此类推,用于不同节点上zookeeper的标识)
vi /export/server/zookeeper/data/myid

#分发,在node1上
cd /export/server
#使用scp命令分发到节点2和3上
scp -r apache-zookeeper-3.5.9-bin node2:`pwd`/
scp -r apache-zookeeper-3.5.9-bin node3:`pwd`/

#在3个节点上创建软链接
ln -s /export/server/apache-zookeeper-3.5.9-bin /export/server/zookeeper

#node2上修改myid文件,内容写2
vi /export/server/zookeeper/data/myid
#node3上修改myid文件,内容写3
vi /export/server/zookeeper/data/myid


#启动Zookeeper
/export/server/zookeeper/bin/zkServer.sh start

#jps命令查看启动的进程,看到 QuorumPeerMain 这个进程即为启动成功
jps

#验证zookeeper是否配置成功
/export/server/zookeeper/bin/zkCli.sh
#然后在控制台输入
ls /
#出现[zookeeper]表示zookeeper配置成功
  • 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

2.3 Kafka集群安装

#node1下载
wget http://archive.apache.org/dist/kafka/2.4.1/kafka_2.12-2.4.1.tgz

#解压
tar -zxvf kafka_2.12-2.4.1.tgz -C /export/server/

#修改配置文件 server.properties
vi /export/server/kafka/config/server.properties
#修改以下内容
broker.id=1
listeners=PLAINTEXT://node1:9092
log.dirs=/export/server/kafka/data
zookeeper.connect=node1:2181,node2:2181,node3:2181

#分发,在node1上
cd /export/server
#使用scp命令分发到节点2和3上
scp -r kafka_2.12-2.4.1 node2:`pwd`/
scp -r kafka_2.12-2.4.1 node3:`pwd`/

#在3个节点上创建软链接
ln -s /export/server/kafka_2.12-2.4.1 /export/server/kafka

#node2上修改配置文件 server.properties
vi /export/server/kafka/config/server.properties
#修改以下内容
broker.id=2
listeners=PLAINTEXT://node2:9092

#node3上修改配置文件 server.properties
vi /export/server/kafka/config/server.properties
#修改以下内容
broker.id=3
listeners=PLAINTEXT://node3:9092

#在3个节点上节点上启动kafka(一般选择下面的后台启动方式)
/export/server/kafka/bin/kafka-server-start.sh /export/server/kafka/config/server.properties
#如果启动报错 "Error: VM option 'UseG1GC' is experimental and must be enabled via -XX:+UnlockExperimentalVMOptions",则可修改此配置文件 /export/server/kafka/bin/kafka-run-class.sh ,如图4所示,删掉这段文字即可
vi /export/server/kafka/bin/kafka-run-class.sh

#后台运行
nohup /export/server/kafka/bin/kafka-server-start.sh /export/server/kafka/config/server.properties 2>&1 >> /export/server/kafka/kafka-server.log &

#jps命令查看启动的进程,看到Kafka这个进程即为启动成功
jps

#验证kafka是否配置成功
#在node1创建一个主题
/export/server/kafka_2.12-2.4.1/bin/kafka-topics.sh --create --zookeeper node1:2181 --replication-factor 1 --partitions 3 --topic test

#在nide1执行,启动一个模拟的数据生产者,会出现一个命令提示符,此时先不输入
/export/server/kafka_2.12-2.4.1/bin/kafka-console-producer.sh --broker-list node1:9092 --topic test

#在node2或node3执行如下命令,启动一个模拟的数据消费者
/export/server/kafka_2.12-2.4.1/bin/kafka-console-consumer.sh --bootstrap-server node1:9092 --topic test --from-beginning

#此时回到节点1随便输入内容然后回车,会在另外节点看到输出内容,表示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
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57

图4:启动错误处理
在这里插入图片描述

2.4 Hadoop集群安装

#node1下载
wget http://archive.apache.org/dist/hadoop/common/hadoop-3.3.0/hadoop-3.3.0.tar.gz

#解压
tar -zxvf hadoop-3.3.0.tar.gz -C /export/server/
  • 1
  • 2
  • 3
  • 4
  • 5

修改配置文件

#所有要修改的配置文件路径,在node1上
cd /export/server/hadoop/etc/hadoop
  • 1
  • 2

vi hadoop-env.sh

#在文件开始处加入以下内容:

export JAVA_HOME=/export/server/jdk
export HADOOP_HOME=/export/server/hadoop
export HADOOP_CONF_DIR=$HADOOP_HOME/etc/hadoop
export YARN_CONF_DIR=$HADOOP_HOME/etc/hadoop
export YARN_LOG_DIR=$HADOOP_HOME/logs/yarn
export HADOOP_LOG_DIR=$HADOOP_HOME/logs/hdfs
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
export YARN_PROXYSERVER_USER=root
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14

vi core-site.xml

#先删除文件里所有内容,然后粘贴如下内容

<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<!--
  Licensed under the Apache License, Version 2.0 (the "License");
  you may not use this file except in compliance with the License.
  You may obtain a copy of the License at

    http://www.apache.org/licenses/LICENSE-2.0

  Unless required by applicable law or agreed to in writing, software
  distributed under the License is distributed on an "AS IS" BASIS,
  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  See the License for the specific language governing permissions and
  limitations under the License. See accompanying LICENSE file.
-->

<!-- Put site-specific property overrides in this file. -->
<configuration>
  <property>
    <name>fs.defaultFS</name>
    <value>hdfs://node1:8020</value>
    <description></description>
  </property>

  <property>
    <name>io.file.buffer.size</name>
    <value>131072</value>
    <description></description>
  </property>
</configuration>
  • 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

vi hdfs-site.xml

#先删除文件里所有内容,然后粘贴如下内容

<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<!--
  Licensed under the Apache License, Version 2.0 (the "License");
  you may not use this file except in compliance with the License.
  You may obtain a copy of the License at

    http://www.apache.org/licenses/LICENSE-2.0

  Unless required by applicable law or agreed to in writing, software
  distributed under the License is distributed on an "AS IS" BASIS,
  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  See the License for the specific language governing permissions and
  limitations under the License. See accompanying LICENSE file.
-->

<!-- Put site-specific property overrides in this file. -->

<configuration>
    <property>
        <name>dfs.datanode.data.dir.perm</name>
        <value>700</value>
    </property>

  <property>
    <name>dfs.namenode.name.dir</name>
    <value>/data/nn</value>
    <description>Path on the local filesystem where the NameNode stores the namespace and transactions logs persistently.</description>
  </property>

  <property>
    <name>dfs.namenode.hosts</name>
    <value>node1,node2,node3</value>
    <description>List of permitted DataNodes.</description>
  </property>

  <property>
    <name>dfs.blocksize</name>
    <value>268435456</value>
    <description></description>
  </property>


  <property>
    <name>dfs.namenode.handler.count</name>
    <value>100</value>
    <description></description>
  </property>

  <property>
    <name>dfs.datanode.data.dir</name>
    <value>/data/dn</value>
  </property>
</configuration>
  • 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

vi mapred-env.sh

#在文件开始加入以下内容:
export JAVA_HOME=/export/server/jdk
export HADOOP_JOB_HISTORYSERVER_HEAPSIZE=1000
export HADOOP_MAPRED_ROOT_LOGGER=INFO,RFA
  • 1
  • 2
  • 3
  • 4

vi mapred-site.xml

#先删除文件里所有内容,然后粘贴如下内容

<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<!--
  Licensed under the Apache License, Version 2.0 (the "License");
  you may not use this file except in compliance with the License.
  You may obtain a copy of the License at

    http://www.apache.org/licenses/LICENSE-2.0

  Unless required by applicable law or agreed to in writing, software
  distributed under the License is distributed on an "AS IS" BASIS,
  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  See the License for the specific language governing permissions and
  limitations under the License. See accompanying LICENSE file.
-->

<!-- Put site-specific property overrides in this file. -->

<configuration>
  <property>
    <name>mapreduce.framework.name</name>
    <value>yarn</value>
    <description></description>
  </property>

  <property>
    <name>mapreduce.jobhistory.address</name>
    <value>node1:10020</value>
    <description></description>
  </property>


  <property>
    <name>mapreduce.jobhistory.webapp.address</name>
    <value>node1:19888</value>
    <description></description>
  </property>


  <property>
    <name>mapreduce.jobhistory.intermediate-done-dir</name>
    <value>/data/mr-history/tmp</value>
    <description></description>
  </property>


  <property>
    <name>mapreduce.jobhistory.done-dir</name>
    <value>/data/mr-history/done</value>
    <description></description>
  </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>
</configuration>
  • 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

vi yarn-env.sh

#在文件开始加入以下内容:
export JAVA_HOME=/export/server/jdk
export HADOOP_HOME=/export/server/hadoop
export HADOOP_CONF_DIR=$HADOOP_HOME/etc/hadoop
export YARN_CONF_DIR=$HADOOP_HOME/etc/hadoop
export YARN_LOG_DIR=$HADOOP_HOME/logs/yarn
export HADOOP_LOG_DIR=$HADOOP_HOME/logs/hdfs
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

vi yarn-site.xml

#先删除文件里所有内容,然后粘贴如下内容

<?xml version="1.0"?>
<!--
  Licensed under the Apache License, Version 2.0 (the "License");
  you may not use this file except in compliance with the License.
  You may obtain a copy of the License at

    http://www.apache.org/licenses/LICENSE-2.0

  Unless required by applicable law or agreed to in writing, software
  distributed under the License is distributed on an "AS IS" BASIS,
  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  See the License for the specific language governing permissions and
  limitations under the License. See accompanying LICENSE file.
-->
<configuration>

<!-- Site specific YARN configuration properties -->
<property>
    <name>yarn.log.server.url</name>
    <value>http://node1:19888/jobhistory/logs</value>
    <description></description>
</property>

  <property>
    <name>yarn.web-proxy.address</name>
    <value>node1:8089</value>
    <description>proxy server hostname and port</description>
  </property>


  <property>
    <name>yarn.log-aggregation-enable</name>
    <value>true</value>
    <description>Configuration to enable or disable log aggregation</description>
  </property>

  <property>
    <name>yarn.nodemanager.remote-app-log-dir</name>
    <value>/tmp/logs</value>
    <description>Configuration to enable or disable log aggregation</description>
  </property>


<!-- Site specific YARN configuration properties -->
  <property>
    <name>yarn.resourcemanager.hostname</name>
    <value>node1</value>
    <description></description>
  </property>

  <property>
    <name>yarn.resourcemanager.scheduler.class</name>
    <value>org.apache.hadoop.yarn.server.resourcemanager.scheduler.fair.FairScheduler</value>
    <description></description>
  </property>

  <property>
    <name>yarn.nodemanager.local-dirs</name>
    <value>/data/nm-local</value>
    <description>Comma-separated list of paths on the local filesystem where intermediate data is written.</description>
  </property>


  <property>
    <name>yarn.nodemanager.log-dirs</name>
    <value>/data/nm-log</value>
    <description>Comma-separated list of paths on the local filesystem where logs are written.</description>
  </property>


  <property>
    <name>yarn.nodemanager.log.retain-seconds</name>
    <value>10800</value>
    <description>Default time (in seconds) to retain log files on the NodeManager Only applicable if log-aggregation is disabled.</description>
  </property>



  <property>
    <name>yarn.nodemanager.aux-services</name>
    <value>mapreduce_shuffle</value>
    <description>Shuffle service that needs to be set for Map Reduce applications.</description>
  </property>
</configuration>
  • 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

vi workers

#添加所有节点   
node1
node2
node3
  • 1
  • 2
  • 3
  • 4

分发到其他节点

#分发,在node1上
cd /export/server
#使用scp命令分发到节点2和3上
scp -r hadoop-3.3.0 node2:`pwd`/
scp -r hadoop-3.3.0 node3:`pwd`/

#在3个节点上创建软链接
ln -s /export/server/hadoop-3.3.0 /export/server/hadoop
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

在node1上创建目录

mkdir -p /data/nn
mkdir -p /data/dn
mkdir -p /data/nm-log
mkdir -p /data/nm-local
  • 1
  • 2
  • 3
  • 4

在node2和node3上创建目录

mkdir -p /data/dn
mkdir -p /data/nm-log
mkdir -p /data/nm-local
  • 1
  • 2
  • 3

配置3个节点环境变量

#在3个节点的 /etc/profile 配置文件里加入如下内容
export HADOOP_HOME=/export/server/hadoop
export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin

#执行使更改生效
source /etc/profile
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

服务启动与验证

#node1上执行,格式化NameNode
hadoop namenode -format

#node1上启动hadoop的hdfs集群
start-dfs.sh
#停止 stop-dfs.sh

#node1上启动hadoop的yarn集群
start-yarn.sh
#停止 stop-yarn.sh

#node1上启动历史服务器
mapred --daemon start historyserver
#停止 mapred --daemon start historyserver

#node1、node2、node3执行jps
jps
#看到图5所示这些进程,表示启动成功

#到浏览器中打开:http://宿主机ip:10101、http://宿主机ip:10102
#能打开表示HDFS和YARN服务正常

#验证hadoop集群的运行是否正常,在node1上
cd ~
#创建测试文件test.txt,随便填入一些内容
vi test.txt
#上传文件到HDFS中
hadoop fs -put test.txt /test.txt
#执行命令
hadoop jar /export/server/hadoop/share/hadoop/mapreduce/hadoop-mapreduce-examples-3.3.0.jar wordcount -Dmapred.job.queue.name=root.root /test.txt /output
#如能成功执行,计算出文本字数,表示hadoop集群安装部署成功
  • 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

图5:jps进程

在这里插入图片描述

2.5 Hbase集群安装

# 下载
wget http://archive.apache.org/dist/hbase/2.1.0/hbase-2.1.0-bin.tar.gz

#解压
tar -zxvf hbase-2.1.0-bin.tar.gz -C /export/server

#修改配置文件 hbase-env.sh
vi /export/server/hbase-2.1.0/conf/hbase-env.sh
#在28行配置JAVA_HOME
export JAVA_HOME=/export/server/jdk
#在126行配置,表示不使用HBase自带的Zookeeper,而是用独立Zookeeper
export HBASE_MANAGES_ZK=false
#在任意行添加如下内容:
export HBASE_DISABLE_HADOOP_CLASSPATH_LOOKUP="true"

#修改配置文件 hbase-site.xml
vi /export/server/hbase-2.1.0/conf/hbase-site.xml
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
# 将文件的全部内容替换成如下内容:
<configuration>
        <!-- HBase数据在HDFS中的存放的路径 -->
        <property>
            <name>hbase.rootdir</name>
            <value>hdfs://node1:8020/hbase</value>
        </property>
        <!-- Hbase的运行模式。false是单机模式,true是分布式模式。若为false,Hbase和Zookeeper会运行在同一个JVM里面 -->
        <propertyç
            <name>hbase.cluster.distributed</name>
            <value>true</value>
        </property>
        <!-- ZooKeeper的地址 -->
        <property>
            <name>hbase.zookeeper.quorum</name>
            <value>node1,node2,node3</value>
        </property>
        <!-- ZooKeeper快照的存储位置,注意修改成自己的路径 -->
        <property>
            <name>hbase.zookeeper.property.dataDir</name>
            <value>/export/server/apache-zookeeper-3.5.9-bin/data</value>
        </property>
        <!--  V2.1版本,在分布式情况下, 设置为false -->
        <property>
            <name>hbase.unsafe.stream.capability.enforce</name>
            <value>false</value>
        </property>
</configuration>
  • 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
#修改配置文件 regionservers
vi /export/server/hbase-2.1.0/conf/regionservers
# 填入如下内容
node1
node2
node3

#分发
scp -r /export/server/hbase-2.1.0 node2:/export/server/
scp -r /export/server/hbase-2.1.0 node3:/export/server/

#创建软链接
ln -s /export/server/hbase-2.1.0 /export/server/hbase

# node1,2,3配置在/etc/profile内,追加如下两行
export HBASE_HOME=/export/server/hbase
export PATH=$HBASE_HOME/bin:$PATH

source /etc/profile


#node1启动hbase
start-hbase.sh

# 如需停止可使用
stop-hbase.sh

#验证hbase是否正常启动
浏览器打开:http://node1:16010,即可看到HBase的WEB UI页面

#测试hbase是否能正常使用
hbase shell

# 创建表
create 'test', 'cf'

# 插入数据
put 'test', 'rk001', 'cf:info', 'itheima'

# 查询数据
get 'test', 'rk001'

# 扫描表数据
scan 'test'
  • 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

2.6 Spark集群安装

#下载
wget https://archive.apache.org/dist/spark/spark-2.4.5/spark-2.4.5-bin-hadoop2.7.tgz
# 解压
tar -zxvf spark-2.4.5-bin-hadoop2.7.tgz -C /export/server/

#配置文件重命名 spark-env.sh.template → spark-env.sh
#slaves.template → slaves
cd /export/server/spark/conf
mv spark-env.sh.template spark-env.sh
mv slaves.template slaves
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
#修改配置文件 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和提交任务的通信端口
export SPARK_MASTER_HOST=node1
export SPARK_MASTER_PORT=7077

SPARK_MASTER_WEBUI_PORT=8080
SPARK_WORKER_CORES=1
SPARK_WORKER_MEMORY=1g
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
#修改配置文件 slaves ,填入
node1
node2
node3
  • 1
  • 2
  • 3
  • 4
#分发
cd /export/server
scp -r spark-2.4.5-bin-hadoop2.7 node2:$PWD
scp -r spark-2.4.5-bin-hadoop2.7 node3:$PWD

# 软链接
ln -s /export/server/spark-2.4.5-bin-hadoop2.7 /export/server/spark

# node1,2,3配置在/etc/profile内,追加如下两行
export SPARK_HOME=/export/server/spark
export PATH=$SPARK_HOME/bin:$PATH

source /etc/profile

#启动spark集群
/export/server/spark/sbin/start-all.sh

# 如需停止,可以
/export/server/spark/sbin/stop-all.sh

#打开Spark监控页面,浏览器打开:
http://node1:8081

#提交测试任务
/export/server/spark/bin/spark-submit --master spark://node1:7077 --class org.apache.spark.examples.SparkPi /export/server/spark/examples/jars/spark-examples_2.11-2.4.5.jar
  • 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

2.7 Flink集群安装

#下载
wget https://archive.apache.org/dist/flink/flink-1.10.0/flink-1.10.0-bin-scala_2.11.tgz

# 解压
tar -zxvf flink-1.10.0-bin-scala_2.11.gz -C /export/server/

#修改node1配置文件 flink-conf.yaml
vi /export/server/flink-1.10.0/conf/flink-conf.yaml 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
#先清空flink-conf.yaml文件内容,然后填入以下内容(dG命令清空,:set paste命令然后粘贴)

#jobManager的IP地址
jobmanager.rpc.address: node1
#jobManager的端口号
jobmanager.rpc.port: 6123
#jobManager JVM heap内存大小
jobmanager.heap.size: 1024m
#taskmanager JVM heap内存大小
taskmanager.heap.size: 1024m
#每个taskmanager提供的任务数量
taskmanager.numberOfTaskSlots: 2
#是否进行预分配内存,默认不分配,这样在我们不使用flink集群时不会占用集群资源
taskmanager.memory.preallocate: false
#程序默认并行计算的个数
parallelism.default: 1
#jobmanager的web界面端口
jobmanager.web.port: 8081
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
#mac电脑上如果taskmanagerRunner启动失败,需要将taskmanager.sh文件里面的-XX:+UseG1GC去掉(AppleSilicon由于适配的问题,ARM架构的JDK的JVM配置中的G1GC暂时处于测试阶段,上面的Kafka也有这个问题)
vi /export/server/flink-1.10.0/bin/taskmanager.sh
#原来的
#export JVM_ARGS="$JVM_ARGS -XX:+UseG1GC"
#改成这样
export JVM_ARGS="$JVM_ARGS"

#修改配置文件 slaves
vi /export/server/flink-1.10.0/conf/slaves
#写入
node1
node2
node3

#修改配置文件 masters
vi /export/server/flink-1.10.0/conf/masters
#写入
node1:8081

#分发
cd /export/server
scp -r flink-1.10.0 root@node2:`pwd`/
scp -r flink-1.10.0 root@node3:`pwd`/

# 软链接
ln -s /export/server/flink-1.10.0 /export/server/flink

#配置环境变量
vi /etc/profile
export FLINK_HOME=/export/server/flink-1.10.0
export PATH=$FLINK_HOME/bin:$PATH
source /etc/profile

#启动
/export/server/flink/bin/start-cluster.sh
#退出
/export/server/flink/bin/stop-cluster.sh

#打开监控页面,浏览器打开:
http://node1:8081

#运行测试
/export/server/flink/bin/flink run /export/server/flink-1.10.0/examples/batch/WordCount.jar
  • 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
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/笔触狂放9/article/detail/728173
推荐阅读
相关标签
  

闽ICP备14008679号