HDFS-HA原理及配置

1.HDFS-HA架构原理介绍

  hadoop2.x之后,Clouera提出了QJM/Qurom Journal Manager,这是一个基于Paxos算法实现的HDFS HA方案,它给出了一种较好的解决思路和方案,示意图如下:

  • 基本原理就是用2N+1台 JN 存储EditLog,每次写数据操作有大多数(>=N+1)返回成功时即认为该次写成功,数据不会丢失了。当然这个算法所能容忍的是最多有N台机器挂掉,如果多于N台挂掉,这个算法就失效了。这个原理是基于Paxos算法
  • 在HA架构里面SecondaryNameNode这个冷备角色已经不存在了,为了保持standby NN时时的与主Active NN的元数据保持一致,他们之间交互通过一系列守护的轻量级进程JournalNode
  • 任何修改操作在 Active NN上执行时,JN进程同时也会记录修改log到至少半数以上的JN中,这时 Standby NN 监测到JN 里面的同步log发生变化了会读取 JN 里面的修改log,然后同步到自己的的目录镜像树里面,如下图:

  当发生故障时,Active的 NN 挂掉后,Standby NN 会在它成为Active NN 前,读取所有的JN里面的修改日志,这样就能高可靠的保证与挂掉的NN的目录镜像树一致,然后无缝的接替它的职责,维护来自客户端请求,从而达到一个高可用的目的。

2.HDFS-HA 详细配置

1)环境准备

  根据以上介绍,要完成HA的配置则必须要添加一个NameNode(2号节点)和三个JournalNode。为了和我们之前配置的非HA避免冲突,我们选择对原来的环境进行备份,然后在备份的基础上重新配置HA环境,即两个环境隔离开互不影响。

[kfk@bigdata-pro01 etc]$ ls

hadoop

[kfk@bigdata-pro01 etc]$ cp -r hadoop/ dist-hadoop

[kfk@bigdata-pro01 etc]$ ls

dist-hadoop  hadoop

[kfk@bigdata-pro01 etc]$ cd ..

[kfk@bigdata-pro01 hadoop-2.6.]$ ls

bin  data  etc  include  lib  libexec  LICENSE.txt  logs  NOTICE.txt  README.txt  sbin  share

[kfk@bigdata-pro01 hadoop-2.6.]$ cd data/

[kfk@bigdata-pro01 data]$ ls

tmp

[kfk@bigdata-pro01 data]$ mv tmp/ dist-tmp

[kfk@bigdata-pro01 data]$ mkdir tmp

[kfk@bigdata-pro01 data]$ ls

dist-tmp  tmp

2)修改hdfs-site.xml配置文件

vi hdfs-site.xml

<configuration>

        <property>

                <name>dfs.replication</name>

                <value></value>

        </property>

        <property>

                <name>dfs.permissions</name>

                <value>false</value>

        </property>

        <property>

                <name>dfs.permissions.enabled</name>

                <value>false</value>

        </property>

        <property>

                <name>dfs.nameservices</name>

                <value>ns</value>

        </property>

        <property>

                <name>dfs.ha.namenodes.ns</name>

                <value>nn1,nn2</value>

        </property>

        <property>

                <name>dfs.namenode.rpc-address.ns.nn1</name>

                <value>bigdata-pro01.kfk.com:</value>

        </property>

               <property>

                <name>dfs.namenode.rpc-address.ns.nn2</name>

                <value>bigdata-pro02.kfk.com:</value>

        </property>

        <property>

                <name>dfs.namenode.http-address.ns.nn1</name>

                <value>bigdata-pro01.kfk.com:</value>

        </property>

        <property>

                <name>dfs.namenode.http-address.ns.nn2</name>

                <value>bigdata-pro02.kfk.com:</value>

        </property>

        <property>

                <name>dfs.namenode.shared.edits.dir</name>

                <value>qjournal://bigdata-pro01.kfk.com:8485;bigdata-pro02.kfk.com:8485;bigdata-pro03.kfk.com:8485/ns</value>

        </property>

               <property>

                <name>dfs.journalnode.edits.dir</name>

                <value>/opt/modules/hadoop-2.6./data/jn</value>

        </property>

               <property>

                <name>dfs.client.failover.proxy.provider.ns</name>

                <value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>

        </property>

               <property>

                <name>dfs.ha.automatic-failover.enabled.ns</name>

                <value>true</value>

        </property>   

               <property>

                       <name>ha.zookeeper.quorum</name>

                       <value>bigdata-pro01.kfk.com:,bigdata-pro02.kfk.com:,bigdata-pro03.kfk.com:</value>

               </property>

               <property>

                       <name>dfs.ha.fencing.methods</name>

                       <value>sshfence</value>

               </property>

        <property>

                <name>dfs.ha.fencing.ssh.private-key-files</name>

                <value>/home/kfk/.ssh/id_rsa</value>

        </property>

