部署 完全分布式高可用 Hadoop hdfs HA + yarn HA
部署 完全分布式高可用 Hadoop hdfs HA + yarn HA
标签(空格分隔): 大数据运维专栏
- 一:hadoop HDFS HA 与 yarn HA 的 概述
- 二:部署环境概述
- 三:部署zookeeper
- 四:部署HDFS HA 与 yarn HA
- 五:关于 HA 的测试
一:hadoop HDFS HA 与 yarn HA 的 概述
1.1 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很快的切换到另外一台机器。
1.2 HDFS-HA 的工作机制
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.3 HDFS-HA手动故障转移工作机制
1.4 HDFS-HA自动故障转移工作机制
二: 部署环境概述
2.1:所需安装配置包
1. 系统:CentOS 7.5 X64 2. 软件:Hadoop-3.2.1.tar.gz apache-zookeeper-3.6.1-bin.tar.gz jdk-8u181-linux-x64.rpm 将所有软件安装上传到/software下面 3. 系统关闭SELINUX 与清空iptables 防火墙规则 4. 系统配置好 时间同步服务器 ntp1.aliyun.com
三:部署zookeeper
fat01.flyfish.com 节点操作 tar -zxvf apache-zookeeper-3.6.1-bin.tar.gz mv apache-zookeeper-3.6.1-bin /opt/bigdata/zookeeper cd /opt/bigdata/zookeeper/conf cp -p zoo_sample.cfg zoo.cfg vim zoo.cfg ----- dataDir=/opt/bigdata/zookeeper/data/ server.1=fat01.flyfish.com:2888:3888 server.2=fat02.flyfish.com:2888:3888 server.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 zookeeper scp 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.gz echo 2 > /opt/bigdata/zookeeper/data/myid
fat03.flyfish.com 节点操作 cd /opt/bigdata/ tar -zxvf zookeeper.tar.gz echo 3 > /opt/bigdata/zookeeper/data/myid
启动所有节点的zookeeper cd /opt/bigdata/zookeeper/bin ./zkstart.sh
四:部署HDFS HA 与 yarn HA
4.1 部署解压Hadoop
tar –zxvf hadoop-3.2.1.tar.gz mv hadoop-3.2.1 /opt/bigdata/hadoop/
4.2 编辑Hadoop-env.sh 配置文件
vim hadoop-env.sh --- export JAVA_HOME=/usr/java/jdk1.8.0_181-amd64 export HADOOP_PID_DIR=/opt/bigdata/hadoop/data/tmp export HADOOP_SECURE_DN_PID_DIR=/opt/bigdata/hadoop/data/tmp export 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-amd64 export HADOOP_MAPRED_PID_DIR=/opt/bigdata/hadoop/data/tmp ----- vim yarn-env.sh export JAVA_HOME=/usr/java/jdk1.8.0_181-amd64 export YARN_RESOURCEMANAGER_USER=root export YARN_NODEMANAGER_USER=root
4.3 编辑core-site.xml 文件
cd /opt/bigdata/hadoop/etc/hadoop vim 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> ----
4.4 编辑 hdfs-site.xml
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> sshfence shell(/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> -----
4.5 编辑 yarn-site.xml
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> -----
4.5 编辑 mapred-site.xml
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> -----
4.6 修改works 文件
fat01.flyfish.com fat02.flyfish.com fat03.flyfish.com
4.8 打包 同步所有节点
fat01.flyfish.com 节点: cd /opt/bigdata/ tar -zcvf hadoop.tar.gz hadoop scp 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.gz fat03.flyfish.com 节点操作 cd /opt/bigdata/ tar -zxvf hadoop.tar.gz
4.9 启动所有节点的journalnode服务
cd /opt/bigdata/hadoop/ sbin/hadoop-daemon.sh start journalnode
4.10 启动namenode 节点的HDFS
格式化hdfs hdfs namenode -format
将fat01.flyfish.com上生成的data文件夹复制到fat02.flyfish.com的相同目录下 cd /opt/bigdata/hadoop/ scp -r data/ root@192.168.11.195:/opt/bigdata/hadoop/ 启动namenode hdfs --daemon start namenode
fat02.flyfish.com 执行 备用节点: hdfs namenode -bootstrapStandby hdfs --daemon start namenode
4.11格式化ZK 在fat01.flyfish.com上面执行
cd /opt/bigdata/hadoop/bin ./hdfs zkfc –formatZK
4.12 停掉/启动 hdfs 的所有 服务
cd /opt/bigdata/hadoop/sbin/ ./stop-dfs.sh ./start-dfs.sh
打开hdfs 的web页面
4.12 启动yarn
cd /opt/bigdata/hadoop/ sbin/start-yarn.sh 启动 yarn sbin/stop-yarn.sh 停掉 yarn
启动日志聚合功能: cd /opt/bigdata/hadoop/sbin/ ./mr-jobhistory-daemon.sh start historyserver
五:关于 HA 的测试
5.1 hdfs HA 测试
当前节点fat02.flyfish.com 的hdfs 是active 状态 把 fat02.flyfish.com 的 NN 服务停掉 jps kill -9 94030 fat01.flyfish.com 上的 NN 节点立马变为 active 状态
然后启动fat02.flyfish.com 的NN 节点 hdfs --daemon start namenode fat02.flyfish.com 上面的NN 变为standby
5.2 yarn 的HA 测试
提交一个job hdfs dfs -mkdir /input hdfs dfs -put word.txt /input cd /opt/bigdata/hadoop/ bin/yarn jar share/hadoop/mapreduce/hadoop-mapreduce-examples-3.2.1.jar wordcount /input /output1

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
微服务电商项目技术全解析
一、项目介绍 7d-mall-microservice是一套微服务电商,其是在开源电商项目 mall-swarm 上进行了改造,采用了 Spring Cloud Hoxton & Alibaba、Spring Boot 2.3、Oauth2、MyBatis、Docker、k8s、Elasticsearch 等核心技术。7d-mall-microservice在电商业务的基础集成了注册中心、配置中心、监控中心、网关等系统功能。。 项目地址:https://github.com/xncssj/7d-mall-microservice 二、整体结构 系统架构: 工程组织结构: 7d-mall├──mall-common--工具类及通用代码模块├──mall-mbg--MyBatisGenerator生成的数据库操作代码模块├──mall-auth--基于SpringSecurityOauth2的统一的认证中心├──mall-gateway--基于SpringCloudGateway的微服务API网关服务├──mall-monitor--基于SpringBootAdmin的微服务监控中...
- 下一篇
如何让消息队列达到最大吞吐量?
你在使用消息队列的时候关注过吞吐量吗? 思考过吞吐量的影响因素吗? 考虑过怎么提高吗? 总结过最佳实践吗? 本文带你一起探讨下消息队列消费端高吞吐的 Go 框架实现。Let’s go! 关于吞吐量的一些思考 写入消息队列吞吐量取决于以下两个方面 网络带宽 消息队列(比如Kafka)写入速度 最佳吞吐量是让其中之一打满,而一般情况下内网带宽都会非常高,不太可能被打满,所以自然就是讲消息队列的写入速度打满,这就就有两个点需要平衡 批量写入的消息量大小或者字节数多少 延迟多久写入 go-zero 的 PeriodicalExecutor 和 ChunkExecutor 就是为了这种情况设计的 从消息队列里消费消息的吞吐量取决于以下两个方面 消息队列的读取速度,一般情况下消息队列本身的读取速度相比于处理消息的速度都是足够快的 处理速度,这个依赖于业务 这里有个核心问题是不能不考虑业务处理速度,而读取过多的消息到内存里,否则可能会引起两个问题: 内存占用过高,甚至出现OOM,pod 也是有 memory limit 的 停止 pod 时堆积的消息来不及处理而导致消息丢失 解决方案和实现 借用一下...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- MySQL8.0.19开启GTID主从同步CentOS8
- CentOS7安装Docker,走上虚拟化容器引擎之路
- SpringBoot2全家桶,快速入门学习开发网站教程
- CentOS8编译安装MySQL8.0.19
- SpringBoot2配置默认Tomcat设置,开启更多高级功能
- SpringBoot2整合Thymeleaf,官方推荐html解决方案
- CentOS7,CentOS8安装Elasticsearch6.8.6
- Windows10,CentOS7,CentOS8安装Nodejs环境
- Springboot2将连接池hikari替换为druid,体验最强大的数据库连接池
- CentOS8安装MyCat,轻松搞定数据库的读写分离、垂直分库、水平分库