高可用 ZooKeeper 集群部署(进阶中级)

发布时间 2023-07-06 18:49:23作者: 雙_木

高可用 ZooKeeper 集群部署(进阶中级)

免密登录

[root@master ~]# ssh-keygen
[root@master ~]# ssh-copy-id root@slave1
[root@master ~]# ssh-copy-id root@slave2
[root@master ~]# ssh slave1
Last login: Tue May 23 22:10:27 2023 from 192.168.100.1
[root@slave1 ~]# exit
logout
Connection to slave1 closed.
[root@master ~]# 

1. 实验任务一:ZooKeeper 安装部署

1.1. 步骤一:安装 ZooKeeper
[root@master src]# cd
[root@master ~]# ls
anaconda-ks.cfg  zookeeper-3.4.8.tar.gz
[root@master ~]# tar xf zookeeper-3.4.8.tar.gz -C /usr/local/src/
[root@master ~]# cd /usr/local/src/
[root@master src]# ls
hadoop  jdk  zookeeper-3.4.8
[root@master src]# mv zookeeper-3.4.8/ zookeeper
[root@master src]# ls
hadoop  jdk  zookeeper

1.2.步骤二:创建 ZooKeeper 数据目录
[root@master src]# cd zookeeper/
[root@master zookeeper]# ls
bin          contrib          ivy.xml      README_packaging.txt  zookeeper-3.4.8.jar
build.xml    dist-maven       lib          README.txt            zookeeper-3.4.8.jar.asc
CHANGES.txt  docs             LICENSE.txt  recipes               zookeeper-3.4.8.jar.md5
conf         ivysettings.xml  NOTICE.txt   src                   zookeeper-3.4.8.jar.sha1
[root@master zookeeper]# mkdir data
[root@master zookeeper]# mkdir logs
[root@master zookeeper]# ls
bin          data             lib                   README.txt               zookeeper-3.4.8.jar.md5
build.xml    dist-maven       LICENSE.txt           recipes                  zookeeper-3.4.8.jar.sha1
CHANGES.txt  docs             logs                  src
conf         ivysettings.xml  NOTICE.txt            zookeeper-3.4.8.jar
contrib      ivy.xml          README_packaging.txt  zookeeper-3.4.8.jar.asc

2.实验任务二:ZooKeeper 文件参数配置

2.1. 步骤一:配置 ZooKeeper 环境变量
[root@master ~]# vi /etc/profile.d/zookeeper.sh

export JAVA_HOME=/usr/local/src/java 
export PATH=$PATH:$JAVA_HOME/bin
export ZK_HOME=/usr/local/src/zookeeper
export PATH=$PATH:$ZK_HOME/bin
2.2. 步骤二:修改 zoo.cfg 配置文件
[root@master ~]# cd /usr/local/src/zookeeper/conf
[root@master conf]# ls
configuration.xsl  log4j.properties  zoo_sample.cfg
[root@master conf]# cp zoo_sample.cfg zoo.cfg
[root@master conf]# vi zoo.cfg 
#添加并更改如下配置:
#修改
dataDir=/usr/local/src/zookeeper/data
#增加
dataLogDir=/usr/local/src/zookeeper/logs
server.1=master:2888:3888
server.2=slave1:2888:3888
server.3=slave2:2888:3888

2.3. 步骤三:创建 myid 配置文件
[root@master conf]# cd ..
[root@master zookeeper]# cd data/
[root@master data]# echo "1" > myid
[root@master data]# cat myid
1

3. 实验任务三:ZooKeeper 集群启动

3.1. 步骤一:分发 ZooKeeper 集群
[root@master ~]# scp -r /usr/local/src/zookeeper/ root@slave1:/usr/local/src/
[root@master ~]# scp -r /usr/local/src/zookeeper/ root@slave2:/usr/local/src/
#分发环境变量并使其生效
[root@master ~]# scp /etc/profile.d/zookeeper.sh root@slave1:/etc/profile.d/
zookeeper.sh                                                             100%  141   103.4KB/s   00:00    
[root@master ~]# scp /etc/profile.d/zookeeper.sh root@slave2:/etc/profile.d/
zookeeper.sh                                                             100%  141    38.1KB/s   00:00  
3.2. 步骤二:修改 myid 配置
[root@master zookeeper]# cd data
[root@master data]# ls
myid
[root@master data]# cat myid
1
[root@slave1 ~]# cd /usr/local/src/zookeeper/data/
[root@slave1 data]# echo "2" > myid
[root@slave1 data]# cat myid 
2
[root@slave2 ~]# cd /usr/local/src/zookeeper/data/
[root@slave2 data]# echo "3" > myid
[root@slave2 data]# cat myid 
3

