三台PC服务器部署Hadoop HA(Hadoop 高可用性架构)
写在前边的话:
转载请注明出处:@http://blog.csdn.net/gamer_gyt,Thinkagmer 撰写
之前是在自己电脑上部署的hadoop集群,但并未涉及到HA配置,这次将集群迁移到PC服务器,但是问题来了,只有三台,但是我还想配置HA,PC服务器是CentOS6.5,原来想着在上边部署VM,从而部署HA集群,但经测试,未果,遂弃之,就想到了在三台机器上部署HA集群。
hadoop伪分布部署参考:点击打开链接
hadoop单机版部署参考:点击打开链接
zookeeper,hive,hbase的分布式部署参考:点击链接
Spark,Sqoop,Mahout的分布式部署参考:点击链接
步骤和部署hadoop集群(点击阅读)是一样的,只是这里加入了HA的一些配置,记录如下
关于HA架构的知识请移步该篇博客:Hadoop 容错之1.X的单点故障 到 2.X的HA和HDFS Federation
一:架构说明
IP hostname role
192.168.132.27 master1 主节点
192.168.132.28 master2 备份主节点
192.168.132.29 slaver1 从节点
zookeeper的三个节点集群,部署在这三台机子上
二:部署Zookeeper
Hadoop HA的部署依赖于ZK来切换主节点,所以在部署Hadoop HA之前需要先把Zookeeper集群搞定,部署参考:点击阅读
三:部署HA
1:文件配置
除了配置文件mapred-site.xml,core-site.xml,hdfs-site.xml,yarn-site.xml之外和hadoo集群部署一样,这里不做陈述,可参考:点击阅读
mapred-site.xml:
<configuration> <property> <name>mapreduce.framework.name</name> <value>yarn</value> </property> </configuration>
core-site.xml:
<configuration> <!-- 指定hdfs的nameservice为ns --> <property> <name>fs.defaultFS</name> <value>hdfs://master</value> <!--1.x中为fs.default.name, 一定得是namenode的hostname或者 ip,并且不用加端口号(这里的名称与HA配置hdfs-site.xml中的dfs.nameservices必须保持一致) --> </property> <property> <name>hadoop.tmp.dir</name> <value>/opt/bigdata/hadoop/tmp</value> <!-- 指定hadoop临时目录 --> </property> <!-- 配置HA时才用配置该项 --> <property> <name>ha.zookeeper.quorum</name> <value>master1:2181,master2:2181,slaver1:2181</value> <!--各个ZK节点的IP/host,及客户端连接ZK的端口,该端口需与zoo.cfg中的 clientPort一致! --> </property> </configuration>
hdfs-site.xml:
<configuration> <property> <name>dfs.replication</name> <value>2</value> </property> <property> <name>dfs.namenode.name.dir</name> <value>file:///opt/bigdata/hadoop/dfs/name</value> </property> <property> <name>dfs.datanode.data.dir</name> <value>file:///opt/bigdata/hadoop/dfs/data</value> </property> <property> <name>dfs.webhdfs.enabled</name> <value>true</value> <!-- 在NN和DN上开启WebHDFS (REST API)功能,不是必须 --> </property> <!-- HA配置需要加如下配置--> <property> <name>dfs.nameservices</name> <value>master</value> <!--给hdfs集群起名字,这个名字必须和core-site中的统一,且下面也会用到该名字,需要和core-site.xml中的保持一致 --> </property> <property> <name>dfs.ha.namenodes.master</name> <value>nn1,nn2</value> <!-- master1下面有两个NameNode,分别是nn1,nn2,指定NameService是cluster1时的namenode有哪些,这里的值也是逻辑名称,名字随便起,相互不重复即可 --> </property> <property> <name>dfs.namenode.rpc-address.master.nn1</name> <value>master1:9000</value> <!-- nn1的RPC通信地址 --> </property> <property> <name>dfs.namenode.rpc-address.master.nn2</name> <value>master2:9000</value> <!-- nn2的RPC通信地址 --> </property> <property> <name>dfs.namenode.http-address.master.nn1</name> <value>master1:50070</value> <!-- nn1的http通信地址 --> </property> <property> <name>dfs.namenode.http-address.master.nn2</name> <value>master2:50070</value> <!-- nn2的http通信地址 --> </property> <property> <name>dfs.namenode.servicerpc-address.master.nn1</name> <value>master1:53310</value> </property> <property> <name>dfs.namenode.servicerpc-address.master.nn2</name> <value>master2:53310</value> </property> <property> <name>dfs.namenode.shared.edits.dir</name> <value>qjournal://master1:8485;master2:8485;slaver1:8485/master</value> <!-- 指定NameNode的元数据在JournalNode上的存放位置 --> </property> <property> <name>dfs.journalnode.edits.dir</name> <value>/opt/bigdata/hadoop/dfs/jndata</value> <!-- 指定JournalNode在本地磁盘存放数据的位置 --> </property> <property> <name>dfs.ha.automatic-failover.enabled</name> <value>true</value> <!-- 开启NameNode失败自动切换 --> </property> <property> <name>dfs.client.failover.proxy.provider.master</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.ha.fencing.ssh.private-key-files</name> <value>/root/.ssh/id_rsa</value> <!-- 使用sshfence隔离机制时需要ssh免登陆 --> </property> <property> <name>dfs.ha.fencing.ssh.connect-timeout</name> <value>3000</value> <!-- 配置sshfence隔离机制超时时间 --> </property> </configuration>
yarn-site.xml:
<configuration> <!-- Site specific YARN configuration properties --> <property> <name>yarn.resourcemanager.ha.enabled</name> <value>true</value> <!-- 开启RM高可用 --> </property> <property> <!--启动自动故障转移,默认为false--> <name>yarn.resourcemanager.ha.automatic-failover.enabled</name> <value>true</value> </property> <property> <!--启用一个内嵌的故障转移,与ZKRMStateStore一起使用。--> <name>yarn.resourcemanager.ha.automatic-failover.embedded</name> <value>true</value> </property> <property> <name>yarn.resourcemanager.cluster-id</name> <value>yrc</value> <!-- 指定RM的cluster id --> </property> <property> <name>yarn.resourcemanager.ha.rm-ids</name> <value>rm1,rm2</value> <!-- 指定RM的名字 --> </property> <property> <name>yarn.resourcemanager.hostname.rm1</name> <value>master1</value> <!-- 分别指定RM的地址 --> </property> <property> <name>yarn.resourcemanager.hostname.rm2</name> <value>master2</value> <!-- 分别指定RM的地址 --> </property> <property> <name>yarn.resourcemanager.ha.id</name> <value>rm1</value> <!--如果是在主NN上 这里写rm1 如果这个配置文件是在备NN上 这里写rm2,否则RM的高可用会出问题--> <description>If we want to launch more than one RM in single node, we need this configuration</description> </property> <property> <name>yarn.resourcemanager.recovery.enabled</name> <value>true</value> </property> <property> <name>yarn.resourcemanager.store.class</name> <value>org.apache.hadoop.yarn.server.resourcemanager.recovery.ZKRMStateStore</value> </property> <property> <name>yarn.resourcemanager.zk-address</name> <value>master1:2181,master2:2181,slaver1:2181</value> <!-- 指定zk集群地址 --> </property> <property> <name>yarn.nodemanager.aux-services</name> <value>mapreduce_shuffle</value> </property> </configuration>
2:启动服务,测试NameNode的自动切换
PS:一定要注意启动的顺序,否则会出现各种各样的错误,亲测
每台机器上启动Zookeeper:bin/zkServer.sh start
zookeeper集群格式化(任意一个主节点上执行即可):bin/hdfs zkfc -formatZK
每台机器上启动 journalnode:sbin/hadoop-daemon.sh start journalnode (如果这里不启动的话,在进行hdfs格式化的时候就会报错,同时这个进程只需在格式化的时候启动,后续启动服务则不需要)
hdfs集群格式化(master1上进行):bin/hadoop namenode -format
看到 “0” 表示成功了
master1机器上启动服务:sbin/start-dfs.sh sbin/start-yarn.sh
执行jps查看进行如下(master1,master2,slaver1):
master1(192.168.132.27)的web界面显示如下:
备用NN同步主NN的元数据信息(master2上执行): bin/hdfs namenode -bootstrapStandby
启动备用NN(master2上执行): sbin/hadoop-daemon.sh start namenode
执行jps(master2上执行):
Web访问:
测试主NN和备用NN的切换:kill掉主NN进程 kill namenode_id
再次刷新master2对应的web,实现自动切换:
3:测试Resourcemanager自动切换
访问主NN的8088端口如下:
备用NN的8088端口:
kill 掉主NN的resourcemanager服务再次访问从NN的8088端口
OK!大功告成
四:遇见的问题
1:NameNode格式化失败
错误:failed on connection exception: java.net.ConnectException: Connection refused
解决办法:先启动Zookeeper集群,在用sbin/hadoop-daemon.sh start journalnode 启动各个NameNode上的JournalNode进程,然后再进行格式化
该错误参考博客:http://blog.csdn.net/u014729236/article/details/44944773
2:Web显示live nodes 为 0
解决办法:注释掉机子上 hosts文件中的原本的两行
3:master2的NameNode和 ResourceManager不能启动
2016-08-30 06:10:57,558 INFO org.apache.hadoop.http.HttpServer2: HttpServer.start() threw a non Bind IOException java.net.BindException: Port in use: master1:8088 at org.apache.hadoop.http.HttpServer2.openListeners(HttpServer2.java:919) at org.apache.hadoop.http.HttpServer2.start(HttpServer2.java:856) at org.apache.hadoop.yarn.webapp.WebApps$Builder.start(WebApps.java:274) at org.apache.hadoop.yarn.server.resourcemanager.ResourceManager.startWepApp(ResourceManager.java:974) at org.apache.hadoop.yarn.server.resourcemanager.ResourceManager.serviceStart(ResourceManager.java:1074) at org.apache.hadoop.service.AbstractService.start(AbstractService.java:193) at org.apache.hadoop.yarn.server.resourcemanager.ResourceManager.main(ResourceManager.java:1208) Caused by: java.net.BindException: Cannot assign requested address at sun.nio.ch.Net.bind0(Native Method) at sun.nio.ch.Net.bind(Net.java:444) at sun.nio.ch.Net.bind(Net.java:436) at sun.nio.ch.ServerSocketChannelImpl.bind(ServerSocketChannelImpl.java:214) at sun.nio.ch.ServerSocketAdaptor.bind(ServerSocketAdaptor.java:74) at org.mortbay.jetty.nio.SelectChannelConnector.open(SelectChannelConnector.java:216) at org.apache.hadoop.http.HttpServer2.openListeners(HttpServer2.java:914) ... 6 more端口被占用了,这时候要修改yarn-site.xml 中
<property> <name>yarn.resourcemanager.ha.id</name> <value>rm2</value> <description>If we want to launch more than one RM in single node, we need this configuration</description> </property>此时再次启动OK
4:NameNode不能自动切换
<property> <name>dfs.ha.fencing.methods</name> <value>shell(/bin/true)</value> <!-- 配置隔离机制方法,多个机制用换行分割,即每个机制暂用一行--> </property>
五:总结

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
开源大数据周刊-第20期
阿里云E-Mapreduce动态 E-Mapreduce团队 1.5.0版本(正在研发) 增加集群整体运行情况的仪表盘 访问OSS不需要写id、key,增强安全性 集群其中后,可以重启、修改配置及安装软件 1.6.0版本 交互式查询(支持hive、spark) 资讯 对话Hadoop之父Doug Cutting|大数据和开源的未来主要点有:新硬件、Spark、Hadoop上云、中国大数据技术的发展、开源 E-MapReduce助力建设企业级数据仓库当业务系统在阿里云上,使用E-MapReduce建立数据仓库也是数天的事情 大数据,为什么不是传统BI的简单升级?大数据与传统BI是社会发展到不同阶段的产物,大数据对于传统BI,既有继承,也有发展,从”道”的角度讲,BI与大数据区别在于前者更倾向于决策,对事实描述更多是基于群体共性,帮助决策者掌握宏观统计趋势
- 下一篇
Hadoop 生态系统
1.概述 最近收到一些同学和朋友的邮件,说能不能整理一下 Hadoop 生态圈的相关内容,然后分享一些,我觉得这是一个不错的提议,于是,花了一些业余时间整理了 Hadoop 的生态系统,并将其进行了归纳总结,进而将其以表格的形式进行了罗列。涉及的内容有以下几点: 分布式文件系统 分布式编程模型 NoSQL 数据库 SQL-On-Hadoop 数据采集 编程服务中间件 调度系统 系统部署 数据可视化 2.内容 2.1 分布式文件系统 2.1.1 Apache HDFS 在分布式文件系统当中,首先为大家所熟悉的是 Apache 的 HDFS。全称为 Hadoop Distributed File System,由多台机器组建的集群,存储大数据文件。HDFS 的灵感来自于 Google File System(GFS)。Hadoop 2.x 版本之前,NameNode 是存在单点故障的。在 ZooKeeper 的高可用性功能解决了 HDFS 的这个问题,通过提供运行两个冗余的节点在同一个集群中进行主备切换,即:Active & Standby 相关链接地址如下所示: Apache H...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- CentOS8,CentOS7,CentOS6编译安装Redis5.0.7
- Red5直播服务器,属于Java语言的直播服务器
- SpringBoot2编写第一个Controller,响应你的http请求并返回结果
- Springboot2将连接池hikari替换为druid,体验最强大的数据库连接池
- Docker使用Oracle官方镜像安装(12C,18C,19C)
- SpringBoot2整合MyBatis,连接MySql数据库做增删改查操作
- Eclipse初始化配置,告别卡顿、闪退、编译时间过长
- SpringBoot2初体验,简单认识spring boot2并且搭建基础工程
- Jdk安装(Linux,MacOS,Windows),包含三大操作系统的最全安装
- Windows10,CentOS7,CentOS8安装MongoDB4.0.16