配置HA

  • HA简介
    HA是High Available缩写,是双机集群系统简称,指高可用性集群,是保证业务连续性的有效解决方案,一般有两个或两个以上的节点,且分为活动节点及备用节点。通常把正在执行业务的称为活动节点,而作为活动节点的一个备份的则称为备用节点。当活动节点出现问题,导致正在运行的业务(任务)不能正常运行时,备用节点此时就会侦测到,并立即接续活动节点来执行业务。从而实现业务的不中断或短暂中断。
  • HA机制介绍
    hadoop2.0的HA 机制有两个namenode,一个是active namenode,状态是active;另外一个是standby namenode,状态是standby。两者的状态是可以切换的,但不能同时两个都是active状态,最多只有1个是active状态。只有active namenode提供对外的服务,standby namenode是不对外服务的。active namenode和standby namenode之间通过NFS或者JN(journalnode,QJM方式)来同步数据。
    active namenode会把最近的操作记录写到本地的一个edits文件中(edits file),并传输到NFS或者JN中。standby namenode定期的检查,从NFS或者JN把最近的edit文件读过来,然后把edits文件和fsimage文件合并成一个新的fsimage,合并完成之后会通知active namenode获取这个新fsimage。active namenode获得这个新的fsimage文件之后,替换原来旧的fsimage文件。
    这样,保持了active namenode和standby namenode的数据的实时同步,standby namenode可以随时切换成active namenode(譬如active namenode挂了)。而且还有一个原来hadoop1.0的secondarynamenode,checkpointnode,buckcupnode的功能:合并edits文件和fsimage文件,使fsimage文件一直保持更新。所以启动了hadoop2.0的HA机制之后,secondarynamenode,checkpointnode,buckcupnode这些都不需要了。
  • 搭建 hadoop HA 集群
  1. 机器规划