3.3. 步骤三:修改 ZooKeeper 安装目录的归属用户为 hadoop 用户。
[root@master data]# # chown -R hadoop:hadoop /usr/local/src/zookeeper
[root@slave1 data]# # chown -R hadoop:hadoop /usr/local/src/zookeepe
[root@slave2 data]# # chown -R hadoop:hadoop /usr/local/src/zookeepe

3.4. 步骤四:启动 ZooKeeper 集群
关闭防火墙
[root@master data]# systemctl stop firewalld.service
[root@slave1 data]# systemctl stop firewalld.service
[root@slave2 data]# systemctl stop firewalld.service
关闭防火墙自启
[root@master data]# systemctl disable firewalld.service
Removed symlink /etc/systemd/system/multi-user.target.wants/firewalld.service.
Removed symlink /etc/systemd/system/dbus-org.fedoraproject.FirewallD1.service.
[root@slave1 data]# systemctl disable firewalld.service
Removed symlink /etc/systemd/system/multi-user.target.wants/firewalld.service.
Removed symlink /etc/systemd/system/dbus-org.fedoraproject.FirewallD1.service.
[root@slave2 data]# systemctl disable firewalld.service
Removed symlink /etc/systemd/system/multi-user.target.wants/firewalld.service.
Removed symlink /etc/systemd/system/dbus-org.fedoraproject.FirewallD1.service.

#同时启动三个节点的 zookeeper
[hadoop@master ~]$ zkServer.sh start
ZooKeeper JMX enabled by default
Using config: /usr/local/src/zookeeper/bin/../conf/zoo.cfg
Starting zookeeper ... STARTED
[hadoop@master ~]$ zkServer.sh status
ZooKeeper JMX enabled by default
Using config: /usr/local/src/zookeeper/bin/../conf/zoo.cfg
Mode: follower

[hadoop@slave1 ~]$ zkServer.sh start
ZooKeeper JMX enabled by default
Using config: /usr/local/src/zookeeper/bin/../conf/zoo.cfg
Starting zookeeper ... STARTED
[hadoop@slave1 ~]$ zkServer.sh status
ZooKeeper JMX enabled by default
Using config: /usr/local/src/zookeeper/bin/../conf/zoo.cfg
Mode: leader

[hadoop@slave2 ~]$ zkServer.sh start
ZooKeeper JMX enabled by default
Using config: /usr/local/src/zookeeper/bin/../conf/zoo.cfg
Starting zookeeper ... STARTED
[hadoop@slave2 ~]$ zkServer.sh status
ZooKeeper JMX enabled by default
Using config: /usr/local/src/zookeeper/bin/../conf/zoo.cfg
Mode: follower

2. 实验二 Hadoop HA 集群部署

1.实验任务一:Hadoop HA 文件参数配置

1.1. 步骤一:解压安装 Hadoop
[root@master ~]# ls
anaconda-ks.cfg  hadoop-2.7.1.tar.gz  zookeeper-3.4.8.tar.gz
[root@master ~]# tar xf hadoop-2.7.1.tar.gz -C /usr/local/src/

1.2步骤二:更改 hadoop 文件名
[root@master src]# mv hadoop-2.7.1/ hadoop
[root@master src]# ls
hadoop  jdk  zookeeper

1.3. 步骤三:配置 hadoop 环境变量
[root@master src]# vi /etc/profile.d/hadoop.sh
export HADOOP_HOME=/usr/local/src/hadoop 
export HADOOP_PREFIX=$HADOOP_HOME
export HADOOP_MAPRED_HOME=$HADOOP_HOME
export HADOOP_COMMON_HOME=$HADOOP_HOME
export HADOOP_HDFS_HOME=$HADOOP_HOME
export YARN_HOME=$HADOOP_HOME
export HADOOP_COMMON_LIB_NATIVE_DIR=$HADOOP_HOME/lib/native
export HADOOP_INSTALL=$HADOOP_HOME
export HADOOP_OPTS="-Djava.library.path=$HADOOP_INSTALL/lib:$HADOOP_COMMON_LIB_NATIVE_DIR"
export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
export JAVA_HOME=/usr/local/src/java 
export PATH=$PATH:$JAVA_HOME/bin
export ZK_HOME=/usr/local/src/zookeeper
export PATH=$PATH:$ZK_HOME/bin

1.4.步骤四:配置 hadoop-env.sh 配置文件
[root@master src]# cd hadoop/etc/hadoop/
[root@master hadoop]# vi hadoop-env.sh 
#在最下面添加如下配置:
export JAVA_HOME=/usr/local/src/java
1.5. 步骤五:配置 core-site.xml 配置文件
[root@master hadoop]# vi core-site.xml