</configuration>

  然后创建JournalNode日志目录:

[kfk@bigdata-pro01 data]$ mkdir jn

[kfk@bigdata-pro01 data]$ ls

dist-tmp  jn  tmp

[kfk@bigdata-pro01 data]$ cd jn

[kfk@bigdata-pro01 jn]$ pwd

/opt/momdules/hadoop-2.6./data/jn

3)修改core-site.xml配置文件

  <configuration>

        <property>

               <name>fs.defaultFS</name>

               <value>hdfs://ns</value>

        </property>

        <property>

               <name>hadoop.http.staticuser.user</name>

               <value>kfk</value>

        </property>

        <property>

               <name>hadoop.tmp.dir</name>

               <value>/opt/modules/hadoop-2.6./data/tmp</value>

        </property>

        <property>

               <name>dfs.namenode.name.dir</name>

               <value>file://${hadoop.tmp.dir}/dfs/name</value>

        </property>

</configuration>

4)将修改的配置分发到其他节点

  先同样对非HA环境进行备份:

  然后再将HA环境分发给其他节点:

scp -r hadoop/ bigdata-pro02.kfk.com:/opt/modules/hadoop-2.6./etc

scp -r hadoop/ bigdata-pro03.kfk.com:/opt/modules/hadoop-2.6./etc

3.HDFS-HA 服务启动及自动故障转移测试

1)启动所有节点上面的Zookeeper进程

zkServer.sh start(本次在前面的过程中已经启动了,以后注意启动顺序)

2)启动所有节点上面的journalnode进程

sbin/hadoop-daemon.sh start journalnode

3)在[nn1]上,对namenode进行格式化,并启动

#namenode 格式化

bin/hdfs namenode -format

#格式化高可用并启动1和2节点的zkfc

bin/hdfs zkfc -formatZK

sbin/hadoop-daemon.sh start zkfc

#启动节点一的namenode

sbin/hadoop-daemon.sh start namenode

4)在[nn2]上,同步nn1元数据信息

bin/hdfs namenode -bootstrapStandby

然后启动节点二的namenode

sbin/hadoop-daemon.sh start namenode

5)启动所有节点的DataNode

sbin/hadoop-daemon.sh start datanode

  然后通过命令上传文件至hdfs,检查hdfs是否可用。

[kfk@bigdata-pro01 hadoop-2.6.]$ bin/hdfs dfs -mkdir -p /user/kfk/data

[kfk@bigdata-pro01 hadoop-2.6.]$ bin/hdfs dfs -put /opt/momdules/hadoop-2.6./etc/hadoop/core-site.xml /user/kfk/data

  hdfs启动之后,kill其中active状态的namenode,观察另外一个NameNode是否会自动切换为active状态。然后在节点1(停掉的NameNode)上查看我们刚才上传的文件,如果成功表示HA配置是成功的!

[kfk@bigdata-pro01 hadoop-2.6.]$ sbin/hadoop-daemon.sh stop namenode

stopping namenode

