服务版本列表
服务名称 | 版本号 | 下载链接 |
---|---|---|
Zookeeper | v3.6.4 | https://archive.apache.org/dist/zookeeper/zookeeper-3.6.4/apache-zookeeper-3.6.4-bin.tar.gz |
Hadoop | v2.8.5 | https://archive.apache.org/dist/hadoop/common/hadoop-2.8.5/hadoop-2.8.5.tar.gz |
Hive | v2.3.9 | https://archive.apache.org/dist/hive/stable-2/apache-hive-2.3.9-bin.tar.gz |
节点角色规划表
主机名称 | 主机IP | 角色 | 部署服务列表 | 资源详情 | 操作系统版本 |
---|---|---|---|---|---|
mapper-node1 | 192.168.0.101 | Master、Worker | Zookeeper、Namenode、Datanode、Resourcemanager、NodeManager、HiveServer2、HiveMetastore、JournalNode、ZKFC | 256G40C | CentOS Linux release 7.6.1810 (Core) |
mapper-node2 | 192.168.0.102 | Master、Worker | Zookeeper、Namenode、Datanode、Resourcemanager、NodeManager、JournalNode、ZKFC | 32G8C | CentOS Linux release 7.6.1810 (Core) |
mapper-node3 | 192.168.0.103 | Master、Worker | Zookeeper、Namenode、Datanode、Resourcemanager、NodeManager、HiveServer2、HiveMetastore、JournalNode、ZKFC | 32G8C | CentOS Linux release 7.6.1810 (Core) |
角色介绍
Zookeeper:分布式协调服务,可以由单个或多个节点组成。在Zookeeper集群中,有一个节点作为Leader,其他节点作为Follower。Leader节点负责协调所有客户端请求,并将它们发送到相应的Follower节点进行处理。Zookeeper还支持数据发布/订阅和通知机制,可以通过监视节点上的变化来实现配置管理和同步。
JournalNode:主要用于提供高可用性和容错性支持。JournalNode存储了HDFS中所有的数据修改操作,包括文件创建、修改、删除等操作,以及NameNode的元数据变更操作。JournalNode节点之间通过复制协议来保证数据的可靠性和一致性。通过向所有JournalNode节点广播数据变更请求,将变更操作记录在一个共享的日志文件中。在NameNode宕机或出现其他故障时,可以通过读取日志文件来恢复HDFS的数据。
ZKFC:主要用于实现HDFS的自动故障转移。当HDFS的NameNode节点出现故障时,zkfc会自动将故障节点转移给备用节点,以保证HDFS的高可用性和可靠性。主要作用是监控Active节点的健康状况,并在Active节点出现故障时,自动将Standby节点转变为Active节点,以保证HDFS的高可用性和可靠性。当Active节点出现故障时,zkfc会通过Zookeeper协调服务发现故障,并将Standby节点转变为Active节点。转变过程中,zkfc会执行一系列的操作,包括启动新的NameNode进程、配置HDFS、同步元数据等,以保证新的Active节点能够正常工作。
Namenode:主要用于管理和控制整个文件系统的命名空间和数据块。Namenode维护了HDFS中所有文件和目录的层次结构,以及数据块的位置和副本数量等元数据信息。NameNode也负责处理所有的读写请求,并通过数据块副本机制保证数据的可靠性和高可用性。Namenode作为HDFS的控制节点,负责处理客户端的所有读写请求。当客户端需要读取或写入一个文件时,客户端首先向NameNode发送请求,NameNode返回文件的块列表和位置信息,客户端然后直接与数据块所在的DataNode节点进行通信,进行数据的读取或写入操作。
Datanode:主要用于存储文件数据块,并提供读写数据块的服务。通常有多个DataNode节点,Datanode分布在不同的服务器上,用于存储HDFS中的数据块。当客户端需要读取一个文件时,客户端首先向NameNode发送请求,NameNode返回文件的块列表和位置信息,客户端然后直接与数据块所在的DataNode节点进行通信,进行数据的读取操作。当客户端需要写入一个文件时,它向NameNode发送请求,NameNode返回文件的块列表和位置信息,客户端将数据块写入相应的DataNode节点中。
Resourcemanager:ResourceManager在YARN框架中主要用于管理和分配集群资源,协调任务的运行和监控。作为整个YARN控制节点,负责管理集群中的所有资源和任务。主要任务有管理资源、协调任务、监控任务、管理队列等。
NodeManager:NodeManager主要用于管理和监控运行在NodeManager本地节点上的任务。通常有多个NodeManager节点,它们分布在不同的服务器上,用于执行任务和管理任务运行的环境。主要负责执行任务、管理容器、监控资源、发送心跳和状态报告,作为真正的工作节点。
HiveServer2:Hive中用于提供远程客户端访问Hive服务的组件,基于Thrift协议实现的,可以为不同的客户端提供多种访问接口,包括JDBC、ODBC和Hive的原生CLI等。
HiveMetaStore:Hive中用于存储Hive元数据的组件。MetaStore将Hive表、分区、列等元数据存储在关系型数据库中,包括MySQL、PostgreSQL等,以便Hive可以对数据进行查询、分析和管理。
部署前准备
- 配置主机名映射,确保IP能够相互访问
- 准备合适大小磁盘200G以上
- 关闭系统防火墙以及系统SELinux
- 配置节点相互免密
- 安装JDK环境
涉及到LVM的操作,可以参考文章LVM操作
####################### 每台主机都需要做 ##################
# 分别在各个主机上配置主机名
hostnamectl --static set-hostname mapper-node1 # 第一个节点
hostnamectl --static set-hostname mapper-node2 # 第二个节点
hostnamectl --static set-hostname mapper-node3 # 第三个节点
# 配置主机映射,每台主机/etc/hosts文件添加以下内容
192.168.0.101 mapper-node1
192.168.0.102 mapper-node2
192.168.0.103 mapper-node3
# -----------------------------------------------------------------
# 磁盘方面 (可以选择使用lvm或物理磁盘分区,这里使用使用lvm)
# 格式化磁盘为xfs格式完成后,要在/etc/fstab文件中写入挂载点
mkdir /data
blkid # 查看磁盘UUID
echo 'UUID="a7fdcbb9-eda4-4174-9512-de4cc3d2fb90" /data xfs defaults 0 0' >> /etc/fstab
mount -a && df -h # 查看是否挂载成功
# -----------------------------------------------------------------
# 关闭防火墙及selinux
systemctl stop firewalld && systemctl disable firewalld
# 关闭selinux,需要重启服务器
echo "SELINUX=disabled" > /etc/selinux/config
# -----------------------------------------------------------------
# 免密操作
ssh-keygen # 使用默认选项,一直回车即可
for hostNum in {1..3};do ssh-copy-id mapper-node$hostNum;done
# -----------------------------------------------------------------
# 安装JDK环境(略过)
# -----------------------------------------------------------------
# 操作完成后下载所有服务的的安装包
mkdir /opt/soft && cd /opt/soft # 个人习惯放在/opt/soft目录下
wget $SERVICES_DOWNLOAD_URL
Zookeeper集群搭建
cd /opt/soft
tar -zxvf apache-zookeeper-3.6.4-bin.tar.gz && mv apache-zookeeper-3.6.4-bin zookeeper
# 配置环境变量
cat > /etc/profile.d/zookeeper.sh << EOF
export ZOOKEEPER_HOME=/opt/soft/zookeeper
export ZOOCFGDIR=/opt/soft/zookeeper/conf
export ZOO_LOG_DIR=/data/bigdata/logs/zookeeper
export ZOOPIDFILE=/var/run/zookeeper/zookeeper_server.pid
export PATH=$PATH:$ZOOKEEPER_HOME/bin
EOF
解压出安装包内容后,需要对zookeeper的默认配置进行更改
cd /opt/soft/zookeeper/conf
mv zoo_sample.cfg zoo.cfg
# --------
dataDir=/data/bigdata/zookeeper # 更改默认数据目录
admin.serverPort=12182 # zookeeper在3.5.0版本后增加该参数,默认8080,防止端口冲突换成其他端口
# 2888端口和3888端口都是用于服务器之间进行通信的端口,分别用于Leader选举期间的服务器间通信和Follower服务器与Leader服务器之间的通信
server.1=mapper-node1:2888:3888
server.2=mapper-node2:2888:3888
server.3=mapper-node3:2888:3888
# ----- 拷贝zookeeper安装目录、环境变量脚本到其他机器
scp /opt/soft/zookeeper root@mapper-node2:/opt/soft
scp /etc/profile.d/zookeeper.sh root@mapper-node2:/etc/profile.d
scp /opt/soft/zookeeper root@mapper-node3:/opt/soft
scp /etc/profile.d/zookeeper.sh root@mapper-node3:/etc/profile.d
配置更改完成后,需要在zookeeper数据目录写入对应主机的myid
文件,完成后在每台机器上启动zookeeper
for hostNum in {1..3};do ssh mapper-node$hostNum 'echo '${hostNum}' > /data/bigdata/zookeeper/myid';done
for hostNum in {1..3};do ssh mapper-node$hostNum 'zkServer.sh start';done
for hostNum in {1..3};do echo "mapper-node$hostNum";ssh mapper-node$hostNum 'zkServer.sh status';done
出现上图所示,即表示zookeeper集群搭建完成,如果在启动时出现问题,可以进入日志目录查看相关报错信息。