<!-- 指定 hdfs 的 nameservice 为 mycluster -->
<property>
    <name>fs.defaultFS</name>
    <value>hdfs://mycluster</value>
</property>
<property>
    <name>hadoop.tmp.dir</name>
    <value>file:/usr/local/src/hadoop/tmp</value>
</property>
<!-- 指定 zookeeper 地址 -->
<property>
    <name>ha.zookeeper.quorum</name>
    <value>master:2181,slave1:2181,slave2:2181</value>
</property>
<!-- hadoop 链接 zookeeper 的超时时长设置 -->
<property>
    <name>ha.zookeeper.session-timeout.ms</name>
    <value>30000</value>
    <description>ms</description>
</property>
<property>
    <name>fs.trash.interval</name>
    <value>1440</value>
</property>

1.6. 步骤六:配置 hdfs-site.xml 配置文件
[root@master hadoop]# vi hdfs-site.xml 
< property >
    < name > dfs.qjournal.start - segment.timeout.ms < / name >
    < value > 60000 < / value >
< / property >
< property >
    < name > dfs.nameservices < / name >
    < value > mycluster < / value >
< / property >
< property >
    < name > dfs.ha.namenodes.mycluster < / name >
    < value > master, slave1 < / value >
< / property >
< property >
    < name > dfs.namenode.rpc - address.mycluster.master < / name >
    < value > master: 8020 < / value >
< / property >
< property >
    < name > dfs.namenode.rpc - address.mycluster.slave1 < / name >
    < value > slave1: 8020 < / value >
< / property >
< property >
    < name > dfs.namenode.http - address.mycluster.master < / name >
    < value > master: 50070 < / value >
< / property >
< property >
    < name > dfs.namenode.http - address.mycluster.slave1 < / name >
    < value > slave1: 50070 < / value >
< / property >
< property >
    < name > dfs.namenode.shared.edits.dir < / name >
    < value > qjournal: // master: 8485;slave1: 8485;slave2: 8485 / mycluster < / value >
< / property >
< property >
    < name > dfs.client.failover.proxy.provider.mycluster < / name >
    < value > org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider < / value >
< / property >
< property >
    < name > dfs.ha.fencing.methods < / name >
    < value >
    sshfence
    shell( / bin / true)
    < / value >
< / property >
< property >
    < name > dfs.permissions.enabled < / name >
    < value > false < / value >
< / property >
< property >
    < name > dfs.support.append < / name >
    < value > true < / value >
< / property >
< property >
    < name > dfs.ha.fencing.ssh.private - key - files < / name >
    < value > / root /.ssh / id_rsa < / value >
< / property >
< property >
    < name > dfs.replication < / name >
    < value > 2 < / value >
< / property >
< property >
    < name > dfs.namenode.name.dir < / name >
    < value > / usr / local / src / hadoop / tmp / hdfs / nn < / value >
< / property >
< property >
    < name > dfs.datanode.data.dir < / name >
    < value > / usr / local / src / hadoop / tmp / hdfs / dn < / value >
< / property >
< property >
    < name > dfs.journalnode.edits.dir < / name >
    < value > / usr / local / src / hadoop / tmp / hdfs / jn < / value >
< / property >
< property >
    < name > dfs.ha.automatic - failover.enabled < / name >
    < value > true < / value >
< / property >
< property >
    < name > dfs.webhdfs.enabled < / name >
    < value > true < / value >
< / property >
< property >
    < name > dfs.ha.fencing.ssh.connect - timeout < / name >
    < value > 30000 < / value >
< / property >
< property >
    < name > ha.failover - controller.cli - check.rpc - timeout.ms < / name >
    < value > 60000 < / value >
< / property >
1.7. 步骤七:配置 mapred-site.xml 配置文件
[root@master hadoop]# cp mapred-site.xml.template mapred-site.xml
[root@master hadoop]# vi mapred-site.xml

<!-- 指定 mr 框架为 yarn 方式 -->
<property>
    <name>mapreduce.framework.name</name>
    <value>yarn</value>
</property>
<!-- 指定 mapreduce jobhistory 地址 -->
<property>
    <name>mapreduce.jobhistory.address</name>
    <value>master:10020</value>
</property>
<!-- 任务历史服务器的 web 地址 -->
<property>
    <name>mapreduce.jobhistory.webapp.address</name>
    <value>master:19888</value>
</property>

1.8. 步骤八:配置 yarn-site.xml 配置文件
[root@master hadoop]# vi yarn-site.xml