[kfk@bigdata-pro01 hadoop-2.6.]$ bin/hdfs dfs -text /user/kfk/data/core-site.xml

  成功读取!并且两个节点的状态也发生了改变。

YARN-HA原理及配置

1.YARN-HA架构原理及介绍

  ResourceManager HA 由一对Active,Standby结点构成,通过RMStateStore存储内部数据和主要应用的数据及标记。目前支持的可替代的RMStateStore实现有:基于内存的MemoryRMStateStore,基于文件系统的FileSystemRMStateStore,及基于zookeeper的ZKRMStateStore。 ResourceManager HA的架构模式同NameNode HA的架构模式基本一致,数据共享由RMStateStore,而ZKFC成为 ResourceManager进程的一个服务,非独立存在。

2.YARN-HA详细配置

  修改yarn-site.xml配置文件

<configuration>

        <property>

        <name>yarn.nodemanager.aux-services</name>

        <value>mapreduce_shuffle</value>

    </property>

        <property>

               <name>yarn.resourcemanager.ha.enabled</name>

               <value>true</value>

        </property>

        <property>

               <name>yarn.resourcemanager.cluster-id</name>

               <value>rs</value>

        </property>

        <property>

               <name>yarn.resourcemanager.ha.rm-ids</name>

               <value>rm1,rm2</value>

        </property>

        <property>

               <name>yarn.resourcemanager.hostname.rm1</name>

               <value>bigdata-pro01.kfk.com</value>

        </property>

        <property>

               <name>yarn.resourcemanager.hostname.rm2</name>

               <value>bigdata-pro02.kfk.com</value>

        </property>

        <property>

               <name>yarn.resourcemanager.zk-address</name>

               <value>bigdata-pro01.kfk.com:,bigdata-pro02.kfk.com:,bigdata-pro03.kfk.com:</value>

        </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.nodemanager.aux-services.mapreduce_shuffle.class</name>

               <value>org.apache.hadoop.mapred.ShuffleHandler</value>

        </property>

        <property>

        <name>yarn.log-aggregation-enable</name>

        <value>true</value>

    </property>

        <property>

        <name>yarn.log-aggregation.retain-seconds</name>

        <value></value>

    </property>

</configuration>

3)将修改的配置分发到其他节点

scp yarn-site.xml bigdata-pro02.kfk.com:/opt/modules/hadoop-2.6./etc/hadoop/

scp yarn-site.xml bigdata-pro03.kfk.com:/opt/modules/hadoop-2.6./etc/hadoop/

3.YARN-HA服务启动及自动故障转移测试

1)在rm1节点上启动yarn服务

sbin/start-yarn.sh

2)在rm2节点上启动ResourceManager服务

sbin/yarn-daemon.sh start resourcemanager

3)查看yarn的web界面

http://bigdata-pro01.kfk.com:8088

http://bigdata-pro02.kfk.com:8088

4)查看ResourceManager主备节点状态

#bigdata-pro01.kfk.com节点上执行

bin/yarn rmadmin -getServiceState rm1

#bigdata-pro02.kfk.com节点上执行

bin/yarn rmadmin -getServiceState rm2

5)hadoop集群测试WordCount运行

[kfk@bigdata-pro01 hadoop-2.6.]$ bin/yarn jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.6..jar wordcount /user/kfk/data/wc.input /user/kfk/data/output

// :: WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable

// :: INFO input.FileInputFormat: Total input paths to process : 

// :: INFO mapreduce.JobSubmitter: number of splits:

// :: INFO mapreduce.JobSubmitter: Submitting tokens for job: job_1540197665543_0001

// :: INFO impl.YarnClientImpl: Submitted application application_1540197665543_0001

// :: INFO mapreduce.Job: The url to track the job: http://bigdata-pro01.kfk.com:8088/proxy/application_1540197665543_0001/

// :: INFO mapreduce.Job: Running job: job_1540197665543_0001

