栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 前沿技术 > 大数据

Hadoop3.X分布式高可用集群部署

大数据 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Hadoop3.X分布式高可用集群部署

一、部署规划 1.1 版本说明
软件版本
操作系统CentOS Linux release 7.8.2003 (Core)
hadoophadoop-3.3.1
JAVAjdk-8u271-linux-x64
1.2 集群规划
hostnameIP组件
master172.16.20.200NameNodeZKFailoverController
secondmaster172.16.20.201NameNodeZKFailoverController
slave1172.16.20.202ZookeeperjournalnodeDataNodeNodeManageResourceManager
slave2172.16.20.203ZookeeperjournalnodeDataNodeNodeManageResourceManager
slave3172.16.20.204ZookeeperjournalnodeDataNodeNodeManageResourceManager

节点规划说明:

zookeeper集群: 需要至少3个节点,并且节点数为奇数个,可以部署在任意独立节点上,NameNode及ResourceManager依赖zookeeper进行主备选举和切换

NameNode: 至少需要2个节点,一主多备,可以部署在任意独立节点上,用于管理HDFS的名称空间和数据块映射,依赖zookeeper和zkfc实现高可用和自动故障转移,并且依赖journalnode实现状态同步

ZKFailoverController: 即zkfc,在所有NameNode节点上启动,用于监视和管理NameNode状态,参与故障转移

journalnode: 至少需要3个节点,并且节点数为奇数个,可以部署在任意独立节点上,用于主备NameNode状态信息同步

ResourceManager: 至少需要2个节点,一主多备,可以部署在任意独立节点上,依赖zookeeper实现高可用和自动故障转移,用于资源分配和调度

DataNode: 至少需要3个节点,因为hdfs默认副本数为3,可以部署在任意独立节点上,用于实际数据存储

NodeManage: 部署在所有DataNode节点上,用于节点资源管理和监控

1.3 配置目录规划
服务目录
hadoop namenode/data1/hadoop/dfs/name, /data2/hadoop/dfs/name
hadoop datanode/data1/hadoop/dfs/data, /data2/hadoop/dfs/data
hadoop 临时目录/data/hadoop/tmp
zookeeper 数据目录/data/zookeeper/data/
zookeeper Log目录/data/zookeeper/logs/

每台一个默认数据分区/data, 并挂载3块数据硬盘, 分别挂载到/data1, /data2, /data3

二、 环境部署 2.1 系统配置

Hosts文件

cat >> /etc/hosts << EOF
172.16.20.200 master m
172.16.20.201 secondmaster sm
172.16.20.202 slave1 s1
172.16.20.203 slave2 s2
172.16.20.204 slave3 s3
EOF

免密登录

master和secondmaster做相同操作

ssh-keygen -t rsa
ssh-copy-id -i /root/.ssh/id_rsa.pub root@master
ssh-copy-id -i /root/.ssh/id_rsa.pub root@sm
ssh-copy-id -i /root/.ssh/id_rsa.pub root@slave1
ssh-copy-id -i /root/.ssh/id_rsa.pub root@slave2
ssh-copy-id -i /root/.ssh/id_rsa.pub root@slave3

修改最大打开文件描述符

cat >> /etc/security/limits.conf < 
2.2 JAVA环境 
mkdir -pv /usr/java/jdk1.8
tar -zxf jdk-8u271-linux-x64.tar.gz
mv jdk1.8.0_271/ /usr/java/jdk1.8/

配置/etc/profile, 加入如下

cat >> /etc/profile << 'EOF'
#JAVA
JAVA_HOME=/usr/java/jdk1.8/jdk1.8.0_271
JRE_HOME=/usr/java/jdk1.8/jdk1.8.0_271/jre
CLASSPATH=.:$JAVA_HOME/lib:$JAVA_HOME/lib
PATH=$JAVA_HOME/bin:$JRE_HOME/bin:$PATH
export JAVA_HOME JRE_HOME CLASSPATH PATH

EOF
source /etc/profile

## 验证
java -version

配置同步到其他节点

2.3 数据目录配置
  • 每台节点默认一个/data分区, 并挂载3块HDFS数据盘/dev/sdb, /dev/sdc, /dev/sdd, 将其格式化并挂载到对应的/data1,/data2,/data3下

目录创建

# master节点
mkdir -pv /opt/hadoop
mkdir -pv /data/hadoop/tmp
mkdir -pv /{data1,data2,/data3}

# node节点
mkdir -pv /opt/hadoop
mkdir -pv /data/hadoop/tmp
mkdir -pv /{data1,data2,/data3}
mkdir -pv /data/zookeeper/{data,logs}

