以前用hadoop2.2.0只搭建了hadoop的高可用,但在hadoop2.2.0中始终没有完成YARN HA的搭建,直接下载了hadoop最新稳定版本2.6.0完成了YARN HA及HADOOP HA的搭建流程,没有仔细看hadoop的官方文档,貌似hadoop2.2.0不支持YARN HA,如果说错了谢谢指正呀,下面总结一下我的搭建流程:

首先完成虚拟机的搭建:

机器名 IP 安装软件 运行进程
namenode1 192.168.3.161 hadoop NameNode、DFSZKFailoverController、ResourceManager
namenode2 192.168.3.162 hadoop NameNode、DFSZKFailoverController、ResourceManager
datanode1 192.168.3.163 hadoop,zookeeper DataNode、QuorumPeerMain、JournalNode、NodeManager
datanode2 192.168.3.164 hadoop,zookeeper DataNode、QuorumPeerMain、JournalNode、NodeManager
datanode3 192.168.3.165 hadoop DataNode、NodeManager
datanode4 192.168.3.166 hadoop,zookeeper DataNode、QuorumPeerMain、JournalNode、NodeManager

说明:

在hadoop2.X中通常由两个NameNode组成,一个处于active状态,另一个处于standby状态。Active NameNode对外提供服务,而Standby NameNode则不对外提供服务,仅同步active namenode的状态,以便能够在它失败时快速进行切换。

hadoop2.0官方提供了两种HDFS HA的解决方案,一种是NFS,另一种是QJM(由cloudra提出,原理类似zookeeper)。这里我使用QJM完成。主备NameNode之间通过一组JournalNode同步元数据信息,一条数据只要成功写入多数JournalNode即认为写入成功。通常配置奇数个JournalNode

虚拟机安装linux系统,我这里用的是centos6.4

使用root用户修改/etc/hosts文件,如下:

192.168.3.161 namenode1
192.168.3.162 namenode2
192.168.3.163 datanode1
192.168.3.164 datanode2
192.168.3.165 datanode3
192.168.3.166 datanode4

安装jdk1.7和hadoop并配置环境变量,可以配置全局的(修改/etc/profile)也可以配置当前用户的(修改~/.bashrc文件),这里我配置是全局的环境变量

安装jdk的过程直接解压tar xzvf jdk.tar, 这里不做说明了,列出/etc/profile文件中末尾添加的内容如下:

export JAVA_HOME=/usr/java/jdk1.7.0_67
export CLASSPATH=.:$JAVA_HOME/jre/lib/rt.jar:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
export PATH=$PATH:$JAVA_HOME/bin
export HADOOP_HOME=/home/hadoop/hadoop_installs/hadoop-2.6.0

使用root用户关闭防火墙和selinux

service iptables stop

centos7好像把防火墙修改成firewalld,可以试试service firewalld stop

chkconfig iptables off

修改/etc/selinux/config文件中设置SELINUX=disabled ,然后重启服务器

创建hadoop用户组及hadoop用户并完成.ssh免密码登录

在每台虚拟机中通过hadoop用户执行ssh-keygen -t rsa会在~/.ssh/目录中生成两个文件id_rsa和id_rsa.pub,如果想从namenode1免密码登录到namenode2中要在namenode1中执行ssh-copy-id -i ~/.ssh/id_rsa.pub hadoop@namenode2(注意:些命令中的-i一定加上否则之后的一些操作会出现ssh_exchange_identification: Connection closed by remote host这样的错误),这个命令完成后会在namenode2的~/.ssh/目录下生成文件authorized_keys,此时可以从namenode1直接ssh到namenode2了,建议在每台机器包括namenode2本身都执行ssh-copy-id -i ~/.ssh/id_rsa.pub hadoop@namenode2然后把生成的authorized_keys复制到集群中每个机器上实现任何机器之间都可以免密码登录。

完成安装zookeeper3.4.5集群:主要作用是用于ZKFC(DFSZKFailoverController)故障转移,当Active NameNode挂掉了,会自动切换Standby NameNode为standby状态

解压zookeeper包在zookeeper3.4.5/conf/目录执行mv zoo_sample.cfg zoo.cfg,之后修改zoo.cfg文件,如下:

修改dataDir=/hadoop/zookeeper-3.4.5/tmp(zookeeper修改源数据的地方,包括myid文件)

文件最后添加

