Setting Up Hadoop NameNode High Availability
Hadoop2.0以后,2个NameNode的数据其实是实时共享的。新HDFS采用了一种共享机制,Quorum Journal Node(JournalNode)集群或者Nnetwork File System(NFS)进行共享。NFS是操作系统层面的,JournalNode是hadoop层面的,本文使用JournalNode集群进行数据共享(这也是主流的做法)。如下图所示,便是JournalNode的架构图。
两个NameNode为了数据同步,会通过一组称作JournalNodes的独立进程进行相互通信。当active状态的NameNode的命名空间有任何修改时,会告知大部分的JournalNodes进程。standby状态的NameNode有能力读取JNs中的变更信息,并且一直监控edit log的变化,把变化应用于自己的命名空间。standby可以确保在集群出错时,命名空间状态已经完全同步了。
对于HA集群而言,确保同一时刻只有一个NameNode处于active状态是至关重要的。否则,两个NameNode的数据状态就会产生分歧,可能丢失数据,或者产生错误的结果。为了保证这点,这就需要利用使用ZooKeeper了。首先HDFS集群中的两个NameNode都在ZooKeeper中注册,当active状态的NameNode出故障时,ZooKeeper能检测到这种情况,它就会自动把standby状态的NameNode切换为active状态。
一、NameNode HA搭建
1.1 环境介绍
本文的环境如下表所示:
1.2 环境设置
针对hadoop集群环境需要设置SSH免密码登录以及安装JDK。在搭建hadoop集群的时候,已经设置了,这里直接省略.....
1.3 Zookeeper集群搭建
请参考我的博客链接:Configuring Zookeeper Cluster
1.4 编辑core-site.xml,追加以下内容
<!--修改HDFS的Nameservice为NNcluster--><property><name>fs.defaultFS</name><value>hdfs://NNcluster</value></property>
<!--指定Zookeeper地址--><property> <name>ha.zookeeper.quorum</name> <value>hdp01:2181,hdp02:2181,hdp03:2181,hdp04:2181</value> </property>
1.5 编辑hdfs-site.xml,追加以下内容
<!-- Configure NameNode High Availability. -->
<!-- 指定nameservices名称(这个要和core-site.xml文件中的值相同) --><property><name>dfs.nameservices</name><value>NNcluster</value></property>
<!--启用NameNode故障时自动切换--><property> <name>dfs.ha.automatic-failover.enabled</name> <value>true</value> </property>
<!--NNcluster下面有两个NameNode,分别是nn1,nn2--><property><name>dfs.ha.namenodes.NNcluster</name><value>nn1,nn2</value></property>
<!--nn1对应hdp01--><property> <name>dfs.namenode.rpc-address.ns.nn1</name> <value>hdp01:9000</value> </property>
<!--nn2对应hdp02--><property> <name>dfs.namenode.rpc-address.ns.nn2</name> <value>hdp02:9000</value> </property><property><name>dfs.namenode.rpc-address.NNcluster.nn1</name><value>hdp01:8020</value></property><property><name>dfs.namenode.rpc-address.NNcluster.nn2</name><value>hdp02:8020</value></property><property><name>dfs.namenode.http-address.NNcluster.nn1</name><value>hdp01:50070</value></property><property><name>dfs.namenode.http-address.NNcluster.nn2</name><value>hdp02:50070</value></property>
<!--指定NameNode的元数据在JournalNode上的存放位置,一般JournalNode为奇数个,这里配置不合理--><property><name>dfs.namenode.shared.edits.dir</name><value>qjournal://hdp01:8485;hdp02:8485;hdp03:8485;hdp04:8485/NNcluster</value></property>
<!-- 配置失败自动切换实现方式 --><property><name>dfs.client.failover.proxy.provider.NNcluster</name><value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value></property>
<!-- 配置隔离机制 --> <property><name>dfs.ha.fencing.methods</name><value>sshfence</value></property>
<!-- 使用隔离机制时需要ssh免登陆 --><property><name>dfs.ha.fencing.ssh.private-key-files</name><value>/home/hadoop/.ssh/id_rsa</value></property>
如果要启用NameNode的自动切换特性,必须配置oozie high availability,只需在oozie-env.sh里定义OOZIE_HTTP_HOSTNAME即可。这个名称对应的IP必须是可漂移的IP。
1.6 同步文件☞其他节点
[hadoop@hdp01 hadoop]$ for i in {2..4};do scp hdfs-site.xml* hdp0$i:/u01/hadoop/etc/hadoop;done
[hadoop@hdp01 hadoop]$ for i in {2..4};do scp core-site.xml hdp0$i:/u01/hadoop/etc/hadoop;done
二、启动服务
2.1 启动JournalNode服务
现在主节点启动,然后在其他节点启动:
[hadoop@hdp01 hadoop]$ for i in {1..4};do ssh hdp0$i 'source .bash_profile;hadoop-daemon.sh start journalnode';done
starting journalnode, logging to /u01/hadoop/logs/hadoop-hadoop-journalnode-hdp01.out
starting journalnode, logging to /u01/hadoop/logs/hadoop-hadoop-journalnode-hdp02.out
starting journalnode, logging to /u01/hadoop/logs/hadoop-hadoop-journalnode-hdp03.out
starting journalnode, logging to /u01/hadoop/logs/hadoop-hadoop-journalnode-hdp04.out
2.2 初始化JournalNodes
分别在各个节点执行以下命令:
[hadoop@hdp01 hadoop]$ for i in {1..4};do ssh hdp$i 'source .bash_profile;hdfs namenode -initializeSharedEdits -force';done
如果不想在交互模式下执行上述命令,就加-force和-nonInteractive参数即可。
2.3 初始化ZooKeeper中的HA状态
这步只需在Master节点执行即可,如下:
[hadoop@hdp01 hadoop]$ hdfs zkfc -formatZK -force
启动zkfc服务:
[hadoop@hdp01 hadoop]$ hadoop-daemons.sh start zkfc
Standby节点启动namenode服务:
[hadoop@hdp02 ~]$ hdfs namenode -bootstrapStandby -force
2.4 重启hadoop集群(可选项)
[hadoop@hdp01 ~]$ stop-yarn.sh;stop-dfs.sh
[hadoop@hdp01 ~]$ start-dfs.sh;start-yarn.sh
2.5 节点状态验证
[hadoop@hdp01 ~]$ hdfs haadmin -getServiceState nn1
active
[hadoop@hdp01 ~]$ hdfs haadmin -getServiceState nn2
standby
三、测试NameNode HA的高可用性
如2.5看到的,nn1状态为active,nn2状态为standby,停止nn1的namenode服务,看是否可以自动切换,如下:
[hadoop@hdp01 ~]$ hadoop-daemon.sh stop namenode
stopping namenode
[hadoop@hdp01 ~]$ hdfs haadmin -getServiceState nn1
18/01/03 11:30:36 INFO ipc.Client: Retrying connect to server: hdp01/192.168.120.96:8020. Already tried 0 time(s); retry policy is RetryUpToMaximumCountWithFixedSleep(maxRetries=1, sleepTime=1000 MILLISECONDS)
Operation failed: Call From hdp01/192.168.120.96 to hdp01:8020 failed on connection exception: java.net.ConnectException: Connection refused; For more details see: http://wiki.apache.org/hadoop/ConnectionRefused
[hadoop@hdp01 ~]$ hdfs dfs -ls /
Found 6 items
drwxr-xr-x - hadoop supergroup 0 2017-12-27 10:27 /hbase
drwxrwxrwt - hadoop hadoop 0 2017-12-21 15:04 /logs
drwxrwx--- - hadoop supergroup 0 2017-12-21 15:03 /mr-history
drwxr-xr-x - hadoop supergroup 0 2017-12-11 19:56 /spark
drwxrwxrwx - hadoop supergroup 0 2017-12-26 11:41 /tmp
drwxr-xr-x - hadoop supergroup 0 2017-12-26 11:05 /user
经验证可以正常使用。开启nn1的namenode服务,如下:
[hadoop@hdp01 ~]$ hadoop-daemon.sh start namenode
starting namenode, logging to /u01/hadoop/logs/hadoop-hadoop-namenode-hdp01.out
[hadoop@hdp01 ~]$ hdfs haadmin -getServiceState nn1
standby
四、应用配置
4.1 Hbase设置
修改hbase-site.xml中的hbase.rootdir,如下:
--修改前:<property><name>hbase.rootdir</name><value>hdfs://hdp01:9000/hbase</value></property>
--修改后:<property><name>hbase.rootdir</name><value>hdfs://NNcluster/hbase</value></property>
链接hadoop的配置文件☞hbase的conf目录下:
--如果HBase HA模式,主备节点以及regionservers节点都要做如下链接
[hadoop@hdp01 ~]$ ln -s /u01/hadoop/etc/hadoop/hdfs-site.xml /u01/hbase/conf/hdfs-site.xml
[hadoop@hdp01 ~]$ ln -s /u01/hadoop/etc/hadoop/core-site.xml /u01/hbase/conf/core-site.xml
如果不做上述链接,则在启动hbase的过程会报错(虽然启动成功,但有些操作不能执行),而且regionservers也会启动失败。报错信息如下:
[hadoop@hdp01 conf]$ hbase shell
HBase Shell; enter 'help<RETURN>' for list of supported commands.
Type "exit<RETURN>" to leave the HBase Shell
Version 1.3.1, r930b9a55528fe45d8edce7af42fef2d35e77677a, Thu Apr 6 19:36:54 PDT 2017hbase(main):001:0> statusERROR: org.apache.hadoop.hbase.PleaseHoldException: Master is initializingat org.apache.hadoop.hbase.master.HMaster.checkInitialized(HMaster.java:2452)at org.apache.hadoop.hbase.master.MasterRpcServices.getClusterStatus(MasterRpcServices.java:792)at org.apache.hadoop.hbase.protobuf.generated.MasterProtos$MasterService$2.callBlockingMethod(MasterProtos.java:58519)at org.apache.hadoop.hbase.ipc.RpcServer.call(RpcServer.java:2339)at org.apache.hadoop.hbase.ipc.CallRunner.run(CallRunner.java:123)at org.apache.hadoop.hbase.ipc.RpcExecutor$Handler.run(RpcExecutor.java:188)at org.apache.hadoop.hbase.ipc.RpcExecutor$Handler.run(RpcExecutor.java:168)
正常的执行结果如下:
hbase(main):001:0> status
1 active master, 1 backup masters, 3 servers, 0 dead, 0.6667 average load
4.2 Hive设置
编辑hive-site.xml文件,修改如下内容:
--变更前<property><name>hive.metastore.warehouse.dir</name><value>hdfs://hdp01:9000/user/hive/warehouse</value><description>location of default database for the warehouse</description></property>
--变更后<property><name>hive.metastore.warehouse.dir</name><value>hdfs://NNcluster/user/hive/warehouse</value><description>location of default database for the warehouse</description></property>
Hive的元数据库修改:
主要修改两张表:DBS和SDS。
其中DBS里定义了数据库的位置信息,如下图:
而SDS定义了表的位置信息:
如果以上两张表不做修改,则在对表进行操作的时候,会报如下错误:
修改后的结果如下:
查询验证:
转载于:https://blog.51cto.com/candon123/2057016
Setting Up Hadoop NameNode High Availability相关推荐
- hadoop namenode ha方案
Hadoop 2.0 NameNode HA和Federation实践 Posted on 2012/12/10 一.背景 天云趋势在2012年下半年开始为某大型国有银行的历史交易数据备份及查询提供基 ...
- hadoop namenode启动不了_集群版hadoop安装,写给大忙人看的
导语 如果之前的单机版hadoop环境安装满足不了你,集群版hadoop一定合你胃口,轻松入手. 目录 集群规划 前置条件 配置免密登录 3.1 生成密匙 3.2 免密登录 3.3 验证免密登录 集群 ...
- Hadoop Namenode不能启动
自己在虚拟机上建立伪分布环境,第一天还一切正常,后来发现每次重新开机以后都不能正常启动,在start-dfs.sh之后jps一下发现namenode不能正常启动,按提示找到logs目录下namenod ...
- Hadoop namenode无法启动问题解决
Hadoop namenode无法启动问题解决 参考文章: (1)Hadoop namenode无法启动问题解决 (2)https://www.cnblogs.com/unflynaomi/p/447 ...
- Hadoop Namenode元数据文件 Fsimage、editlog、seen_txid说明
Hadoop NameNode元数据的$dfs.namenode.name.dir/current/文件夹有几个文件: current/ 2|-- VERSION 3|-- edits_* 4|-- ...
- 大规模集群下Hadoop NameNode如何承载每秒上千次的高并发访问
目录 一.问题源起 二.HDFS优雅的解决方案 (1)分段加锁机制 + 内存双缓冲机制 (2)多线程并发吞吐量的百倍优化 (3)缓冲数据批量刷磁盘 + 网络的优化 四.总结 五.参考文章 一.问题源起 ...
- hadoop namenode启动不了_Hadoop框架:HDFS高可用环境配置
一.HDFS高可用 1.基础描述 在单点或者少数节点故障的情况下,集群还可以正常的提供服务,HDFS高可用机制可以通过配置Active/Standby两个NameNodes节点实现在集群中对NameN ...
- hadoop NameNode HA 和ResouceManager HA
官网配置地址: HDFS HA : http://hadoop.apache.org/docs/current/hadoop-project-dist/hadoop-hdfs/HDFSHighAvai ...
- Hadoop namenode启动瓶颈分析
转载:http://blog.csdn.net/AE86_FC/archive/2010/08/26/5842020.aspx NameNode启动过程详细剖析 NameNode中几个关键的数据结构 ...
最新文章
- IT 需要知道的一些专业名词和解释 (长期更新)
- python面对对象汉诺塔_如何使用python实现的汉诺塔的小程序
- 转https_免费!这个PPT转PDF的方法不学可惜!
- CBT的完整形式是什么?
- 机器学习速成课程 | 练习 | Google Development——编程练习:创建和操控张量
- python中typeerror是什么意思_TypeError:在Python中
- VisualBox安装Ubuntu18.04后续操作:换源、IP、LAMP、phpmyadmin
- Chrome 开发者工具(DevTools)中所有快捷方式列表
- 组合,聚合,关联,依赖 的区别
- python怎么用散点图_怎么用Python画散点图
- php前台切图,php网页切图/js切图
- CICD实战——使用Jenkins实现自动化部署和环境隔离
- 对话MVP丨腾讯崔冉的十年“技术马拉松”
- 明港镇计算机培训班,平桥区建筑工匠培训班在明港新集村开班
- 1.2样本空间和随机事件
- sql server时间格式
- Spark系列之SparkSubmit提交任务到YARN
- WIN10系统休眠文件与保留存储
- 制造费用分配方法(一)
- PS工作区拖动乱了如何复位?