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和ApplicationManager进程实现,ResourceManager负责集群的资源管理和调度,ApplicationManager负责应用程序相关的事务,比如任务调度、任务监控和容错。
2、yarn的引入使得多个计算框架可以运行在一个集群中(实现了计算框架的接口化),每个应用程序对应一个ApplicationManager.
3、mr运行在yarn上:将MapReduce作业直接运行在yarn上,而不是由JobTracker和TaskTracker构建的mr系统中,yarn负责资源管理和调度,MRAppMaster负责任务调度、任务监控和容错等。MapTask和ReduceTask任务驱动引擎,与mr1一致。每个MapReduce作业对应一个MRMaster,yarn将资源分配给MRAppMaster,MRAppMaster进一步将资源分配给内部的任务。MRAppMaster容错:失败后,由yarn重新启动,任务失败后,MRAppMaster重新申请资源。

六、linux上hadoop2.5.2 HA安装部署

按照理论部分,需要搭建如下节点:

1、准备4台Linux机器,node1配置hosts,之后scp到node2,node3,node4:

[[email protected] ~]# 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并且配置环境变量:

[[email protected] ~]# vim /etc/profile    //增加以下内容:
----
JAVA_HOME=/usr/local/jdk1.7.0_03/
PATH=$PATH:$JAVA_HOME/bin
export PATH JAVA_HOME
----
[[email protected] ~]# source /etc/profile
[[email protected] ~]# jps
1432 Jps

3、node1免密码登录node2、node3和node4配置

-------------各节点先安装openssh
[[email protected] ~]#yum -y install openssh-clients     

-------------各节点生成公私钥,放入本地认证,完成各自本地登录
[[email protected] ~]# ssh-keygen -t dsa -P ‘‘ -f ~/.ssh/id_dsa
[[email protected] ~]# cat ~/.ssh/id_dsa.pub >> ~/.ssh/authorized_keys
[[email protected] ~]# ssh node1     //登录本地成功
Last login: Thu Aug 25 20:03:18 2016 from 192.168.13.1
[[email protected] ~]# 

--------------复制node1公钥到其它节点
[[email protected] ~]# scp ~/.ssh/id_dsa.pub   [email protected]:~
[[email protected] ~]# scp ~/.ssh/id_dsa.pub   [email protected]:~
[[email protected]node1 ~]# scp ~/.ssh/id_dsa.pub   [email protected]:~

--------------node1公钥加入各节点认证
[[email protected] ~]# cat ~/id_dsa.pub >> ~/.ssh/authorized_keys
[[email protected] ~]# cat ~/id_dsa.pub >> ~/.ssh/authorized_keys
[[email protected] ~]# cat ~/id_dsa.pub >> ~/.ssh/authorized_keys

[[email protected] ~]# ssh node2 //直接登录node2成功
Last login: Thu Aug 25 20:08:04 2016 from 192.168.13.1
[[email protected] ~]# ssh node3 //直接登录node3成功
Last login: Thu Aug 25 20:08:08 2016 from 192.168.13.1
[[email protected] ~]# ssh node4 //直接登录node4成功
Last login: Thu Aug 25 20:08:10 2016 from 192.168.13.1

4、各节点安装hadoop-2.7.3和zookeeper-3.4.8

[[email protected] ~]# tar zxvf hadoop-2.7.3.tar.gz
[[email protected] ~]# ln -sf /root/hadoop-2.7.3  /home/hadoop

[[email protected] ~]# tar zxvf zookeeper-3.4.8.tar.gz
[[email protected] ~]# ln -sf /root/zookeeper-3.4.8  /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.

[[email protected] hadoop]# vim slaves
node2
node3
node4

至此完成hadoop配置,将node1 conf目录下所有配置复制到其它节点。

8、zookeeper配置并启动

[[email protected] ~]# cp /home/zookeeper/conf/zoo_sample.cfg  /home/zookeeper/conf/zoo.cfg
[[email protected] conf]# vim zoo.cfg
dataDir=/home/zookeeper/data
server.1=node1:2888:3888    //1 2 3 是zk集群的编号
server.2=node2:2888:3888
server.3=node3:2888:3888 -----scp到其它节点-------

-----配置各节点myid,和zoo.cfg中集群编号一致----[[email protected] ~]# vim /home/zookeeper/data/myid1[[email protected] ~]# vim /home/zookeeper/data/myid2[[email protected] ~]# vim /home/zookeeper/data/myid3-----启动各节点zk---------[[email protected] ~]# /home/zookeeper/bin/zkServer.sh start[[email protected] ~]# /home/zookeeper/bin/zkServer.sh start[[email protected] ~]# /home/zookeeper/bin/zkServer.sh start[[email protected] ~]# jps1866 QuorumPeerMain  //zk进程名1884 Jps

9、node2、node3和node4下启动JN,然后启动node1 NN,并执行格式化,然后再node1 NN元数据拷贝到node2.

[[email protected] sbin]# ./hadoop-daemon.sh start journalnode
starting journalnode, logging to /root/hadoop-2.7.1/logs/hadoop-root-journalnode-node2.out
[[email protected] sbin]# jps
1957 JournalNode
2006 Jps
1866 QuorumPeerMain[[email protected] bin]# ./hdfs namenode -format   //格式化[[email protected] sbin]# /home/hadoop/sbin/hadoop-daemon.sh start namenode   //启动NN,不然拷贝不成功[[email protected] bin]# ./hdfs namenode -bootstrapStandby //元数据拷贝到node2,在hadoop临时目录中可以看到fsimage