磁盘分区

parted /dev/sdb
# 将磁盘设置为gpt模式
mklabel gpt
# 只分一个分区,大小为从其实扇区到最后
mkpart primary 2048s -1
# 查看
print
## 保存退出
quit

格式化

mkfs.xfs -L /data1 -f /dev/sdb1

磁盘挂载

vim /etc/fstab
// 加入
LABEL="/data1"                          /data1                  xfs    defaults        0 0

## 自动挂载
mount -a

data2,data3操作相同, 其余节点同理

三、zookeeper集群部署 3.1 下载解压

下载地址: https://dlcdn.apache.org/zookeeper/zookeeper-3.7.0/apache-zookeeper-3.7.0-bin.tar.gz

tar -zxf apache-zookeeper-3.7.0-bin.tar.gz -C /opt/hadoop/
ln -s /opt/hadoop/apache-zookeeper-3.7.0-bin /usr/local/zookeeper

各节点配置环境变量, /etc/profie下加入

cat >> /etc/profile << 'EOF'
#Zookeeper
ZK_HOME=/usr/local/zookeeper
PATH=$ZK_HOME/bin:$PATH
export PATH ZK_HOME

EOF
source /etc/profile
3.2 修改配置
mkdir -pv /data/zookeeper/{data,logs}
cat > /usr/local/zookeeper/conf/zoo.cfg << EOF
admin.serverPort=10080
tickTime=2000
initLimit=10
syncLimit=5
dataDir=/data/zookeeper/data
dataLogDir=/data/zookeeper/logs
clientPort=2181
server.1=slave1:2888:3888
server.2=slave2:2888:3888
server.3=slave3:2888:3888
EOF
3.3 同步配置
rsync -av /opt/hadoop/apache-zookeeper-3.7.0-bin root@slave2:/opt/hadoop/
rsync -av /opt/hadoop/apache-zookeeper-3.7.0-bin root@slave3:/opt/hadoop/

节点需创建软连接

ln -s /opt/hadoop/apache-zookeeper-3.7.0-bin /usr/local/zookeeper
3.4 创建myid
#各节点都需要配置,server.1就echo 1, server.2就echo 2
echo 1 > /data/zookeeper/data/myid
3.5 启动zookeeper

shell终端启动

zkServer.sh start
## 查看状态
zkServer.sh status

使用systemd管理zookeeper服务(推荐)

cat > /usr/lib/systemd/system/zookeeper.service << EOF
[Unit]
Description=Zookeeper Service

[Service]
Environment=JAVA_HOME=/usr/java/jdk1.8/jdk1.8.0_271
Type=forking
ExecStart=/usr/local/zookeeper/bin/zkServer.sh start
ExecStop=/usr/local/zookeeper/bin/zkServer.sh stop
ExecStop=/usr/local/zookeeper/bin/zkServer.sh restart
Restart=always
TimeoutSec=20
Restart=on-failure

[Install]
WantedBy=multi-user.target
EOF

systemctl daemon-reload
systemctl restart zookeeper
systemctl enable zookeeper
zkServer.sh status
四、部署hadoop集群 4.1 下载解压

下载地址: https://dlcdn.apache.org/hadoop/common/hadoop-3.3.1/hadoop-3.3.1.tar.gz

tar -zxf hadoop-3.3.1.tar.gz -C	/opt/hadoop/
ln -s /opt/hadoop/hadoop-3.3.1 /usr/local/hadoop

master节点配置环境变量, /etc/profie下加入

cat >> /etc/profile << 'EOF'
#hadoop
HADOOP_HOME=/usr/local/hadoop
PATH=$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$PATH
export PATH HADOOP_HOME

EOF
source /etc/profile

slave节点配置环境变量, /etc/profie下加入

cat >> /etc/profile << 'EOF'
#hadoop
HADOOP_HOME=/usr/local/hadoop
PATH=$HADOOP_HOME/bin:$PATH
export PATH HADOOP_HOME

