@zhangyy
2020-07-22T06:40:22.000000Z
字数 9190
阅读 300
大数据运维专栏
- 一:hadoop HDFS HA 与 yarn HA 的 概述
- 二:部署环境概述
- 三:部署zookeeper
- 四:部署HDFS HA 与 yarn HA
- 五:关于 HA 的测试
HA概述1)所谓HA(High Available),即高可用(7*24小时不中断服务)。2)实现高可用最关键的策略是消除单点故障。HA严格来说应该分成各个组件的HA机制:HDFS的HA和YARN的HA。3)Hadoop2.0之前,在HDFS集群中NameNode存在单点故障(SPOF)。4)NameNode主要在以下两个方面影响HDFS集群:NameNode机器发生意外,如宕机,集群将无法使用,直到管理员重启。NameNode机器需要升级,包括软件、硬件升级,此时集群也将无法使用。HDFS HA功能通过配置Active/Standby两个NameNodes实现在集群中对NameNode的热备来解决上述问题。如果出现故障,如机器崩溃或机器需要升级维护,这时可通过此种方式将NameNode很快的切换到另外一台机器。
HDFS-HA工作机制通过双NameNode消除单点故障。HDFS-HA工作要点1、元数据管理方式需要改变内存中各自保存一份元数据;Edits日志只有Active状态的NameNode节点可以做写操作;两个NameNode都可以读取Edits;共享的Edits放在一个共享存储中管理(qjournal和NFS两个主流实现)。2、需要一个状态管理功能模块实现了一个zkfailover,常驻在每一个namenode所在的节点,每一个zkfailover负责监控自己所在NameNode节点,利用zk进行状态标识,当需要进行状态切换时,由zkfailover来负责切换,切换时需要防止brain split(脑裂)现象的发生。3、必须保证两个NameNode之间能够ssh无密码登录。4、隔离(Fence),即同一时刻仅仅有一个NameNode对外提供服务。


1. 系统:CentOS 7.5 X642. 软件:Hadoop-3.2.1.tar.gzapache-zookeeper-3.6.1-bin.tar.gzjdk-8u181-linux-x64.rpm将所有软件安装上传到/software下面3. 系统关闭SELINUX 与清空iptables 防火墙规则4. 系统配置好 时间同步服务器ntp1.aliyun.com



fat01.flyfish.com 节点操作tar -zxvf apache-zookeeper-3.6.1-bin.tar.gzmv apache-zookeeper-3.6.1-bin /opt/bigdata/zookeepercd /opt/bigdata/zookeeper/confcp -p zoo_sample.cfg zoo.cfgvim zoo.cfg-----dataDir=/opt/bigdata/zookeeper/data/server.1=fat01.flyfish.com:2888:3888server.2=fat02.flyfish.com:2888:3888server.3=fat03.flyfish.com:2888:3888----mkdir -p /opt/bigdata/zookeeper/data/echo "1" > /opt/bigdata/zookeeper/data/myid打包zookeeper 目录cd /opt/bigdata/tar -zcvf zookeeper.tar.gz zookeeperscp zookeeper.tar.gz root@192.168.11.195:/opt/bigdata/scp zookeeper.tar.gz root@192.168.11.197:/opt/bigdata/
fat02.flyfish.com 节点操作cd /opt/bigdata/tar -zxvf zookeeper.tar.gzecho 2 > /opt/bigdata/zookeeper/data/myid
fat03.flyfish.com 节点操作cd /opt/bigdata/tar -zxvf zookeeper.tar.gzecho 3 > /opt/bigdata/zookeeper/data/myid
启动所有节点的zookeepercd /opt/bigdata/zookeeper/bin./zkstart.sh



tar –zxvf hadoop-3.2.1.tar.gzmv hadoop-3.2.1 /opt/bigdata/hadoop/
vim hadoop-env.sh---export JAVA_HOME=/usr/java/jdk1.8.0_181-amd64export HADOOP_PID_DIR=/opt/bigdata/hadoop/data/tmpexport HADOOP_SECURE_DN_PID_DIR=/opt/bigdata/hadoop/data/tmpexport HDFS_NAMENODE_USER="root"export HDFS_DATANODE_USER="root"export HDFS_ZKFC_USER="root"export HDFS_JOURNALNODE_USER="root"----