10、关掉所有hadoop进程,从新启动hdfs.

时间: 2024-10-14 02:59:01

3_HA介绍和安装部署的相关文章

Storm介绍及安装部署

本节内容: Apache Storm是什么 Apache Storm核心概念 Storm原理架构 Storm集群安装部署 启动storm ui.Nimbus和Supervisor 一.Apache Storm是什么 Apache Storm是自由开源的分布式实时计算系统,擅长处理海量数据,适用于数据实时处理而非批处理. 批处理使用的大多是鼎鼎大名的hadoop或者hive,作为一个批处理系统,hadoop以其吞吐量大.自动容错等优点,在海量数据处理上得到了广泛的使用.但是,hadoop不擅长实时

Kafka介绍及安装部署

本节内容: 消息中间件 消息中间件特点 消息中间件的传递模型 Kafka介绍 安装部署Kafka集群 安装Yahoo kafka manager kafka-manager添加kafka cluster 一.消息中间件 消息中间件是在消息的传输过程中保存消息的容器.消息中间件在将消息从消息生产者到消费者时充当中间人的作用.队列的主要目的是提供路由并保证消息的传送:如果发送消息时接收者不可用,消息对列会保留消息,直到可以成功地传递它为止,当然,消息队列保存消息也是有期限的. 二.消息中间件特点 1

Zabbix介绍及安装部署

.    zabbix是一个基于WEB界面的提供分布式系统监视以及网络监视功能的企业级的开源解决方案,zabbix能监视各种网络参数,保证服务器系统的安全运营:并提供灵活的通知机制以让系统管理员快速定位/解决存在的各种问题. zabbix由2部分构成,zabbix server与可选组件zabbix agent zabbix server可以通过SNMP,zabbix agent,ping,端口监视等方法提供对远程服务器/网络状态的监视,数据收集等功能,它可以运行在Linux, Solaris,

hue框架介绍和安装部署

大家好,我是来自内蒙古的小哥,我现在在北京学习大数据,我想把学到的东西分享给大家,想和大家一起学习 hue框架介绍和安装部署 hue全称:HUE=Hadoop User Experience 他是cloudera公司提供的一个web框架,和其他大数据框架整合,提供可视化界面 hue的架构 1.hue UI:hue提供一个可视化的web界面 2.hue server:hue的服务器,对外提供一个web的访问 3.hue db:存储整合框架的信息 1.Hue的介绍 HUE=Hadoop User E

Elasticsearch介绍及安装部署

本节内容: Elasticsearch介绍 Elasticsearch集群安装部署 Elasticsearch优化 安装插件:中文分词器ik 一.Elasticsearch介绍 Elasticsearch是一个分布式搜索服务,提供Restful API,底层基于Lucene,采用多shard的方式保证数据安全,并且提供自动resharding的功能,加之github等大型的站点也采用 Elasticsearch作为其搜索服务. 二.Elasticsearch集群安装部署 1. 环境信息 主机名

keepalived的介绍和安装部署

keepalived的介绍 作用 keepalived主要针对LVS群聚应用而设计的,提供故障切换和健康检查功能.在非LVS群集环境中,也可用来实现多机热备功能. 故障切换:ha fallover功能,实现LB Master和Backup主机之间故障转移和自动切换 这是针对有两个负载均衡器Director同时工作而采取的故障转移措施.当主负载均衡器(MASTER)失效或出现故障时候,备份负载均衡器(BACKUP)将自动接管主负载均衡器的所有工作:一旦主负载均衡器故障修复,主负载均衡器又会接管回它

SharePoint Online 开发篇:node.js和npm介绍和安装部署

Blog链接:https://blog.51cto.com/13969817 过去的几年中,出现的最重要的开发平台是Node.js和基于npm的开发,SharePoint Framework是这种开发方法的一个示例,本文我们来了解下Node.js.npm和Node Package Manager 是什么? Node.js,是一个建立在Google Chrome JavaScript的引擎(V8引擎)上的服务器端平台.JavaScript引擎的性能已经提高了很多,取决于你在做什么,事实上,它们的性

hadoop(1)_HDFS介绍及安装部署

一.hadoop简介 1.hadoop的初衷是为了解决Nutch的海量数据爬取和存储的需要,HDFS来源于google的GFS,MapReduce来源于Google的MapReduce,HBase来源于Google的BigTable.hadoop后被引入Apache基金会. 2.hadoop两大核心设计是HDFS和MapReduce,HDFS是分布式存储系统,提供高可靠性.高扩展性.高吞吐率的数据存储服务;MapReduce是分布式计算框架,具有易于编程.高容错性和高扩展性等优点. 3.hado

NoSQL数据库之Redis数据库:Redis的介绍与安装部署

 NoSQL(NoSQL = Not Only SQL),它指的是非关系型的数据库.随着互联网web2.0网站的兴起,传统的关系数据库在应付web2.0网站,特别是超大规模和高并发的SNS类型的web2.0纯动态网站已经显的力不从心,暴露了很多难以克服的问题,而非关系型的数据库则由于其本身的特点得到了非常迅速的发展. NoSQL的特点: 特点一: 是以key-value形式存储,和传统的关系型数据库不一样,不一定遵循传统数据库的一些基本要求,比如说遵循SQL标准.ACID属性.表结构等等,这