EOF
source /etc/profile
4.2 修改配置
cd $HADOOP_HOME/etc/hadoop
4.2.1 hadoop-env.sh
cat >> hadoop-env.sh << 'EOF'
export JAVA_HOME=/usr/java/jdk1.8/jdk1.8.0_271
export HADOOP_PID_DIR=$HADOOP_HOME/tmp/pids
export HDFS_NAMENODE_USER=root
export HDFS_DATANODE_USER=root
export HDFS_JOURNALNODE_USER=root
export HDFS_ZKFC_USER=root
EOF
4.2.2 yarn-env.sh
cat >> yarn-env.sh << 'EOF'
export YARN_REGISTRYDNS_SECURE_USER=root
export YARN_RESOURCEMANAGER_USER=root
export YARN_NODEMANAGER_USER=root
EOF
4.2.2 core-site.xml
cat > core-site.xml << 'EOF'




    
      fs.defaultFS
      hdfs://mycluster
    
	
    
      hadoop.tmp.dir
      /data/hadoop/tmp
    

    
      io.file.buffer.size
      4096
    
    
    
      ha.zookeeper.quorum
      slave1:2181,slave2:2181,slave3:2181
    

EOF
4.2.3 hdfs-site.xml
cat > hdfs-site.xml << 'EOF'




    
      dfs.nameservices
      mycluster
    
    
	
    
      dfs.ha.namenodes.mycluster
      nn1,nn2
    
	
    
    
      dfs.namenode.rpc-address.mycluster.nn1
      master:8020
    
    
      dfs.namenode.rpc-address.mycluster.nn2
      secondmaster:8020
    
	
    
    
      dfs.namenode.http-address.mycluster.nn1
      master:9870
    
    
      dfs.namenode.http-address.mycluster.nn2
      secondmaster:9870
    
	
    
      dfs.replication
      3
      Hadoop的备份系数是指每个block在hadoop集群中有几份,系数越高,冗余性越好,占用存储也越多
    
    
      dfs.blocksize
      134217728
    
	
    
      dfs.namenode.name.dir
      file:///data1/hadoop/dfs/name,file:///data2/hadoop/dfs/name,file:///data3/hadoop/dfs/name,
      namenode上存储hdfs名字空间元数据 
    
    
      dfs.datanode.data.dir
      file:///data1/hadoop/dfs/data,file:///data2/hadoop/dfs/data,file:///data3/hadoop/dfs/name
      datanode上数据块的物理存储位置  
    

    
    
      dfs.namenode.shared.edits.dir
      qjournal://slave1:8485;slave2:8485;slave3:8485/mycluster
     

    
    
      dfs.journalnode.edits.dir
      /data/hadoop/tmp/dfs/journal
    
    
    
    
      dfs.client.failover.proxy.provider.mycluster
      org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider
    
	
    
    
      dfs.ha.automatic-failover.enabled
      true
    
    
    
    
      dfs.ha.fencing.methods
      
          sshfence
          shell(/bin/true)
	  
    
    
    
    
      dfs.ha.fencing.ssh.private-key-files
      /root/.ssh/id_rsa
    
    
    
      dfs.ha.fencing.ssh.connect-timeout
      30000
    
    
    
        ha.failover-controller.cli-check.rpc-timeout.ms
        60000
    

EOF

配置说明:

dfs.nameservices 配置命名空间,所有namenode节点配置在命名空间mycluster下
dfs.replication 指定dataNode存储block的副本数量,默认值是3个
dfs.blocksize 大型文件系统HDFS块大小为256MB,默认是128MB
dfs.namenode.rpc-address 各个namenode的 rpc通讯地址
dfs.namenode.http-address 各个namenode的http状态页面地址
dfs.namenode.name.dir 存放namenode名称表(fsimage)的目录
dfs.datanode.data.dir 存放datanode块的目录
dfs.namenode.shared.edits.dir HA集群中多个NameNode之间的共享存储上的目录。此目录将由活动服务器写入,由备用服务器读取,以保持名称空间的同步。
dfs.journalnode.edits.dir 存储journal edit files的目录
dfs.ha.automatic-failover.enabled 是否启用故障自动处理
dfs.ha.fencing.methods 处于故障状态的时候hadoop要防止脑裂问题,所以在standby机器切换到active后,hadoop还会试图通过内部网络的ssh连过去,并把namenode的相关进程给kill掉,一般是sshfence 就是ssh方式
dfs.ha.fencing.ssh.private-key-files 配置了 ssh用的 key 的位置。

4.2.3 mapred-site.xml
cat > mapred-site.xml << 'EOF'




    
      mapreduce.framework.name
      yarn
    

    
      mapreduce.jobhistory.address
      0.0.0.0:10020
    
    
      mapreduce.jobhistory.webapp.address
      0.0.0.0:19888
    

EOF

配置说明

  • mapreduce.framework.name 设置MapReduce运行平台为yarn
  • mapreduce.jobhistory.address 历史服务器的地址
  • mapreduce.jobhistory.webapp.address 历史服务器页面的地址
