[版权申明:本文系作者原创,转载请注明出处]

文章出处:http://www.cnblogs.com/sdksdk0/p/5585355.html

作者: 朱培    ID:sdksdk0

--------------------------------------------------



在我之前的一篇博客中,已经分享了关于hadoop的基本配置,地址:http://blog.csdn.net/sdksdk0/article/details/51498775,但是那个是使用与初学者学习和测试的,今天用分享的这个比上次那个要复杂一些,主要是加了zookeeper和两台namenode的配置,同时使用这种方式,可以解决服务器的脑裂问题。

一、hdfs的HA机制

NameNode服务器一台是ACTIVE和一台是STANDBY。通过Qjournal(日志管理系统) 使用zkfc(基于zookeeper失败切换控制)









如何防止脑裂现象: 当ACTIVE假死的时候,STANDBY的zkfc会发出指令 ssh kill-9 namenode 返回0(成功杀死,返回1则杀死失败)的时候再去通知第二台namenode去切换状态。 若无返回码的时候(超时未响应),则启动proweroff.sh(用户自定义的脚本)给第一台namenode断电,返回0则执行正常,然后去切换。





当第一台机器断电的时候(指活跃状态的namenode和zkfc都断电了),则第2台的zkfc会执行proweroff.sh。





关键词: 1、有两个namenode,分别是active和standby.





2、有两个zkfc来监控和管理两个namenode的状态





3、元数据日志edits由一个专门的日志系统负责管理--qjoournal





4、zkfc及qjournal的功能都要依赖于zookeeper的服务来实现





5、zkfc做状态切换时有两个防止脑裂的机制--ssh和shell脚本。

二、Hadoop集群的配置

打开hadoop的安装目录,如果还不会下载或者基础都不会使用的请看文章开头我提供的链接,请先学习基础配置。 我这里主要使用了5台虚拟机来模拟搭建这整个集群环境。





            主机名       IP地址                       主要功能





ubuntu1     192.168.44.128         namenode zkfc ResourceManager

ubuntu2     192.168.44.131         namenode zkfc ResourceManager

ubuntu3     192.168.44.132         DataNode、NodeManager、JournalNode、QuorumPeerMain

ubuntu4     192.168.44.133         DataNode、NodeManager、JournalNode、QuorumPeerMain

ubuntu5     192.168.44.134         DataNode、NodeManager、JournalNode、QuorumPeerMain

我们可以先来配置ubuntu1,然后剩下的就scp到其他机器上就可以了

core-site.xml

<configuration>

    <property>
<name>fs.defaultFS</name>
<value>hdfs://ns1/</value>
</property>
<!-- 指定hadoop临时目录 -->
<property>
<name>hadoop.tmp.dir</name>
<value>/home/admin1/hadoop/HAhadoop/tmp/hadoop</value>
</property> <!-- 指定zookeeper地址 -->
<property>
<name>ha.zookeeper.quorum</name>
<value>ubuntu3:2181,ubuntu4:2181,ubuntu5:2181</value>
</property>
</configuration>

hdfs-site.xml

<configuration>
<!--指定hdfs的nameservice为ns1,需要和core-site.xml中的保持一致 -->
<property>
<name>dfs.nameservices</name>
<value>ns1</value>
</property>
<!-- ns1下面有两个NameNode,分别是nn1,nn2 -->
<property>
<name>dfs.ha.namenodes.ns1</name>
<value>nn1,nn2</value>
</property>
<!-- nn1的RPC通信地址 -->
<property>
<name>dfs.namenode.rpc-address.ns1.nn1</name>
<value>ubuntu1:9000</value>
</property>
<!-- nn1的http通信地址 -->
<property>
<name>dfs.namenode.http-address.ns1.nn1</name>
<value>ubuntu1:50070</value>
</property>
<!-- nn2的RPC通信地址 -->
<property>
<name>dfs.namenode.rpc-address.ns1.nn2</name>
<value>ubuntu2:9000</value>
</property>
<!-- nn2的http通信地址 -->
<property>
<name>dfs.namenode.http-address.ns1.nn2</name>
<value>ubuntu2:50070</value>
</property>
<!-- 指定NameNode的元数据在JournalNode上的存放位置 -->
<property>
<name>dfs.namenode.shared.edits.dir</name>
<value>qjournal://ubuntu3:8485;ubuntu4:8485;ubuntu5:8485/ns1</value>
</property>
<!-- 指定JournalNode在本地磁盘存放数据的位置 -->
<property>
<name>dfs.journalnode.edits.dir</name>
<value>/home/admin1/hadoop/HAhadoop/journaldata</value>
</property>
<!-- 开启NameNode失败自动切换 -->
<property>
<name>dfs.ha.automatic-failover.enabled</name>
<value>true</value>
</property>
<!-- 配置失败自动切换实现方式 -->
<property>
<name>dfs.client.failover.proxy.provider.ns1</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>/home/admin1/.ssh/id_rsa</value>
</property>
<!-- 配置sshfence隔离机制超时时间 -->
<property>
<name>dfs.ha.fencing.ssh.connect-timeout</name>
<value>30000</value>
</property>
</configuration>