server.1=datanode1:2888:3888

server.2=datanode2:2888:3888

server.3=datanode4:2888:3888

保存退出
 然后分别在datanode1,2,4节点中创建一个tmp文件夹 ,mkdir /hadoop/zookeeper-3.4.5/tmp ,再创建一个空文件  touch /hadoop/zookeeper-3.4.5/tmp/myid 最后向该文件写入ID,datanode1执行echo 1 > /hadoop/zookeeper-3.4.5/tmp/myid,datanode1执行echo 2 > /hadoop/zookeeper-3.4.5/tmp/myid,datanode3执行echo 3 > /hadoop/zookeeper-3.4.5/tmp/myid

安装配置hadoop2.6.0集群:

解压文件后配置HDFS(注意:hadoop2.X之后所有的配置文件都在$HADOOP_HOME/etc/hadoop目录下),需要修改文件如下:

修改文件hadoo-env.sh

export JAVA_HOME=/usr/java/jdk1.7.0_67

export HADOOP_LOG_DIR=/data/log/hadoop指定日志存放目录

修改文件core-site.xml

<configuration>
  <!-- 指定hdfs的nameservice为ns1,是NameNode的URI。hdfs://主机名:端口/ -->
        <property>
                <name>fs.defaultFS</name>
                <value>hdfs://gagcluster</value>
        </property>

<property>
                <name>io.file.buffer.size</name>
                <value>131072</value>
        </property>
<!-- 指定hadoop临时目录 -->
        <property>
                <name>hadoop.tmp.dir</name>
                <value>file:/data/hadoop/tmp</value>
                <description>Abase for other temporary directories.</description>
        </property>
<!--指定可以在任何IP访问-->
        <property>
                <name>hadoop.proxyuser.hduser.hosts</name>
                <value>*</value>
        </property>
<!--指定所有用户可以访问-->
        <property>
                <name>hadoop.proxyuser.hduser.groups</name>
                <value>*</value>
        </property>
<!-- 指定zookeeper地址 -->
        <property>
                <name>ha.zookeeper.quorum</name>
                <value>dataNode1:2181,dataNode2:2181,dataNode4:2181</value>
        </property>

</configuration>

修改文件hdfs-site.xml

<configuration>
<!--指定hdfs的nameservice为ns1,需要和core-site.xml中的保持一致 -->
        <property>
                <name>dfs.nameservices</name>
                <value>gagcluster</value>
        </property>
<!-- ns1下面有两个NameNode,分别是nn1,nn2 -->
        <property>
                <name>dfs.ha.namenodes.gagcluster</name>
                <value>nn1,nn2</value>
        </property>
<!-- nn1的RPC通信地址 -->
        <property>
                <name>dfs.namenode.rpc-address.gagcluster.nn1</name>
                <value>namenode1:9000</value>
        </property>
<!-- nn2的RPC通信地址 -->
        <property>
                <name>dfs.namenode.rpc-address.gagcluster.nn2</name>
                <value>namenode2:9000</value>
        </property>

<!-- nn1的http通信地址 -->
        <property>
                <name>dfs.namenode.http-address.gagcluster.nn1</name>
                <value>namenode1:50070</value>
        </property>

<!-- nn2的http通信地址 -->
        <property>
                <name>dfs.namenode.http-address.gagcluster.nn2</name>
                <value>namenode2:50070</value>
        </property>
<!-- 指定NameNode的元数据在JournalNode上的存放位置 -->
        <property>
                <name>dfs.namenode.shared.edits.dir</name>
                <value>qjournal://dataNode1:8485;datanode2:8485;datanode4:8485/gagcluster</value>
        </property>

<!-- 配置失败自动切换实现方式 -->
        <property>
                <name>dfs.client.failover.proxy.provider.gagcluster</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的元数据在JournalNode上的存放位置 -->
        <property>
                <name>dfs.journalnode.edits.dir</name>
                <value>/data/hadoop/tmp/journal</value>
        </property>
<!--指定支持高可用自动切换机制-->
        <property>
                <name>dfs.ha.automatic-failover.enabled</name>
                <value>true</value>
        </property>
<!--指定namenode名称空间的存储地址-->
        <property>   
                <name>dfs.namenode.name.dir</name>   
                <value>file:/data/hadoop/dfs/name</value>  
        </property>