<!-- Site specific YARN configuration properties -->
<!-- 开启 RM 高可用 -->
<property>
    <name>yarn.resourcemanager.ha.enabled</name>
    <value>true</value>
</property>
<!-- 指定 RM 的 cluster id -->
<property>
    <name>yarn.resourcemanager.cluster-id</name>
    <value>yrc</value>
</property>
<!-- 指定 RM 的名字 -->
<property>
    <name>yarn.resourcemanager.ha.rm-ids</name>
    <value>rm1,rm2</value>
</property>
<!-- 分别指定 RM 的地址 -->
<property>
    <name>yarn.resourcemanager.hostname.rm1</name>
    <value>master</value>
</property>
<property>
    <name>yarn.resourcemanager.hostname.rm2</name>
    <value>slave1</value>
</property>
<!-- 指定 zk 集群地址 -->
<property>
    <name>yarn.resourcemanager.zk-address</name>
    <value>master:2181,slave1:2181,slave2:2181</value>
</property>
<property>
    <name>yarn.nodemanager.aux-services</name>
    <value>mapreduce_shuffle</value>
</property>
<property>
    <name>yarn.log-aggregation-enable</name>
    <value>true</value>
</property>
<property>
    <name>yarn.log-aggregation.retain-seconds</name>
    <value>86400</value>
</property>
<!-- 启用自动恢复 -->
<property>
    <name>yarn.resourcemanager.recovery.enabled</name>
    <value>true</value>
</property>
<!-- 制定 resourcemanager 的状态信息存储在 zookeeper 集群上 -->
<property>
    <name>yarn.resourcemanager.store.class</name>
    <value>org.apache.hadoop.yarn.server.resourcemanager.recovery.ZKRMStateStore</value>
</property>
1.9. 步骤九:配置 slaves 配置文件
[root@master hadoop]# vi slaves

master
slave1
slave2

1.10. 步骤十:解压包到指定目录

namenode、datanode、journalnode 等存放数据的公共目录为/usr/local/src/hadoop/tmp;

[root@master hadoop]# mkdir -p /usr/local/src/hadoop/tmp/hdfs/nn
[root@master hadoop]# mkdir -p /usr/local/src/hadoop/tmp/hdfs/dn
[root@master hadoop]# mkdir -p /usr/local/src/hadoop/tmp/hdfs/jn
[root@master hadoop]# mkdir -p /usr/local/src/hadoop/tmp/logs

1.11. 步骤十一:分发文件
[root@master hadoop]# scp -r /etc/profile.d/hadoop.sh root@slave1:/etc/profile.d/
hadoop.sh                                        100%  602    41.7KB/s   00:00    
[root@master hadoop]# scp -r /etc/profile.d/hadoop.sh root@slave2:/etc/profile.d/
hadoop.sh                                        100%  602   517.3KB/s   00:00  
[root@master hadoop]# scp -r /usr/local/src/hadoop root@slave1:/usr/local/src/
[root@master hadoop]# scp -r /usr/local/src/hadoop root@slave2:/usr/local/src/

1.12. 步骤十二:修改目录所有者和所有者组
[root@master ~]# chown -R hadoop:hadoop /usr/local/src/hadoop/ 
[root@slave1 ~]# chown -R hadoop:hadoop /usr/local/src/hadoop/
[root@slave2 ~]# chown -R hadoop:hadoop /usr/local/src/hadoop/

实验一:高可用集群启动

实验任务一:HA 的启动

1.1. 步骤一:启动 journalnode 守护进程
[hadoop@master ~]$ hadoop-daemons.sh start journalnode
master: starting journalnode, logging to /usr/local/src/hadoop/logs/hadoop-hadoop-journalnode-master.out
slave1: starting journalnode, logging to /usr/local/src/hadoop/logs/hadoop-hadoop-journalnode-slave1.out
slave2: starting journalnode, logging to /usr/local/src/hadoop/logs/hadoop-hadoop-journalnode-slave2.out