vim mapred-env.sh增加jdk 的环境export JAVA_HOME=/usr/java/jdk1.8.0_181-amd64export HADOOP_MAPRED_PID_DIR=/opt/bigdata/hadoop/data/tmp-----vim yarn-env.shexport JAVA_HOME=/usr/java/jdk1.8.0_181-amd64export YARN_RESOURCEMANAGER_USER=rootexport YARN_NODEMANAGER_USER=root


cd /opt/bigdata/hadoop/etc/hadoopvim core-site.xml---<configuration><property><name>fs.defaultFS</name><value>hdfs://myNameService1</value></property><property><name>hadoop.tmp.dir</name><value>file:/opt/bigdata/hadoop/data/tmp</value><description>Abase for other temporary directories.</description></property><!-- 指定zookeeper地址 --><property><name>ha.zookeeper.quorum</name><value>fat01.flyfish.com:2181,fat02.flyfish.com:2181,fat03.flyfish.com:2181</value></property></configuration>----
vim hdfs-site.xml----<configuration><!--指定hdfs的nameservice为myNameService1,需要和core-site.xml中的保持一致 --><property><name>dfs.nameservices</name><value>myNameService1</value></property><!-- myNameService1下面有两个NameNode,分别是nn1,nn2 --><property><name>dfs.ha.namenodes.myNameService1</name><value>nn1,nn2</value></property><!-- nn1的RPC通信地址 --><property><name>dfs.namenode.rpc-address.myNameService1.nn1</name><value>fat01.flyfish.com:9000</value></property><!-- nn1的http通信地址 --><property><name>dfs.namenode.http-address.myNameService1.nn1</name><value>fat01.flyfish.com:50070</value></property><!-- nn2的RPC通信地址 --><property><name>dfs.namenode.rpc-address.myNameService1.nn2</name><value>fat02.flyfish.com:9000</value></property><!-- nn2的http通信地址 --><property><name>dfs.namenode.http-address.myNameService1.nn2</name><value>fat02.flyfish.com:50070</value></property><!-- 指定NameNode的元数据在JournalNode上的存放位置 --><property><name>dfs.namenode.shared.edits.dir</name><value>qjournal://fat01.flyfish.com:8485;fat02.flyfish.com:8485;fat03.flyfish.com:8485/myNameService1</value></property><!-- 指定JournalNode在本地磁盘存放数据的位置 --><property><name>dfs.journalnode.edits.dir</name><value>/opt/bigdata/hadoop/data/jn</value></property><!-- 开启NameNode失败自动切换 --><property><name>dfs.ha.automatic-failover.enabled</name><value>true</value></property><!-- 配置失败自动切换实现方式 --><property><name>dfs.client.failover.proxy.provider.myNameService1</name><value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value></property><!-- 配置隔离机制方法,Failover后防止停掉的Namenode启动,造成两个服务,多个机制用换行分割,即每个机制暂用一行--><property><name>dfs.ha.fencing.methods</name><value>sshfenceshell(/bin/true)</value></property><!-- 使用sshfence隔离机制时需要ssh免登陆,注意换成自己的用户名 --><property><name>dfs.ha.fencing.ssh.private-key-files</name><value>/root/.ssh/id_rsa</value></property><!-- 配置sshfence隔离机制超时时间 --><property><name>dfs.ha.fencing.ssh.connect-timeout</name><value>30000</value></property><property><name>dfs.replication</name><value>2</value></property><property><name>dfs.namenode.name.dir</name><value>file:/opt/bigdata/hadoop/data/tmp/dfs/name</value></property><property><name>dfs.datanode.data.dir</name><value>file:/opt/bigdata/hadoop/tmp/dfs/data</value></property><property><name>dfs.permissions</name><value>false</value></property></configuration>-----
vim yarn-site.xml----<configuration><!-- 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>fat01.flyfish.com</value></property><property><name>yarn.resourcemanager.hostname.rm2</name><value>fat02.flyfish.com</value></property><!-- RM对外暴露的web http地址,用户可通过该地址在浏览器中查看集群信息 --><property><name>yarn.resourcemanager.webapp.address.rm1</name><value>fat01.flyfish.com:8088</value></property><property><name>yarn.resourcemanager.webapp.address.rm2</name><value>fat02.flyfish.com:8088</value></property><!-- 指定zookeeper集群地址 --><property><name>yarn.resourcemanager.zk-address</name><value>fat01.flyfish.com:2181,fat02.flyfish.com:2181,fat03.flyfish.com:2181</value></property><property><name>yarn.nodemanager.aux-services</name><value>mapreduce_shuffle</value></property><property><name>yarn.application.classpath</name><value>/opt/bigdata/hadoop/etc/hadoop:/opt/bigdata/hadoop/share/hadoop/common/lib/*:/opt/bigdata/hadoop/share/hadoop/common/*:/opt/bigdata/hadoop/share/hadoop/hdfs:/opt/bigdata/hadoop/share/hadoop/hdfs/lib/*:/opt/bigdata/hadoop/share/hadoop/hdfs/*:/opt/bigdata/hadoop/share/hadoop/mapreduce/lib/*:/opt/bigdata/hadoop/share/hadoop/mapreduce/*:/opt/bigdata/hadoop/share/hadoop/yarn:/opt/bigdata/hadoop/share/hadoop/yarn/lib/*:/opt/bigdata/hadoop/share/hadoop/yarn/*</value></property></configuration>-----
vim mapred-site.xml-----<configuration><!-- 指定mr框架为yarn方式 --><property><name>mapreduce.framework.name</name><value>yarn</value></property><!-- 配置 MapReduce JobHistory Server 地址 ,默认端口10020 --><property><name>mapreduce.jobhistory.address</name><value>fat01.flyfish.com:10020</value></property><!-- 配置 MapReduce JobHistory Server web ui 地址, 默认端口19888 --><property><name>mapreduce.jobhistory.webapp.address</name><value>fat01.flyfish.com:19888</value></property><property><name>mapreduce.application.classpath</name><value>/opt/bigdata/hadoop/share/hadoop/mapreduce/*,/opt/bigdata/hadoop/share/hadoop/mapreduce/lib/*</value></property></configuration>-----
fat01.flyfish.comfat02.flyfish.comfat03.flyfish.com
fat01.flyfish.com 节点:cd /opt/bigdata/tar -zcvf hadoop.tar.gz hadoopscp hadoop.tar.gz root@192.168.11.195:/opt/bigdata/scp hadoop.tar.gz root@192.168.11.197:/opt/bigdata/
fat02.flyfish.com 节点:cd /opt/bigdata/tar -zxvf hadoop.tar.gzfat03.flyfish.com 节点操作cd /opt/bigdata/tar -zxvf hadoop.tar.gz
cd /opt/bigdata/hadoop/sbin/hadoop-daemon.sh start journalnode



格式化hdfshdfs namenode -format


将fat01.flyfish.com上生成的data文件夹复制到fat02.flyfish.com的相同目录下cd /opt/bigdata/hadoop/scp -r data/ root@192.168.11.195:/opt/bigdata/hadoop/启动namenodehdfs --daemon start namenode

fat02.flyfish.com执行 备用节点:hdfs namenode -bootstrapStandbyhdfs --daemon start namenode

cd /opt/bigdata/hadoop/bin./hdfs zkfc –formatZK

cd /opt/bigdata/hadoop/sbin/./stop-dfs.sh./start-dfs.sh


打开hdfs 的web页面




cd /opt/bigdata/hadoop/sbin/start-yarn.sh 启动 yarnsbin/stop-yarn.sh 停掉 yarn




启动日志聚合功能:cd /opt/bigdata/hadoop/sbin/./mr-jobhistory-daemon.sh start historyserver

当前节点fat02.flyfish.com 的hdfs 是active 状态把 fat02.flyfish.com 的 NN 服务停掉jpskill -9 94030fat01.flyfish.com 上的 NN 节点立马变为 active 状态


然后启动fat02.flyfish.com 的NN 节点hdfs --daemon start namenodefat02.flyfish.com 上面的NN 变为standby


提交一个jobhdfs dfs -mkdir /inputhdfs dfs -put word.txt /inputcd /opt/bigdata/hadoop/bin/yarn jar share/hadoop/mapreduce/hadoop-mapreduce-examples-3.2.1.jar wordcount /input /output1