// :: INFO mapreduce.Job: Job job_1540197665543_0001 running in uber mode : false

// :: INFO mapreduce.Job:  map % reduce %

// :: INFO mapreduce.Job:  map % reduce %

// :: INFO mapreduce.Job:  map % reduce %

// :: INFO mapreduce.Job: Job job_1540197665543_0001 completed successfully

// :: INFO mapreduce.Job: Counters: 

        File System Counters

               FILE: Number of bytes read=

               FILE: Number of bytes written=

               FILE: Number of read operations=

               FILE: Number of large read operations=

               FILE: Number of write operations=

               HDFS: Number of bytes read=

               HDFS: Number of bytes written=

               HDFS: Number of read operations=

               HDFS: Number of large read operations=

               HDFS: Number of write operations=

        Job Counters

               Launched map tasks=

               Launched reduce tasks=

               Data-local map tasks=

               Total time spent by all maps in occupied slots (ms)=

               Total time spent by all reduces in occupied slots (ms)=

               Total time spent by all map tasks (ms)=

               Total time spent by all reduce tasks (ms)=

               Total vcore-seconds taken by all map tasks=

               Total vcore-seconds taken by all reduce tasks=

               Total megabyte-seconds taken by all map tasks=

               Total megabyte-seconds taken by all reduce tasks=

        Map-Reduce Framework

               Map input records=

               Map output records=

               Map output bytes=

               Map output materialized bytes=

               Input split bytes=

               Combine input records=

               Combine output records=

               Reduce input groups=

               Reduce shuffle bytes=

               Reduce input records=

               Reduce output records=

               Spilled Records=

               Shuffled Maps =

               Failed Shuffles=

               Merged Map outputs=

               GC time elapsed (ms)=

               CPU time spent (ms)=

               Physical memory (bytes) snapshot=

               Virtual memory (bytes) snapshot=

               Total committed heap usage (bytes)=

        Shuffle Errors

               BAD_ID=

               CONNECTION=

               IO_ERROR=

               WRONG_LENGTH=

               WRONG_MAP=

               WRONG_REDUCE=

        File Input Format Counters

               Bytes Read=

        File Output Format Counters

               Bytes Written=

[kfk@bigdata-pro01 hadoop-2.6.]$ bin/hdfs dfs -text /user/kfk/data/output/par*

// :: WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable

hadoop  

hbase   

hive    

java    

spark   

以上就是博主为大家介绍的这一板块的主要内容,这都是博主自己的学习过程,希望能给大家带来一定的指导作用,有用的还望大家点个支持,如果对你没用也望包涵,有错误烦请指出。如有期待可关注博主以第一时间获取更新哦,谢谢!同时也欢迎转载,但必须在博文明显位置标注原文地址,解释权归博主所有!