1.2. 步骤二:初始化 namenode
[hadoop@master ~]$ hdfs namenode -format
23/05/28 08:14:19 INFO namenode.NameNode: STARTUP_MSG: 
/************************************************************
STARTUP_MSG: Starting NameNode
STARTUP_MSG:   host = master/192.168.100.10
STARTUP_MSG:   args = [-format]
STARTUP_MSG:   version = 2.7.1
STARTUP_MSG:   classpath = /usr/local/src/hadoop/etc/hadoop:/usr/local/src/hadoop/share/hadoop/common/lib/commons-configuration-1.6.jar:/usr/local/src/hadoop/share/hadoop/common/lib/curator-client-2.7.1.jar:/usr/local/src/hadoop/share/hadoop/common/lib/gson-2.2.4.jar:/usr/local/src/hadoop/share/hadoop/common/lib/activation-1.1.jar:/usr/local/src/hadoop/share/hadoop/common/lib/jackson-jaxrs-1.9.13.jar:/usr/local/src/hadoop/share/hadoop/common/lib/jsp-api-2.1.jar:/usr/local/src/hadoop/share/hadoop/common/lib/jaxb-impl-2.2.3-1.jar:/usr/local/src/hadoop/share/hadoop/common/lib/apacheds-kerberos-codec-2.0.0-M15.jar:/usr/local/src/hadoop/share/hadoop/common/lib/commons-io-2.4.jar:/usr/local/src/hadoop/share/hadoop/common/lib/paranamer-2.3.jar:/usr/local/src/hadoop/share/hadoop/common/lib/httpclient-4.2.5.jar:/usr/local/src/hadoop/share/hadoop/common/lib/log4j-1.2.17.jar:/usr/local/src/hadoop/share/hadoop/common/lib/htrace-core-3.1.0-incubating.jar:/usr/local/src/hadoop/share/hadoop/common/lib/jets3t-0.9.0.jar:/usr/local/src/hadoop/share/hadoop/common/lib/zookeeper-3.4.6.jar:/usr/local/src/hadoop/share/hadoop/common/lib/hadoop-auth-2.7.1.jar:/usr/local/src/hadoop/share/hadoop/common/lib/java-xmlbuilder-0.4.jar:/usr/local/src/hadoop/share/hadoop/common/lib/jettison-1.1.jar:/usr/local/src/hadoop/share/hadoop/common/lib/slf4j-api-1.7.10.jar:/usr/local/src/hadoop/share/hadoop/common/lib/jersey-server-1.9.jar:/usr/local/src/hadoop/share/hadoop/common/lib/jackson-mapper-asl-1.9.13.jar:/usr/local/src/hadoop/share/hadoop/common/lib/avro-1.7.4.jar:/usr/local/src/hadoop/share/hadoop/common/lib/commons-codec-1.4.jar:/usr/local/src/hadoop/share/hadoop/common/lib/commons-cli-
.....
retain 1 images with txid >= 0
23/05/28 08:14:41 INFO util.ExitUtil: Exiting with status 0
23/05/28 08:14:41 INFO namenode.NameNode: SHUTDOWN_MSG: 
/************************************************************
SHUTDOWN_MSG: Shutting down NameNode at master/192.168.100.10
************************************************************/