4.2.4 yarn-site.xml
cat > yarn-site.xml << 'EOF'




    
      yarn.resourcemanager.ha.enabled
      true
    
    
      yarn.resourcemanager.cluster-id
      cluster1
    

    
      yarn.resourcemanager.recovery.enabled
      true
    
    
      yarn.resourcemanager.store.class
      org.apache.hadoop.yarn.server.resourcemanager.recovery.ZKRMStateStore
    
	
    
      yarn.resourcemanager.ha.rm-ids
      rm1,rm2,rm3
    
    
      yarn.resourcemanager.hostname.rm1
      slave1
    
    
      yarn.resourcemanager.hostname.rm2
      slave2
    
    
      yarn.resourcemanager.hostname.rm3
      slave3
    
    
      yarn.resourcemanager.webapp.address.rm1
      slave1:8088
    
    
      yarn.resourcemanager.webapp.address.rm2
      slave2:8088
    
    
      yarn.resourcemanager.webapp.address.rm3
      slave3:8088
     
   
      hadoop.zk.address
      slave1:2181,slave2:2181,slave3:2181
    

    
      yarn.nodemanager.aux-services
      mapreduce_shuffle
    
    
      yarn.nodemanager.aux-services.mapreduce.shuffle.class
      org.apache.hadoop.mapred.ShuffleHandler
    
	
    
      yarn.log-aggregation-enable
      true
    
    
      yarn.log-aggregation.retain-seconds
      604800
    

EOF
4.2.4 workers
cat > workers << 'EOF'
slave1
slave2
slave3
EOF
4.3 同步配置

分发配置文件到其他节点

rsync -av /opt/hadoop/hadoop-3.3.1 root@sm:/opt/hadoop/
rsync -av /opt/hadoop/hadoop-3.3.1 root@slave1:/opt/hadoop/
rsync -av /opt/hadoop/hadoop-3.3.1 root@slave2:/opt/hadoop/
rsync -av /opt/hadoop/hadoop-3.3.1 root@slave3:/opt/hadoop/

在节点执行

ln -s /opt/hadoop/hadoop-3.3.1 /usr/local/hadoop
4.4 初始化hadoop 4.4.1 格式化ZooKeeper

任意master节点执行

$HADOOP_HOME/bin/hdfs zkfc -formatZK

zk节点验证, 看是否生成dfs.nameservices命名的目录

zkCli.sh
ls /hadoop-ha
[mycluster]
4.5 启动hadoop各组件 1. 启动journalnode
  • slave1, slave2, slave3节点执行
$HADOOP_HOME/bin/hdfs --daemon start journalnode
2. 启动HDFS
  1. 在master节点先执行namenode格式化
$HADOOP_HOME/bin/hdfs namenode -format
  1. 同步数据到secondmaster节点(也就是其余namenode节点)
rsync -av /data1/hadoop root@sm:/data1/
rsync -av /data2/hadoop root@sm:/data2/
rsync -av /data3/hadoop root@sm:/data3/
  1. 启动HDFS各组件(包含NameNode, DataNode, ZKFS)
$HADOOP_HOME/sbin/start-dfs.sh
3. 启动yarn
$HADOOP_HOME/sbin/start-yarn.sh
五、验证启动状态 5.1 命令查看

master节点

// JPS命令查看
2593 DFSZKFailoverController		//监视和管理NameNode
2511 NameNode						//管理HDFS的名称空间和数据块映

slave节点

// JPS命令查看
5587 NodeManager					//节点资源管理和监控
5300 DataNode						//数据存储
4631 QuorumPeerMain					//zookeeper进程
5208 JournalNode					//主备NameNode状态信息同步
5518 ResourceManager				//资源分配和调度

查看namenode节点状态

hdfs haadmin -getServiceState nn1
active
hdfs haadmin -getServiceState nn2
standby

NameNode节点强制转换状态:

// nn1转换为active
hdfs haadmin -transitionToActive --forcemanual nn1
5.2 web页面查看

NameNode页面

master
http://172.16.20.200:9870/

secondmaster
http://172.16.20.201:9870/

Resourse Manager页面

随便访问一个node节点,会自跳转至leader节点
http://172.16.20.202:8088/cluster
六、 高可用验证 6.1 NameNdoe验证

同时访问master和secondmaster的namenode页面, master状态为active, secondmaster状态为standby

杀掉master的namenode进程, 再次访问namenode页面, 查看secondmaster页面是否为active

6.2 ResourceManager验证

杀掉leader状态的ResourceManager进程, 访问任意ResourceManager节点(被杀死进程的节点除外), 查看是否指向新的leader节点

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/278172.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号