Hadoop2.X HA架构与部署的更多相关文章

  1. 新闻实时分析系统-Hadoop2.X HA架构与部署

    1.HDFS-HA架构原理介绍 hadoop2.x之后,Clouera提出了QJM/Qurom Journal Manager,这是一个基于Paxos算法实现的HDFS HA方案,它给出了一种较好的解 ...

  2. 新闻网大数据实时分析可视化系统项目——5、Hadoop2.X HA架构与部署

    1.HDFS-HA架构原理介绍 hadoop2.x之后,Clouera提出了QJM/Qurom Journal Manager,这是一个基于Paxos算法实现的HDFS HA方案,它给出了一种较好的解 ...

  3. hadoop HA架构安装部署(QJM HA)

    ###################HDFS High Availability Using the Quorum Journal Manager########################## ...

  4. Cloudera Hadoop 5& Hadoop高阶管理及调优课程(CDH5,Hadoop2.0,HA,安全,管理,调优)

    1.课程环境 本课程涉及的技术产品及相关版本: 技术 版本 Linux CentOS 6.5 Java 1.7 Hadoop2.0 2.6.0 Hadoop1.0 1.2.1 Zookeeper 3. ...

  5. hadoop入门(3)——hadoop2.0理论基础:安装部署方法

    一.hadoop2.0安装部署流程         1.自动安装部署:Ambari.Minos(小米).Cloudera Manager(收费)         2.使用RPM包安装部署:Apache ...

  6. Hadoop分布式HA的安装部署

    Hadoop分布式HA的安装部署 前言 单机版的Hadoop环境只有一个namenode,一般namenode出现问题,整个系统也就无法使用,所以高可用主要指的是namenode的高可用,即存在两个n ...

  7. 使用QJM构建HDFS HA架构(2.2+)

    转载自:http://blog.csdn.net/a822631129/article/details/51313145 本文主要介绍HDFS HA特性,以及如何使用QJM(Quorum Journa ...

  8. HDFS HA架构以及源代码引导

    HA体系架构 相关知识介绍 HDFS master/slave架构,HDFS节点分为NameNode节点和DataNode节点. NameNode存有HDFS的元数据:主要由FSImage和EditL ...

  9. Spark入门:第2节 Spark集群安装:1 - 3;第3节 Spark HA高可用部署:1 - 2

    三. Spark集群安装 3.1 下载spark安装包 下载地址spark官网:http://spark.apache.org/downloads.html 这里我们使用 spark-2.1.3-bi ...

随机推荐

  1. txt中把换行替换为空格

    把合适改为html后打开,换行都没了,然后复制到另一个txt即可

  2. android studio中配置X5 webview时的一个坑

    在接入X5的第二步中,需要配置so文件,这里说一下遇到的坑 1. 需要把demo下载回来,不然你找不到so文件,找到so文件后放到自己相对应的目录下边,自己里面那个目录也没有,所以和文件夹一起复制过去 ...

  3. signalR之java client的websocket BUG处理

    最近在用SignalR,服务端已经写好(老铁,没毛病,很稳),然后有坑的是我还得写App端,那就撸吧,java也不是什么很难的东西.奈何坑多(已经踩了一波android的控件bug),这次遇到了MS的 ...

  4. git CVE-2014-9390 验证以及源码对比

    一 验证部分 首先在ubuntu下面建立如下工程 mkdir repo cd repo git init mkdir -p .GiT/hooks cp post-checkout .GiT/hooks ...

  5. [SinGuLaRiTy] (树形)数据结构题目复习

    [SinGuLaRiTy-1023] Copyright (c) SinGuLaRiTy 2017. All Rights Reserved. 普通平衡树 题目描述 你需要写一种数据结构(可参考题目标 ...

  6. 记一次IIS应用程序域崩溃的原因

    在日常工作中,每次新的功能上线前,我们会搭建一个测试环境提供给客户测试使用,确定无误后才会更新到正式环境上.这一次也不例外,在约定好时间地点,客户进行集中化测试的过程中,反应网站系统打不开,报500错 ...

  7. web flash推流h264视频取消cbr

    flash as3.0 推视频H264关于视频质量 初次设置代码如下: h264Setting.setProfileLevel(H264Profile.BASELINE, H264Level.LEVE ...

  8. 树形DP【洛谷P3047】 [USACO12FEB]附近的牛Nearby Cows

    P3047 [USACO12FEB]附近的牛Nearby Cows 农民约翰已经注意到他的奶牛经常在附近的田野之间移动.考虑到这一点,他想在每一块土地上种上足够的草,不仅是为了最初在这片土地上的奶牛, ...

  9. Buy or Build UVA - 1151 Kruskal+枚举

    题意: 大概意思是有 n 个点,现在有 q 个方案 ,第 i 个方案耗费为 ci ,使 Ni 个点联通 ,当然也可以直接使两点联通 ,现求最小生成树的代价. 两点直接联通的代价是欧几里得距离的平方: ...

  10. visual studio检查运算上溢/下溢的开关位置

    [注意] 勾选这个选项会对应用程序的整体性能造成一些影响,但是会更加安全.具体情况根据项目需求来决定.