<!--指定datanode数据存储地址-->
        <property>   
                <name>dfs.datanode.data.dir</name>   
                <value>file:/data/hadoop/dfs/data</value>  
        </property>
<!--指定数据冗余份数-->
        <property>   
                <name>dfs.replication</name>   
                <value>3</value>
        </property>
<!--指定可以通过web访问hdfs目录-->
        <property>  
                <name>dfs.webhdfs.enabled</name>  
                <value>true</value>
        </property>

<!--保证数据恢复 -->  
    <property>  
              <name>dfs.journalnode.http-address</name>  
              <value>0.0.0.0:8480</value>  
    </property>  
    <property>  
                 <name>dfs.journalnode.rpc-address</name>  
                 <value>0.0.0.0:8485</value>  
     </property>
     <property>
              <name>ha.zookeeper.quorum</name>
              <value>dataNode1:2181,dataNode2:2181,dataNode4:2181</value>
    </property>

</configuration>

修改文件yarn-site.xml

<configuration>
<!--rm失联后重新链接的时间-->
<property>
   <name>yarn.resourcemanager.connect.retry-interval.ms</name>
   <value>2000</value>
</property>
<!--开启resource manager HA,默认为false-->
<property>
   <name>yarn.resourcemanager.ha.enabled</name>
   <value>true</value>
</property>
<!--配置resource manager -->
<property>
  <name>yarn.resourcemanager.ha.rm-ids</name>
  <value>rm1,rm2</value>
</property>
<property>
  <name>ha.zookeeper.quorum</name>
  <value>dataNode1:2181,dataNode2:2181,dataNode4:2181</value>
</property>

<!--开启故障自动切换-->
<property>
   <name>yarn.resourcemanager.ha.automatic-failover.enabled</name>
   <value>true</value>
</property>
<property>
  <name>yarn.resourcemanager.hostname.rm1</name>
  <value>namenode1</value>
</property>
                   
<property>
   <name>yarn.resourcemanager.hostname.rm2</name>
   <value>namenode2</value>
</property>
<!--在namenode1上配置rm1,在namenode2上配置rm2,注意:一般都喜欢把配置好的文件远程复制到其它机器上,但这个在YARN的另一个机器上一定要修改-->
<property>
  <name>yarn.resourcemanager.ha.id</name>
  <value>rm1</value>
<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>
<!--配置与zookeeper的连接地址-->
<property>
  <name>yarn.resourcemanager.zk-state-store.address</name>
  <value>datanode1:2181,datanode2:2181,datanode4:2181</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>datanode1:2181,datanode2:2181,datanode4:2181</value>
</property>
<property>
  <name>yarn.resourcemanager.cluster-id</name>
  <value>gagcluster-yarn</value>
</property>
<!--schelduler失联等待连接时间-->
<property>
  <name>yarn.app.mapreduce.am.scheduler.connection.wait.interval-ms</name>
  <value>5000</value>
</property>
<!--配置rm1-->
<property>
  <name>yarn.resourcemanager.address.rm1</name>
  <value>namenode1:8132</value>
</property>
<property>
  <name>yarn.resourcemanager.scheduler.address.rm1</name>
  <value>namenode1:8130</value>
</property>
<property>
  <name>yarn.resourcemanager.webapp.address.rm1</name>
  <value>namenode1:8188</value>
</property>
<property>
   <name>yarn.resourcemanager.resource-tracker.address.rm1</name>
   <value>namenode1:8131</value>
</property>
<property>
  <name>yarn.resourcemanager.admin.address.rm1</name>
  <value>namenode1:8033</value>
</property>
<property>
  <name>yarn.resourcemanager.ha.admin.address.rm1</name>
  <value>namenode1:23142</value>
</property>
<!--配置rm2-->
<property>
  <name>yarn.resourcemanager.address.rm2</name>
  <value>namenode2:8132</value>
</property>
<property>
  <name>yarn.resourcemanager.scheduler.address.rm2</name>
  <value>namenode2:8130</value>
</property>
<property>
  <name>yarn.resourcemanager.webapp.address.rm2</name>
  <value>namenode2:8188</value>
</property>
<property>
  <name>yarn.resourcemanager.resource-tracker.address.rm2</name>
  <value>namenode2:8131</value>
</property>
<property>
  <name>yarn.resourcemanager.admin.address.rm2</name>
  <value>namenode2:8033</value>