mapred-site.xml

  <configuration>
<!-- 指定mr框架为yarn方式 -->
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
</configuration>

yarn-site.xml

<configuration>

<!-- 开启RM高可用 -->
<property>
<name>yarn.resourcemanager.ha.enabled</name>
<value>true</value>
</property>
<!-- 指定RM的cluster id -->
<property>
<name>yarn.resourcemanager.cluster-id</name>
<value>yrc</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>ubuntu1</value>
</property>
<property>
<name>yarn.resourcemanager.hostname.rm2</name>
<value>ubuntu2</value>
</property>
<!-- 指定zk集群地址 -->
<property>
<name>yarn.resourcemanager.zk-address</name>
<value>ubuntu3:2181,ubuntu4:2181,ubuntu5:2181</value>
</property>
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
</configuration>

slaves

1 ubuntu3
2 ubuntu4
3 ubuntu5

还有就是修改一下主机名。 sudo vi /etc/hostname ubuntu1 以及hosts的内容:





192.168.44.128  ubuntu1

192.168.44.131  ubuntu2

192.168.44.132  ubuntu3

192.168.44.133  ubuntu4

192.168.44.134  ubuntu5

 





注意:一定要把原来的那两天127.0.1.1 这一条给删除掉,一个hosts文件中,不能出现主机名相同和ip地址不同的情况,我开始就是因为这个因为,折腾了很久,datanode就是搭建不起来。

三、启动HA的Hadoop过程

1、启动zookeeper集群 分别在ubuntu3,4,5中输入 开启服务: bin/zkServer.sh start 查看状态: bin/zkServer.sh status





2、启动journalnode 分别在ubuntu3,4,5中输入 sbin/hadoop-daemon.sh start journalnode 运行jps命令检验,多了JournalNode进程





3、格式化HDFS





  在ubuntu1上执行命令:

bin/hdfs namenode -format

#格式化后会在根据core-site.xml中的hadoop.tmp.dir配置生成个文件,这里我配置的是/HAhadoop/tmp,然后将/HAhadoop/tmp拷贝到ubuntu2的/HAhadoop/下。

  





scp -r tmp/ ubuntu2:/home/admin1/hadoop/HAhadoop/

 





4、格式化ZKFC(在ubuntu1上执行即可) bin/hdfs zkfc -formatZK





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





6、启动YARN(在ubuntu1上执行) sbin/start-yarn.sh





如果是在ubuntu1中启动的话,那么默认的浏览窗口会是这样: ubuntu2是Active的,ubuntu1是一个Standby状态,













 



 

这个时候如果你去ubuntu2里面把这个namenode进程杀死的话,ubuntu1会自动切换为Active,ubuntu2会变成无法连接。









这样就实现了服务器的动态切换,这样万一有一个namenode宕机了,剩下了一台会自动切换。这种使用了zookeeper切换的就是前面说到的HA机制了。



当整个集群搭建完毕的效果就会是这样,如果用jps去查看一下:





在两个namenode节点上面会这样显示:









在剩下的3个datanode上面会这样:

可以通过访问ubuntu2:8088/Cluster来查看:活跃节点是3个

到这里整个集群环境就搭建完毕了,当然如果你电脑配置不是很高的话,可以选择把datanode直接放在namenode一起配置也可以。

