3_HA介绍和安装部署
一、hadoop 2.x产生背景
1、hadoop 1.x中hdfs和mr在高可用和扩展性等方面存在问题。
2、hdfs存在的问题:NN单点故障,难以应用于在线场景;NN压力过大,内存受限,影响系统扩展性。
3、mr存在的问题:1.x难以支持除mr之外的计算框架,如spark和storm(mr一般得到结果时间较长,storm和spark可以很快得到结果).
二、hadoop 1.x与hadoop2.x区别
1、2.x由hdfs、mr和yarn三个分支构成,yarn是分布式的资源管理器(资源包括内存,cpu等),比如mr框架要运行一些计算任务(Map任务和Reduce任务)的时,这些任务都要在各个节点上执行,执行的时候首先要去yarn申请,然后yarn分配到哪个节点上去执行,可以充分的利用资源;yarn同时还有类似接口的作用,可以接入其它的计算框架。
2、2.x解决单点故障:hdfs HA,通过主备NN解决,如果主发生故障,则切换到备上。
3、2.x解决内存受限:hdfs Federation,水平扩展,支持多个NN,每个NN分管一部分目录,所有NN共享DN.
4、2.x相对于1.x仅是架构上发生了变化,使用方式不变,对hdfs使用者透明,hdfs 1.x中的命令和api任然可以使用。
三、hadoop2.x HA
1、DN向所有的NN汇报,备同步主的元数据
2、NN可以有一主多备,主挂了备要接管,这里要保证主和备中元数据一致,那么这些元数据就不能存储在主或备中了,要存在另外一个叫JN的集群中,JN要多个,否则又成为新的单点。JN的目的就是存储元数据。所有的NN不管主还是备,只要读写就要到JN上进行读写。
3、hdfs高可用的解决方法是zk,不是keepalived,zk比较火,其实就是做高可用的,因为他对用户提供了二次开发接口,任何服务的高可用都可以用zk做。Keepalived 高可用的原理是ip地址漂移,对客户端来说就是一个ip地址,客户端访问这个ip就可,但是zk不是,主备都有各自的ip地址,那客户端无法确定,所以就去访问ZK。也就是说Hdfs读写流程中客户端首先访问zk,zk告诉客户端哪个NN是active的,然后客户端再去访问该NN。
4、zk通过FailoverControllerActive 对NN进行心跳检查,监控NN健康状况,控制NN的切换。任何NN都对应一个FailoverControllerActive,主挂掉以后 FailoverControllerActive去ZK上竞争锁,拿到锁的NN变为active,ZK必须是奇数个,ZK内部是个投票机制,也就是竞争锁的算法。
5、另外ZK可以通过FailoverControllerActive手动切换工作NN,比如现在相对主NN进行升级,想先停掉,升级后在切换。
四、hadoop2.x Federation
1、Federation中DN为所有的NN服务,是共享的(如果搭建三个独立的集群,那么DN是独立的)。这里工作时NN是各自独立的,假如NN1挂掉了不影响NN2.客户端访问必须指明要访问哪个NN,如果要与HA结合的话,要分别为每个NN搭建HA。
2、Federation通过多个NN(水平扩展)把元数据的存储和管理分散到多个节点中,可以通过多个NN来隔离不同类型的应用。只有超大企业才用到,HA更重要些,内存受限的问题可以通过加大内存来处理。
五、YARN
1、yarn核心思想将1.x中JobTracker的资源管理和任务调度两个功能分开,分别由ResourceManager和ApplicationMaster进程实现.
2、yarn的引入使得多个计算框架可以运行在一个集群中(实现了计算框架的接口化).
3、mr运行在yarn上:将MapReduce作业直接运行在yarn上,而不是由JobTracker和TaskTracker构建的mr系统中,yarn负责资源管理和调度,ApplicationMaster负责任务调度、任务监控和容错等。MapTask和ReduceTask任务驱动引擎,与mr1一致。每个MapReduce作业对应一个ApplicationMaster,yarn将资源分配给ApplicationMaster,ApplicationMaster进一步将资源分配给内部的任务。
yarn架构及原理:http://www.cnblogs.com/codeOfLife/p/5492740.html
六、linux上hadoop2.5.2 HA安装部署
按照理论部分,需要搭建如下节点:
1、准备4台Linux机器,node1配置hosts,之后scp到node2,node3,node4:
[root@node1 ~]# vim /etc/hosts
192.168.13.129 node1
192.168.13.130 node2
192.168.13.131 node3
192.168.13.132 node4
2、各节点安装jdk并且配置环境变量:
[root@node1 ~]# vim /etc/profile //增加以下内容:
----
JAVA_HOME=/usr/local/jdk1..0_03/
PATH=$PATH:$JAVA_HOME/bin
export PATH JAVA_HOME
----
[root@node1 ~]# source /etc/profile
[root@node1 ~]# jps
Jps
3、node1免密码登录node2、node3和node4配置
-------------各节点先安装openssh
[root@node1 ~]#yum -y install openssh-clients -------------各节点生成公私钥,放入本地认证,完成各自本地登录
[root@node1 ~]# ssh-keygen -t dsa -P '' -f ~/.ssh/id_dsa
[root@node1 ~]# cat ~/.ssh/id_dsa.pub >> ~/.ssh/authorized_keys
[root@node1 ~]# ssh node1 //登录本地成功
Last login: Thu Aug :: from 192.168.13.1
[root@node1 ~]# --------------复制node1公钥到其它节点
[root@node1 ~]# scp ~/.ssh/id_dsa.pub root@node2:~
[root@node1 ~]# scp ~/.ssh/id_dsa.pub root@node3:~
[root@node1 ~]# scp ~/.ssh/id_dsa.pub root@node4:~ --------------node1公钥加入各节点认证
[root@node2 ~]# cat ~/id_dsa.pub >> ~/.ssh/authorized_keys
[root@node3 ~]# cat ~/id_dsa.pub >> ~/.ssh/authorized_keys
[root@node4 ~]# cat ~/id_dsa.pub >> ~/.ssh/authorized_keys [root@node1 ~]# ssh node2 //直接登录node2成功
Last login: Thu Aug :: from 192.168.13.1
[root@node1 ~]# ssh node3 //直接登录node3成功
Last login: Thu Aug :: from 192.168.13.1
[root@node1 ~]# ssh node4 //直接登录node4成功
Last login: Thu Aug :: from 192.168.13.1
4、各节点安装hadoop-2.7.3和zookeeper-3.4.8
[root@node1 ~]# tar zxvf hadoop-2.7..tar.gz
[root@node1 ~]# ln -sf /root/hadoop-2.7. /home/hadoop [root@node1 ~]# tar zxvf zookeeper-3.4..tar.gz
[root@node1 ~]# ln -sf /root/zookeeper-3.4. /home/zookeeper
5、在node1上根据官方文档配置hdfs-site.xml,其它一些默认配置参考官方hdfs-default.xml
<configuration>
<!--指定hdfs的nameservice为ns,zk需要这个标示(因为zk可以同时做不同应用的高可用) -->
<property>
<name>dfs.nameservices</name>
<value>ns</value>
</property> <!-- ns下面有两个NN,分别是NN1,NN2 -->
<property>
<name>dfs.ha.namenodes.ns</name>
<value>nn1,nn2</value>
</property> <!-- NN1,NN2的RPC通信地址(hadoop各个节点之间以及客户端和NN传递数据都使用rpc协议) -->
<property>
<name>dfs.namenode.rpc-address.ns.nn1</name>
<value>node1:8020</value>
</property>
<property>
<name>dfs.namenode.rpc-address.ns.nn2</name>
<value>node2:8020</value>
</property> <!-- NN1,NN2的http通信地址(http协议是看管理界面用的) -->
<property>
<name>dfs.namenode.http-address.ns.nn1</name>
<value>node1:50070</value>
</property>
<property>
<name>dfs.namenode.http-address.ns.nn2</name>
<value>node2:50070</value>
</property> <!-- 指定NameNode的元数据在JournalNode上的存放位置 -->
<property>
<name>dfs.namenode.shared.edits.dir</name>
<value>qjournal://node2:8485;node3:8485;node4:8485/ns</value>
</property>
<!-- 指定JournalNode在本地磁盘存放数据的位置 -->
<property>
<name>dfs.journalnode.edits.dir</name>
<value>/home/hadoop/workspace/journal</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</value>
</property>
<!-- 使用隔离机制时需要ssh免登陆 -->
<property>
<name>dfs.ha.fencing.ssh.private-key-files</name>
<value>/root/.ssh/id_dsa</value>
</property>
</configuration>
6、在node1上根据官方文档配置core-site.xml,其它一些默认配置参考官方core-default.xml
<configuration>
<!-- 指定hdfs的nameservice为ns(hdfs入口) -->
<property>
<name>fs.defaultFS</name>
<value>hdfs://ns</value>
</property>
<!--指定hadoop数据临时存放目录 -->
<property>
<name>hadoop.tmp.dir</name>
<value>/home/hadoop/workspace/hdfs/temp</value>
</property>
<!--指定zookeeper地址 -->
<property>
<name>ha.zookeeper.quorum</name>
<value>node1:2181,node2:2181,node3:2181</value>
</property>
</configuration>
7、在node1上配置DN,无需配置SNN了,因为JN已经取代了SNN.
[root@node1 hadoop]# vim slaves
node2
node3
node4
至此完成hadoop配置,将node1 conf目录下所有配置复制到其它节点。
8、zookeeper配置并启动
[root@node1 ~]# cp /home/zookeeper/conf/zoo_sample.cfg /home/zookeeper/conf/zoo.cfg
[root@node1 conf]# vim zoo.cfg
dataDir=/home/zookeeper/data
server.=node1:: //1 2 3 是zk集群的编号
server.=node2::
server.=node3::
-----scp到其它节点------- -----配置各节点myid,和zoo.cfg中集群编号一致----
[root@node1 ~]# vim /home/zookeeper/data/myid
1
[root@node2 ~]# vim /home/zookeeper/data/myid
2
[root@node3 ~]# vim /home/zookeeper/data/myid
3
-----启动各节点zk---------
[root@node1 ~]# /home/zookeeper/bin/zkServer.sh start
[root@node2 ~]# /home/zookeeper/bin/zkServer.sh start
[root@node3 ~]# /home/zookeeper/bin/zkServer.sh start
[root@node1 ~]# jps
1866 QuorumPeerMain //zk进程名
1884 Jps
9、node2、node3和node4下启动JN,然后启动node1 NN,并执行格式化,然后再node1 NN元数据拷贝到node2.
[root@node2 sbin]# ./hadoop-daemon.sh start journalnode
starting journalnode, logging to /root/hadoop-2.7./logs/hadoop-root-journalnode-node2.out
[root@node2 sbin]# jps
JournalNode
Jps
QuorumPeerMain
[root@node1 bin]# ./hdfs namenode -format //格式化
[root@node1 sbin]# /home/hadoop/sbin/hadoop-daemon.sh start namenode //启动NN,不然拷贝不成功
[root@node2 bin]# ./hdfs namenode -bootstrapStandby //元数据拷贝到node2,在hadoop临时目录中可以看到fsimage
10、关掉所有hadoop进程,从新启动hdfs.
3_HA介绍和安装部署的更多相关文章
- Storm介绍及安装部署
本节内容: Apache Storm是什么 Apache Storm核心概念 Storm原理架构 Storm集群安装部署 启动storm ui.Nimbus和Supervisor 一.Apache S ...
- Apache Solr 初级教程(介绍、安装部署、Java接口、中文分词)
Python爬虫视频教程零基础小白到scrapy爬虫高手-轻松入门 https://item.taobao.com/item.htm?spm=a1z38n.10677092.0.0.482434a6E ...
- Kafka介绍及安装部署
本节内容: 消息中间件 消息中间件特点 消息中间件的传递模型 Kafka介绍 安装部署Kafka集群 安装Yahoo kafka manager kafka-manager添加kafka cluste ...
- hue框架介绍和安装部署
大家好,我是来自内蒙古的小哥,我现在在北京学习大数据,我想把学到的东西分享给大家,想和大家一起学习 hue框架介绍和安装部署 hue全称:HUE=Hadoop User Experience 他是cl ...
- Hadoop入门进阶课程13--Chukwa介绍与安装部署
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,博主为石山园,博客地址为 http://www.cnblogs.com/shishanyuan ...
- Spark介绍及安装部署
一.Spark介绍 1.1 Apache Spark Apache Spark是一个围绕速度.易用性和复杂分析构建的大数据处理框架(没有数据存储).最初在2009年由加州大学伯克利分校的AMPLab开 ...
- Elasticsearch介绍及安装部署
本节内容: Elasticsearch介绍 Elasticsearch集群安装部署 Elasticsearch优化 安装插件:中文分词器ik 一.Elasticsearch介绍 Elasticsear ...
- Zookeeper介绍及安装部署
本节内容: Zookeeper介绍 Zookeeper特点 Zookeeper应用场景 用到了Zookeeper的一些系统 Zookeeper集群安装部署 一.Zookeeper介绍 是一个针对大型分 ...
- 大数据技术之_13_Azkaban学习_Azkaban(阿兹卡班)介绍 + Azkaban 安装部署 + Azkaban 实战
一 概述1.1 为什么需要工作流调度系统1.2 常见工作流调度系统1.3 各种调度工具特性对比1.4 Azkaban 与 Oozie 对比二 Azkaban(阿兹卡班) 介绍三 Azkaban 安装部 ...
随机推荐
- EIGRP-4-调整接口度量参数来影响路径选择
从EIGRP度量参数的讨论中可以看出.能够手动配置的EIGRP度量参数只有带宽和延迟. 通过使用bandwidth命令强迫EGIRP使用或不使用某条特定路径.看起来是一个很有吸引力的做法.不过这个问题 ...
- Jmeter分布式(转)jmeter -n -t baidu.jmx -l result.jtl -R 172.16.20.146:1099
1.准备2台在同一个局域网内的机器,一台作为master主控机,一台作为slave 执行机 master机器ip:172.16.20.134 slave机器ip:172.16.20.146 2.在2台 ...
- 返回top写法技巧
HTML<a href="#" class="fixed">top</a> CSS: .fixed{ padding: 20px 15p ...
- Node.js实现TCP和HTTP并作简单的比较
TCP和Node 传输控制协议是一个面向连接的协议,换句话说,它是一个传输层的协议,它主要的职务呢,就是确保信息传输的正确性. 我们使用的很多如HTTP协议都是基于TCP的,为什么呢?因为我们不希望传 ...
- Angular学习笔记【如何正确使用第三方组件】
例如:ng-bootstrap的使用: 1.首先肯定是先要安装,参考官网给出的指令安装即可.(npm install --save @ng-bootstrap/ng-bootstrap) 2.在App ...
- 牛客假日团队赛1 A.蹄球锦标赛
链接: https://ac.nowcoder.com/acm/contest/918/A 题意: 为了准备即将到来的蹄球锦标赛,Farmer John正在训练他的N头奶牛(方便起见,编号为1-N,其 ...
- 牛客假日团队赛1 G.Superbull
链接: https://ac.nowcoder.com/acm/contest/918/G 题意: Bessie and her friends are playing hoofball in the ...
- c++的直接初始化与复制初始化 未完成!!!!!!!!!!!!
直接初始化:是直接调用类的构造函数进行初始化.如下: string a;//调用默认构造函数 string a("hello");//调用参数为 const char* 类型的构造 ...
- Linux Shell中的反引号,单引号,双引号
反引号位 (`) 位于键盘的Tab键的上方.1键的左方.注意与单引号(')位于Enter键的左方的区别. 在Linux中起着命令替换的作用.命令替换是指shell能够将一个命令的标准输出插在一个命令行 ...
- Android模拟器使用SD卡
在Android的应用开发中经常要用到与SD卡有关的调试,本文就是介绍关于在Android模拟器中SD卡的使用 一. 准备工作 在介绍之前首先做好准备工作,即配好android的应用开发环境 ...