</property>
<property>
  <name>yarn.resourcemanager.ha.admin.address.rm2</name>
  <value>namenode2:23142</value>
</property>
<property>
  <name>yarn.nodemanager.aux-services</name>
  <value>mapreduce_shuffle</value>
</property>
<property>
  <name>yarn.nodemanager.aux-services.mapreduce.shuffle.class</name>
  <value>org.apache.hadoop.mapred.ShuffleHandler</value>
</property>
<property>
  <name>yarn.nodemanager.local-dirs</name>
  <value>/data/hadoop/yarn/local</value>
</property>
<property>
  <name>yarn.nodemanager.log-dirs</name>
  <value>/data/log/hadoop</value>
</property>
<property>
  <name>mapreduce.shuffle.port</name>
  <value>23080</value>
</property>
<!--故障处理类-->
<property>
  <name>yarn.client.failover-proxy-provider</name>
  <value>org.apache.hadoop.yarn.client.ConfiguredRMFailoverProxyProvider</value>
</property>
<property>
    <name>yarn.resourcemanager.ha.automatic-failover.zk-base-path</name>
    <value>/yarn-leader-election</value>
    <description>Optional setting. The default value is /yarn-leader-election</description>
</property>
</configuration>

修改文件mapred-site.xml

<configuration>

<property>
                <name>mapreduce.framework.name</name>
                <value>yarn</value>
        </property>
<!-- 配置 MapReduce JobHistory Server 地址 ,默认端口10020 -->
    <property>
            <name>mapreduce.jobhistory.address</name>
            <value>0.0.0.0:10020</value>
    </property>
<!-- 配置 MapReduce JobHistory Server web ui 地址, 默认端口19888 -->
    <property>
            <name>mapreduce.jobhistory.webapp.address</name>
            <value>0.0.0.0:19888</value>
     </property>
</configuration>

修改文件slaves

atanode1
datanode2
datanode3
datanode4

修改文件yarn-env.sh

export JAVA_HOME=/usr/java/jdk1.7.0_67

export YARN_LOG_DIR=/data/log/hadoop指定日志存放目录

把配置好的文件远程scp到集群其它节点相应目录中,注意修改YARN高可用的yarn-site.xml文件中的yarn.resourcemanager.ha.id项

启动zookeeper集群(分别在datanode1、datanode2、datanode4上启动zk)
            进入到 zookeeper-3.4.5/bin/
            ./zkServer.sh start
            查看状态:
            ./zkServer.sh status
            (一个leader,两个follower)

启动journalnode(在namenode1上启动所有journalnode)
            进入到hadoop-2.6.0
            sbin/hadoop-daemons.sh start journalnode

    或者单独进入到datanode1,datanode2,datanode4执行

    sbin/hadoop-daemon.sh start journalnode
            (运行jps命令检验,多了JournalNode进程)

格式化HDFS
            在namenode1上执行命令:
            hadoop namenode -format
            格式化后会在根据core-site.xml中的hadoop.tmp.dir配置生成个文件,之后通过sbin/hadoop-daemon.sh start namenode启动namenode进程在namenode2上执行hdfs namenode -bootstrapStandby完成主备节点同步信息

格式化ZK(在namenode1上执行即可)
            hdfs zkfc -formatZK

启动HDFS(在namenode1上执行)
            sbin/start-dfs.sh

启动YARN(在namenode1)
            sbin/start-yarn.sh

在namenode2上执行sbin/yarn-daemon.sh start resourcemanager启动resourceManager进程

启动完成之后可以在浏览器中输入http://192.168.3.161:50070和http://192.168.3.162:50070查看namenode分别为Active和Standby

在namenode1上执行${HADOOP_HOME}/bin/yarn rmadmin -getServiceState rm1查看rm1和rm2分别为active和standby状态,也可以通过浏览器访问http://192.168.3.161:8188查看状态

转载于:https://www.cnblogs.com/selinux/p/4155814.html