1.3. 步骤三:注册 ZNode
[hadoop@master ~]$ hdfs zkfc -formatZK
23/05/28 08:16:36 INFO tools.DFSZKFailoverController: Failover controller configured for NameNode NameNode at master/192.168.100.10:8020
23/05/28 08:16:36 INFO zookeeper.ZooKeeper: Client environment:zookeeper.version=3.4.6-1569965, built on 02/20/2014 09:09 GMT
23/05/28 08:16:36 INFO zookeeper.ZooKeeper: Client environment:host.name=master
23/05/28 08:16:36 INFO zookeeper.ZooKeeper: Client environment:java.version=1.8.0_152
23/05/28 08:16:36 INFO zookeeper.ZooKeeper: Client environment:java.vendor=Oracle Corporation
23/05/28 08:16:36 INFO zookeeper.ZooKeeper: Client environment:java.home=/usr/local/src/jdk/jre
23/05/28 08:16:36 INFO zookeeper.ZooKeeper: Client environment:java.class.path=/usr/local/src/hadoop/etc/hadoop:/usr/local/src/hadoop/share/hadoop/common/lib/commons-configuration-1.6.jar:/usr/local/src/hadoop/share/hadoop/common/lib/curator-client-2.7.1.jar:/usr/local/src/hadoop/share/hadoop/common/lib/gson-2.2.4.jar:/usr/local/src/hadoop/share/hadoop/common/lib/activation-1.1.jar:/usr/local/src/hadoop/share/hadoop/common/lib/jackson-jaxrs-1.9.13.jar:/usr/local/src/hadoop/share/hadoop/common/lib/jsp-api-2.1.jar:/usr/local/src/hadoop/share/hadoop/common/lib/jaxb-impl-2.2.3-1.jar:/usr/local/src/hadoop/share/hadoop/common/lib/apacheds-kerberos-codec-2.0.0-M15.jar:/usr/local/src/hadoop/share/hadoop/common/lib/commons-io-2.4.jar:/usr/local/src/hadoop/share/hadoop/common/lib/paranamer-2.3.jar:/usr/local/src/hadoop/share/hadoop/common/lib/httpclient-4.2.5.jar:/usr/local/src/hadoop/share/hadoop/common/lib/log4j-1.2.17.jar:/usr/local/src/hadoop/share/hadoop/common/lib/htrace-core-3.1.0-incubating.jar:/usr/local/src/hadoop/share/hadoop/common/lib/jets3t-0.9.0.jar:/usr/local/src/hadoop/share/hadoop/common/lib/zookeeper-3.4.6.jar:/usr/local/src/hadoop/share/hadoop/common/lib/hadoop-auth-2.7.1.jar:/usr/local/src/hadoop/share/hadoop/common/lib/java-xmlbuilder-0.4.jar:/usr/local/src/hadoop/share/hadoop/common/lib/jettison-1.1.jar:/usr/local/src/hadoop/share/hadoop/common/lib/slf4j-api-1.7.10.jar:/usr/local/src/hadoop/share/hadoop/common/lib/jersey-server-1.9.jar:/usr/local/src/hadoop/share/hadoop/common/lib/jackson-mapper-asl-1.9.13.jar:/usr/local/src/hadoop/share/hadoop/common/lib/avro-1.7.4.jar:/usr/local/src/hadoop/share/hadoop/common/lib/commons-codec-1.4.jar:/usr/local/src/hadoop/share/hadoop/common/lib/commons-cli-1.2.jar:/usr/local/src/hadoop/share/hadoop/common/lib/curator-recipes-2.7.1.jar:/usr/local/src/hadoop/share/hadoop/common/lib/commons-net-3.1.jar:/usr/local/src/hadoop/share/hadoop/common/lib/jetty-util-6.1.26.jar:/usr/local/src/hadoop/share/hadoop/common/lib/protobuf-java-2.5.0.jar:/usr/local/src/hadoop/share/hadoop/common/lib/hadoop-annotations-2.7.1.jar:/usr/local/src/hadoop/share/hadoop/common/lib/netty-3.6.2.Final.jar:/usr/local/src/hadoop/share/hadoop/common/lib/commons-digester-1.8.jar:/usr/local/src/hadoop/share/hadoop/common/lib/guava-11.0.2.jar:/usr/local/src/hadoop/share/hadoop/common/lib/commons-compress-1.4.1.jar:/usr/local/src/hadoop/share/hadoop/common/lib/jsch-0.1.42.jar:/usr/local/src/hadoop/share/hadoop/common/lib/commons-beanutils-1.7.0.jar:/usr/local/src/hadoop/share/hadoop/common/lib/jersey-core-1.9.jar:/usr/local/src/hadoop/share/hadoop/common/lib/api-util-1.0.0-M20.jar:/usr/local/src/hadoop/share/hadoop/common/lib/api-asn1-api-1.0.0-M20.jar:/usr/local/src/hadoop/share/hadoop/common/lib/xz-1.0.jar:/usr/local/src/hadoop/share/hadoop/common/lib/commons-httpclient-3.1.jar:/usr/local/src/hadoop/share/hadoop/common/lib/commons-beanutils-core-1.8.0.jar:/usr/local/src/hadoop/share/hadoop/common/lib/stax-api-1.0-2.jar:/usr/local/src/hadoop/share/hadoop/common/lib/asm-3.2.jar:/usr/local/src/hadoop/share/hadoop/common/lib/jackson-xc-1.9.13.jar:/usr/local/src/hadoop/share/hadoop/common/lib/commons-logging-1.1.3.jar:/usr/local/src/hadoop/share/hadoop/common/lib/jersey-json-1.9.jar:/usr/local/src/hadoop/share/hadoop/common/lib/jsr305-3.0.0.jar:/usr/local/src/hadoop/share/hadoop/common/lib/commons-collections-3.2.1
......

1.4. 步骤四:启动 hdfs

[hadoop@master ~]$  start-dfs.sh
Starting namenodes on [slave1 master]
master: starting namenode, logging to /usr/local/src/hadoop/logs/hadoop-hadoop-namenode-master.out
slave1: starting namenode, logging to /usr/local/src/hadoop/logs/hadoop-hadoop-namenode-slave1.out
slave2: starting datanode, logging to /usr/local/src/hadoop/logs/hadoop-hadoop-datanode-slave2.out
master: starting datanode, logging to /usr/local/src/hadoop/logs/hadoop-hadoop-datanode-master.out
slave1: starting datanode, logging to /usr/local/src/hadoop/logs/hadoop-hadoop-datanode-slave1.out
Starting journal nodes [master slave1 slave2]
master: journalnode running as process 1461. Stop it first.
slave2: journalnode running as process 1269. Stop it first.
slave1: journalnode running as process 1259. Stop it first.
Starting ZK Failover Controllers on NN hosts [slave1 master]
master: starting zkfc, logging to /usr/local/src/hadoop/logs/hadoop-hadoop-zkfc-master.out
slave1: starting zkfc, logging to /usr/local/src/hadoop/logs/hadoop-hadoop-zkfc-slave1.out