主机名 IP 软件 进程
master01 192.168.5.100 NameNode,ResourceManager,DfszkFailoverController
master02 192.168.5.101 NameNode,ResourceManager,DfszkFailoverController
slave01 192.168.5.102 zookeeper DataNode,NodeManager,JournalNode,QuorumPeerMain
slave02 192.168.5.103 zookeeper DataNode,NodeManager,JournalNode,QuorumPeerMain
slave03 192.168.5.104 zookeeper DataNode,NodeManager,JournalNode,QuorumPeerMain
  1. 配置core-site.xml

         $ vim etc/hadoop/core-site.xml
    
         <configuration>
    
         <!-- HA 配置指定 hdfs 的 nameService 为ns -->
         <property>
         <name>fs.defaultFS</name>
         <value>hdfs://ns</value>
         </property>
    
         <!-- HA 配置,指定zookeeper地址 -->
         <property>
         <name>ha.zookeeper.quorum</name>
         <value>slave01:2181,slave02:2181,slave03:2181</value>
         </property>
    
         <property>   
         <name>hadoop.tmp.dir</name>   
         <value>/export/data/hadoop/temp</value>
         </property>
    
         <property>
         <name>hadoop.proxyuser.root.hosts</name>
         <value>*</value>
         </property>
    
         <property>
         <name>hadoop.proxyuser.root.groups</name>
         <value>*</value>
         </property>
    
         </configuration>
    
  2. 配置hdfs-site.xml

       $ vim etc/hadoop/hdfs-site.xml
    
       <configuration>
    
       <!--指定hdfs的nameservice为ns,需要和core-site.xml中的保持一致 -->
       <property>
       <name>dfs.nameservices</name>
       <value>ns</value>
       </property>
    
       <!-- ns下面有两个NameNode,分别是nn1,nn2 -->
       <property>
       <name>dfs.ha.namenodes.ns</name>
       <value>nn1,nn2</value>
       </property>
    
       <!-- nn1的RPC通信地址 -->
       <property>
       <name>dfs.namenode.rpc-address.ns.nn1</name>
       <value>master01:9000</value>
       </property>
    
       <!-- nn1的http通信地址 -->
       <property>
       <name>dfs.namenode.http-address.ns.nn1</name>
       <value>master01:50070</value>
       </property>
    
       <!-- nn2的RPC通信地址 -->
       <property>
       <name>dfs.namenode.rpc-address.ns.nn2</name>
       <value>master02:9000</value>
       </property>
    
       <!-- nn2的http通信地址 -->
       <property>
       <name>dfs.namenode.http-address.ns.nn2</name>
       <value>master02:50070</value>
       </property>
    
       <!-- 指定NameNode的edits元数据在JournalNode上的存放位置 -->
       <property>
       <name>dfs.namenode.shared.edits.dir</name>
       <value>qjournal://slave01:8485;slave02:8485;slave03:8485/ns</value>
       </property>
    
       <!-- 指定JournalNode在本地磁盘存放数据的位置 -->
       <property>
       <name>dfs.journalnode.edits.dir</name>
       <value>/export/data/hadoop/journaldata</value>
       </property>
    
       <!-- 开启NameNode失败自动切换 -->
       <property>
       <name>dfs.ha.automatic-failover.enabled</name>
       <value>true</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.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.ha.namenodes.jn</name>
       <value>master01,master02</value>
       </property>
    
       </configuration>
    
  3. 配置mapred-site.xml

         $ vim etc/hadoop/mapred-site.xml
    
         <configuration>
    
         <property>
         <name>mapreduce.framework.name</name>
         <value>yarn</value>
         </property>
    
         <property>
         <name>yarn.app.mapreduce.am.env</name>
         <value>HADOOP_MAPRED_HOME=${HADOOP_HOME}</value>
         </property>
    
         <property>
         <name>mapreduce.map.env</name>
         <value>HADOOP_MAPRED_HOME=${HADOOP_HOME}</value>
         </property>
    
         <property>
         <name>mapreduce.reduce.env</name>
         <value>HADOOP_MAPRED_HOME=${HADOOP_HOME}</value>
         </property>
    
         </configuration>
    
  4. 配置yarn-site.xml

         $ vim etc/hadoop/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>yarn-ha</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>master01</value>
         </property>
    
         <property>
         <name>yarn.resourcemanager.hostname.rm2</name>
         <value>master02</value>
         </property>
    
         <!-- 指定zk集群地址 -->
         <property>
         <name>yarn.resourcemanager.zk-address</name>
         <value>slave01:2181,slave02:2181,slave03:2181</value>
         </property>
    
         <property>
         <name>yarn.nodemanager.aux-services</name>
         <value>mapreduce_shuffle</value>
         </property>
    
         </configuration>
    
  • 启动hdfs
  1. 启动zookeeper集群(在3台机器上分别启动)

        cd ZOOKEEPER_HOME/bin/ 
        ./zkServer.sh start
    
  2. 查看zookeeper状态

         cd ZOOKEEPER_HOME/bin/
         ./zkServer.sh status
    
  3. 启动 JournalNode 集群(在slave01、slave02、slave03上分别执行)

         hdfs-daemon start journalnode
    
  4. 格式化 ZooKeeper 集群

         hdfs zkfc -formatZK
    
  5. 格式化集群的 NameNode (在master01上执行)

         hdfs namenode -format
    
  6. 启动刚格式化的 NameNode (在master01上执行)

         hdfs-daemon start namenode
    
  7. 同步 NameNode1 元数据到 NameNode2 上 (在master02上执行)

         hdfs namenode -bootstrapStandby
    
  8. 启动 NameNode2 (在master02上执行)

         hdfs-daemon start namenode
    
  9. 启动集群中所有的DataNode (在master01上执行)

         start-dfs.sh
    
  10. 启动 ZKFC 进程 (在 master01和master02的主机上分别执行如下命令)

         hdfs --daemon start zkfc
    
  11. 验证ha(在master01节点停掉namenode进程)

         hdfs --daemon stop namenode
    
  • 启动resourceManager
  1. 在 RM1 启动 YARN (在master01上执行)

        yarn-daemon start resourcemanager
    
  2. 在 RM2 启动 YARN (在master02上执行)

         yarn-daemon start resourcemanager
    
  3. 在任意节点执行获取resourceManager状态(active)

         yarn rmadmin -getServiceState rm1
    
  4. 在任意节点执行获取resourceManager状态(standby)

          yarn rmadmin -getServiceState rm2
    
  5. 验证 yarn 的 ha(在master01节点执行)standby 的 resourcemanager 则会转换为 active

           yarn-daemon stop resourcemanager
    
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 151,688评论 1 330
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 64,559评论 1 273
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 101,749评论 0 226
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 42,581评论 0 191
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 50,741评论 3 271
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 39,684评论 1 192
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,122评论 2 292
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 29,847评论 0 182
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 33,441评论 0 228
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 29,939评论 2 232
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 31,333评论 1 242
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 27,783评论 2 236
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 32,275评论 3 220
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 25,830评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,444评论 0 180
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 34,553评论 2 249
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 34,618评论 2 249