搭建hadoop2.6.0 HA及YARN HA相关推荐

  1. 在Win7虚拟机下搭建Hadoop2.6.0伪分布式环境

    近几年大数据越来越火热.由于工作需要以及个人兴趣,最近开始学习大数据相关技术.学习过程中的一些经验教训希望能通过博文沉淀下来,与网友分享讨论,作为个人备忘. 第一篇,在win7虚拟机下搭建hadoop ...

  2. (转载)hadoop2.2.0集群的HA高可靠的最简单配置

    转载网址:http://www.cnblogs.com/meiyuanbao/p/hadoop2.html 简介 hadoop中的NameNode好比是人的心脏,非常重要,绝对不可以停止工作.在had ...

  3. 国内最全最详细的hadoop2.2.0集群的HA高可靠的最简单配置

    简介 hadoop中的NameNode好比是人的心脏,非常重要,绝对不可以停止工作.在hadoop1时代,只有一个NameNode.如果该NameNode数据丢失或者不能工作,那么整个集群就不能恢复了 ...

  4. windows下搭建hadoop-2.6.0本地idea开发环境

    概述 本文记录windows下hadoop本地开发环境的搭建: OS:windows hadoop执行模式:独立模式 安装包结构: Hadoop-2.6.0-Windows.zip- cygwinIn ...

  5. 本地搭建Hadoop伪分布式环境之四:开启搭建Hadoop2.4.0之旅

    1.准备软件  64位下载包下载:     hadoop-2.4.0-64bit.tar.gz 百度网盘: 链接: http://pan.baidu.com/s/1hqEDe2S password: ...

  6. 搭建hadoop2.6.0集群环境

    一.规划 (一)硬件资源 10.171.29.191 master 10.171.94.155  slave1 10.251.0.197 slave3 (二)基本资料 用户:  jediael 目录: ...

  7. Hadoop-2.2.0学习之三YARN简介

    MapReduce在hadoop-0.23版本中进行了完全的检查修改,并发展为了现在称之为的MapReduce2.0(MRv2)或者YARN.YARN的基本想法是将JobTracker的两个主要功能资 ...

  8. Hadoop2.2.0伪分布式环境搭建(附:64位下编译Hadoop-2.2.0过程)

    Hadoop2.2.0伪分布式环境搭建: 写在前面:Hadoop2.2.0默认是支持32位的OS,如果想要在64位OS下运行的话,可以通过在64位OS下面编译Hadoop2.2.0来实现,编译的操作步 ...

  9. eclipse中hadoop2.3.0环境部署及在eclipse中直接提交mapreduce任务

    转自:http://my.oschina.net/mkh/blog/340112 1 eclipse中hadoop环境部署概览 eclipse中部署hadoop包括两大部分:hdfs环境部署和mapr ...

最新文章

  1. Nginx服务器搭建和基本配置详解
  2. 俄罗斯方块:win32api开发
  3. MySQL高级 - 案例 - 系统性能优化 - 数据源配置
  4. Visual Studio 2017各版本安装包离线下载、安装全教程
  5. springmvc和servlet在上传和下载文件(保持文件夹和存储数据库Blob两种方式)
  6. Python Web开发:开发wsgi中间件
  7. 动态实例分割SOLOv2,更快更强更精准!
  8. oracle的LAG和LEAD分析函数
  9. 哈尔滨工程大学ACM预热赛(A,C,H,I)
  10. Address already in use: bind 端口被占用的解决办法
  11. (转)李嘉诚:成功源于花90%时间考虑失败
  12. BP 神经网络用于模式分类
  13. java图片透明_Java实现对图片透明化处理
  14. 百度 李彦宏 2008年在北大毕业典礼的演讲稿
  15. UVa 12304 2D Geometry 110 in 1!(圆的处理)
  16. 上海互联网整体沉沦:盛大巨人全没落 8年没出一个马云
  17. 使用VS2012调试ReactOS源码
  18. 联想小新22H2版跳过联网方法最新方法
  19. 读书笔记:《学会提问》
  20. winform窗体控件

热门文章

  1. asp.net 安装element ui_Vue组件库系列三:打造属于自己的 UI 库文档(新版本的方案)...
  2. 在计算机技术中描述信息最小单位是,计算机二级考试单选题
  3. 计算机应用基础东师,2018年东师计算机应用基础.doc
  4. sql唯一约束怎么设置_20200923 SQL UNIQUE 约束
  5. 泰尔指数r语言_还在用Excel算区位基尼系数?用geo.gini吧!
  6. 合成孔径雷达基于RDA算法的点目标仿真
  7. PCL安装与环境变量配置(Win10)
  8. # 可视化工具资源汇总
  9. MySQl数据库必会sql语句(提升版)
  10. Android开发之CoordinatorLayout使用详解一