1.5. 步骤五:启动 yarn
[hadoop@master ~]$ start-yarn.sh
starting yarn daemons
starting resourcemanager, logging to /usr/local/src/hadoop/logs/yarn-hadoop-resourcemanager-master.out
slave1: starting nodemanager, logging to /usr/local/src/hadoop/logs/yarn-hadoop-nodemanager-slave1.out
slave2: starting nodemanager, logging to /usr/local/src/hadoop/logs/yarn-hadoop-nodemanager-slave2.out
master: starting nodemanager, logging to /usr/local/src/hadoop/logs/yarn-hadoop-nodemanager-master.out

1.6. 步骤六:同步 master 数据
复制 namenode 元数据到其它节点(在 master 节点执行)
[hadoop@master ~]$ scp -r /usr/local/src/hadoop/tmp/hdfs/nn/* slave1:/usr/local/src/hadoop/tmp/hdfs/nn/
VERSION                                          100%  206   313.1KB/s   00:00    
seen_txid                                        100%    2     4.3KB/s   00:00    
fsimage_0000000000000000000.md5                  100%   62   157.1KB/s   00:00    
fsimage_0000000000000000000                      100%  353   719.7KB/s   00:00    
in_use.lock                                      100%   11    21.6KB/s   00:00    
[hadoop@master ~]$ scp -r /usr/local/src/hadoop/tmp/hdfs/nn/* slave2:/usr/local/src/hadoop/tmp/hdfs/nn/
VERSION                                          100%  206   104.4KB/s   00:00    
seen_txid                                        100%    2     2.0KB/s   00:00    
fsimage_0000000000000000000.md5                  100%   62    65.8KB/s   00:00    
fsimage_0000000000000000000                      100%  353   334.5KB/s   00:00    
in_use.lock                                      100%   11     9.2KB/s   00:00 
1.7. 步骤七:在 slave1 上启动 resourcemanager 和 namenode 进程
[hadoop@slave1 ~]$  yarn-daemon.sh start resourcemanager
starting resourcemanager, logging to /usr/local/src/hadoop/logs/yarn-hadoop-resourcemanager-slave1.out
[hadoop@slave1 ~]$ hadoop-daemon.sh start namenode
namenode running as process 1345. Stop it first.

1.8. 步骤九:启动 MapReduce 任务历史服务器
[hadoop@master ~]$  yarn-daemon.sh start proxyserver
starting proxyserver, logging to /usr/local/src/hadoop/logs/yarn-hadoop-proxyserver-master.out
[hadoop@master ~]$ jps
2177 DFSZKFailoverController
2306 ResourceManager
1460 JournalNode
2421 NodeManager
1734 NameNode
2810 Jps
1339 QuorumPeerMain
1871 DataNode
[hadoop@master ~]$ mr-jobhistory-daemon.sh start historyserver
starting historyserver, logging to /usr/local/src/hadoop/logs/mapred-hadoop-historyserver-master.out

1.9. 步骤十:查看端口和进程
#master
[hadoop@master ~]$ jps
2177 DFSZKFailoverController
2849 JobHistoryServer
2306 ResourceManager
1460 JournalNode
2421 NodeManager
1734 NameNode
1339 QuorumPeerMain
2893 Jps
1871 DataNode
#slave1
[hadoop@slave1 ~]$ jps
1411 JournalNode
1317 QuorumPeerMain
2552 Jps
2473 NameNode
1740 DFSZKFailoverController
2351 ResourceManager
2451 NodeManager
1891 DataNode
#slave2
[hadoop@slave2 ~]$ jps
1252 QuorumPeerMain
1576 NodeManager
1434 DataNode
1340 JournalNode
1708 Jps

master:50070

image-20230531111456429

slave1:50070

image-20230531111521204

master:8088

image-20230531111648126

2.实验任务二:HA 的测试

2.1. 步骤一:创建一个测试文件
[hadoop@master ~]$ vi y.txt

Hello World
Hello Hadoop

.2.2. 步骤二:在 hdfs 创建文件夹
[hadoop@master ~]$ hadoop fs -mkdir /input
.2.3. 步骤三:将 a.txt 传输到 input 上
[hadoop@master ~]$ hadoop fs -put ~/a.txt /input
2.4. 步骤四:进入到 jar 包测试文件目录下
[hadoop@master ~]$ cd /usr/local/src/hadoop/share/hadoop/mapreduce/
2.5. 步骤五:测试 mapreduce
[hadoop@master mapreduce]$ hadoop jar hadoop-mapreduce-examples-2.7.1.jar
wordcount /input/wbb.txt /output
23/05/30 07:08:46 INFO input.FileInputFormat: Total input paths to process : 1
23/05/30 07:08:46 INFO mapreduce.JobSubmitter: number of splits:1
23/05/30 07:08:46 INFO mapreduce.JobSubmitter: Submitting tokens for job:
job_1685444184808_0001
23/05/30 07:08:47 INFO impl.YarnClientImpl: Submitted application
application_1685444184808_0001
23/05/30 07:08:47 INFO mapreduce.Job: The url to track the job:
http://master:8088/proxy/application_1685444184808_0001/
23/05/30 07:08:47 INFO mapreduce.Job: Running job: job_1685444184808_0001
23/05/30 07:08:59 INFO mapreduce.Job: Job job_1685444184808_0001 running in uber
mode : false
23/05/30 07:08:59 INFO mapreduce.Job: map 0% reduce 0%
23/05/30 07:09:07 INFO mapreduce.Job: map 100% reduce 0%
23/05/30 07:09:11 INFO mapreduce.Job: map 100% reduce 100%
23/05/30 07:09:12 INFO mapreduce.Job: Job job_1685444184808_0001 completed
successfully
23/05/30 07:09:12 INFO mapreduce.Job: Counters: 49
File System Counters
FILE: Number of bytes read=43
FILE: Number of bytes written=236319
FILE: Number of read operations=0
FILE: Number of large read operations=0
FILE: Number of write operations=0
HDFS: Number of bytes read=120
HDFS: Number of bytes written=25
HDFS: Number of read operations=6
HDFS: Number of large read operations=0
HDFS: Number of write operations=2
Job Counters
Launched map tasks=1
Launched reduce tasks=1
Data-local map tasks=1
Total time spent by all maps in occupied slots (ms)=6390
Total time spent by all reduces in occupied slots (ms)=1593
Total time spent by all map tasks (ms)=6390
Total time spent by all reduce tasks (ms)=1593
Total vcore-seconds taken by all map tasks=6390
Total vcore-seconds taken by all reduce tasks=1593
Total megabyte-seconds taken by all map tasks=6543360
Total megabyte-seconds taken by all reduce tasks=1631232
Map-Reduce Framework
Map input records=2
Map output records=4
Map output bytes=41
Map output materialized bytes=43
Input split bytes=95
Combine input records=4
Combine output records=3
Reduce input groups=3
高可用性验证
Reduce shuffle bytes=43
Reduce input records=3
Reduce output records=3
Spilled Records=6
Shuffled Maps =1
Failed Shuffles=0
Merged Map outputs=1
GC time elapsed (ms)=404
CPU time spent (ms)=2500
Physical memory (bytes) snapshot=433823744
Virtual memory (bytes) snapshot=4241760256
Total committed heap usage (bytes)=283115520
Shuffle Errors
BAD_ID=0
CONNECTION=0
IO_ERROR=0
WRONG_LENGTH=0
WRONG_MAP=0
WRONG_REDUCE=0
File Input Format Counters
Bytes Read=25
File Output Format Counters
Bytes Written=25
2.7. 步骤七:查看文件测试的结果
[hadoop@master mapreduce]$ hadoop fs -cat /output/part-r-00000
Hadoop 1
Hello 2
World 1

3. 实验任务三:高可用性验证

3.1. 步骤一::自动切换服务状态
[hadoop@master ~]$ hdfs haadmin -getServiceState slave1
active
[hadoop@master ~]$ hdfs haadmin -getServiceState master
standby
3.2. 步骤二:手动切换服务状态
[hadoop@slave1 ~]$ hadoop-daemon.sh stop namenode
stopping namenode
[hadoop@master ~]$  hdfs haadmin -getServiceState master
active
[hadoop@master ~]$ hdfs haadmin -getServiceState slave1
23/05/30 23:35:24 INFO ipc.Client: Retrying connect to server: slave1/192.168.100.20:8020. Already tried 0 time(s); retry policy is RetryUpToMaximumCountWithFixedSleep(maxRetries=1, sleepTime=1000 MILLISECONDS)
Operation failed: Call From master/192.168.100.10 to slave1:8020 failed on connection exception: java.net.ConnectException: Connection refused; For more details see:  http://wiki.apache.org/hadoop/ConnectionRefused

查看 web 服务端

master:50070

image-20230531113653949

slave1:50070

image-20230531113741536