HA机制下的Hadoop配置的更多相关文章

  1. Java API操作HA方式下的Hadoop

    通过java api连接Hadoop集群时,如果集群支持HA方式,那么可以通过如下方式设置来自动切换到活动的master节点上.其中,ClusterName 是可以任意指定的,跟集群配置无关,dfs. ...

  2. 初始化ha环境下的hadoop的hdfs

    1)启动zookeeper2)启动所有的journalnode[hadoop@datanode1 ~]$ ~/hadoop-2.7.3/sbin/hadoop-daemon.sh start jour ...

  3. 基于HA机制的MyCat架构——配置HAProxy

    HAProxy简介HAProxy提供高可用性.负载均衡以及基于TCP和HTTP应用的代理,支持虚拟主机,它是免费.快速并且可靠的一种解决方案. HAProxy特别适用于那些负载特大的web站点,这些站 ...

  4. 虚拟机centos7系统下安装hadoop ha和yarn ha(详细)

    一:基础环境准备 (一):虚拟机新建五个centos7系统(复制文件夹的方式) (二):角色分配 (三)按照角色分配表配置 (1)更改主机ip(自行查找),如果只是个人搭建玩一玩,可选择安装cento ...

  5. Hadoop的HA机制

    前言:正式引入HA机制是从hadoop2.0开始,之前的版本中没有HA机制 1. HA的运作机制 (1)hadoop-HA集群运作机制介绍 所谓HA,即高可用(7*24小时不中断服务) 实现高可用最关 ...

  6. Hadoop 高可用(HA)的自动容灾配置

    参考链接 Hadoop 完全分布式安装 ZooKeeper 集群的安装部署 0. 说明 在 Hadoop 完全分布式安装 & ZooKeeper 集群的安装部署的基础之上进行 Hadoop 高 ...

  7. Hadoop HA on Yarn——集群配置

    集群搭建 因为服务器数量有限,这里服务器开启的进程有点多: 机器名 安装软件 运行进程 hadoop001 Hadoop,Zookeeper NameNode, DFSZKFailoverContro ...

  8. 【Hadoop】HA 场景下访问 HDFS JAVA API Client

    客户端需要指定ns名称,节点配置,ConfiguredFailoverProxyProvider等信息. 代码示例: package cn.itacst.hadoop.hdfs; import jav ...

  9. 【Hadoop】HDFS笔记(二):HDFS的HA机制和Federation机制

    HA解决了HDFS的NameNode的单点问题: Federation解决了整个HDFS集群中只有一个名字空间,并且只有单独的一个NameNode管理所有DataNode的问题. 一.HA机制(Hig ...

随机推荐

  1. 【转载】Linux下安装、配置、启动Apache

    原文地址:http://www.cnblogs.com/zhuque/archive/2012/11/03/2763352.html 安装Apache前准备: 1.检查该环境中是否已经存在httpd服 ...

  2. 简述SharePoint designer 工作流实现用户撤回申请得解决方案,how to revoke/recall application in SharePoint designer workflow

    在工作中很容易碰到用户提出,需要可以撤回申请得需求.有这么几种实现方法. 方案一:designer中加一个parallel(平行)得anction, 然后在里面添加两个平行运行得审批 第一个是给真正得 ...

  3. jQuery系列 第六章 jQuery框架事件处理

    第六章 jQuery框架事件处理 JavaScript以事件驱动来实现页面的交互,其核心是以消息为基础,以事件来驱动.虽然利用传统的JavaScript事件处理方式也能够完成页面交互,但jQuery框 ...

  4. [LeetCode] Smallest Good Base 最小的好基数

    For an integer n, we call k>=2 a good base of n, if all digits of n base k are 1. Now given a str ...

  5. 重拾Python(5):数据读取

    本文主要对Python如何读取数据进行总结梳理,涵盖从文本文件,尤其是excel文件(用于离线数据探索分析),以及结构化数据库(以Mysql为例)中读取数据等内容. 约定: import numpy ...

  6. Python默认版本切换

    Mac上自带python2.7 版本,但是我又下了一个3.7版本(下载的版本默认安装在 /Library/Frameworks/Python.framework/Versions/3.7/bin/py ...

  7. 关于装双系统Ubantu16.04+Win10引导问题

    1.装完双系统,必定会遇到时间不一致的问题解决问题如下 sudo apt-get install ntpdate sudo ntpdate time.windows.com sudo hwclock ...

  8. java开发----自定义对象,重写equals方法

    javaweb开发中,用到了好多自定义对象,这时候如果不重写equals方法,很多时候都会返回false, 因此我们必须习惯重写这个方法. 重点: 1.equals比较俩对象时比较的是对象引用是否指向 ...

  9. [Awson原创]修水渠(canal)

    Description Awson是某国际学校信竞组的一只菜鸡.他们班主任F老师喜欢带他们去爬爬唷喽山.登顶后,Awson有了个奇怪的发现. 山腰上有N(1<=N<=100)个村庄,这些村 ...

  10. 51 nod 1055 最长等差数列(dp)

    1055 最长等差数列 基准时间限制:2 秒 空间限制:262144 KB 分值: 80 难度:5级算法题 N个不同的正整数,找出由这些数组成的最长的等差数列.     例如:1 3 5 6 8 9 ...