Hodoop1.x 到 Hadoop2.x

1、Hadoop 1.x 存在的问题:

– HDFS存在的问题

• NameNode单点故障,难以应用于在线场景

• NameNode压力过大,且内存受限,影响系统扩展性

– MapReduce存在的问题

• JobTracker访问压力大,影响系统扩展性

•难以支持除MapReduce之外的计算框架,比如Spark、Storm等

2、Hadoop 1.x与Hadoop 2.x

– Hadoop2.x由HDFS、MapReduce和YARN三个分支构成;

• HDFS:NNFederation、HA;

• MapReduce:运行在YARN上的MR;

• YARN:资源管理系统

3、Hadoop 2.x

– 解决HDFS1.0中单点故障和内存受限问题。

– 解决单点故障

• HDFSHA:通过主备NameNode解决

•如果主NameNode发生故障,则切换到备NameNode上

– 解决内存受限问题

•HDFSFederation(联邦)

• 水平扩展,支持多个NameNode;

• 每个NameNode分管一部分目录;

• 所有NameNode共享所有DataNode存储资

– 2.x仅是架构上发生了变化,使用方式不变

– 对HDFS使用者透明

– HDFS1.x中的命令和API仍可以使用

Hadoop 2.x HA

1、HDFS 2.0 HA

– 主备NameNode

– 解决单点故障

• 主NameNode对外提供服务,备NameNode同步主NameNode元数据, 以待切换

• 所有DataNode同时向两个NameNode汇报数据块信息

– 两种切换选择

• 手动切换:通过命令实现主备之间的切换,可以用HDFS升级等场合

• 自动切换:基于Zookeeper实现

– 基于Zookeeper自动切换方案

•ZookeeperFailoverController:监控NameNode健康状态,

• 并向Zookeeper注册NameNode

• NameNode挂掉后,ZKFC为NameNode竞争锁,获得ZKFC锁

• 的NameNode变为active

2、HDFS 2.x Federation

– 通过多个namenode/namespace把元数据的存储和管理分散到多个 节点中,使到namenode/namespace可以通过增加机器来进行水平 扩展。

– 能把单个namenode的负载分散到多个节点中,在HDFS数据规模较大 的时候不会也降低HDFS的性能。可以通过多个namespace来隔离不 同类型的应用,把不同类型应用的HDFS元数据的存储和管理分派到不 同的namenode中。

3、yarn

– YARN:YetAnotherResourceNegotiator;

– Hadoop2.0新引入的资源管理系统,直接从MRv1演化而来的;

• 核心思想:将MRv1中JobTracker的资源管理和任务调度两个功能分开, 分别由ResourceManager和ApplicationMaster进程实现

•ResourceManager:负责整个集群的资源管理和调度

•ApplicationMaster:负责应用程序相关的事务,比如任务调度、任务监控和容错等

– YARN的引入,使得多个计算框架可运行在一个集群中

• 每个应用程序对应一个ApplicationMaster

• 目前多个计算框架可以运行在YARN上,比如MapReduce、Spark、 Storm等

4、MapReduce On YARN

–MapReduceOnYARN:MRv2

– 将MapReduce作业直接运行在YARN上,而不是由JobTracker和TaskTracker构建的 MRv1系统中

– 基本功能模块

• YARN:负责资源管理和调度

• MRAppMaster:负责任务切分、任务调度、任务监控和容错等

•MapTask/ReduceTask:任务驱动引擎,与MRv1一致

– 每个MapRduce作业对应一个MRAppMaster

• MRAppMaster任务调度

• YARN将资源分配给MRAppMaster

• MRAppMaster进一步将资源分配给内部的任务

– MRAppMaster容错

• 失败后,由YARN重新启动

• 任务失败后,MRAppMaster重新申请资源

5、实现HA的本质:

1>    fsimage (active NameNode格式化之后将fsimage复制给standbyNameNode)

2>    edits (通过journalNode同步)

6、先决条件:zookeeper集群

1>作用

1>    监控NN 状态并汇报给Zookeeper

2>    将 standby 转换为 active

2> 搭建

NN

DN

JN

ZK

ZKFC zookeeper failover controller

Node3

1

1

1

Node4

1

1

1

1

1

Node5

1

1

1

Node6

1

1

如上,node3、node4和node5安装Zookeeper

步骤:a.解压tar包:tar -zxvf zookeeper-3.4.6.tar.gz

b.修改zoo.conf文件(在conf目录下将zoo_sample.cfg重命名或者新建)

tickTime=2000

dataDir=/opt/zookeeper/data  #(目录需要手动创建,myid文件放该目录下)

dataLogDir=/opt/zookeeper/dataLog #(此条可以不写)

clientPort=2181

initLimit=5

syncLimit=2

server.1=node3:2888:3888  #需要添加

server.2=node4:2888:3888

server.3=node5:2888:3888

myid的内容依据zoo.conf,如node3的myid内容为数字1,node4的为2

c.同步三台机器的zoo.conf配置文件

将Zookeeper配置到系统环境中:

vi ~/.bash_profile (添加以下两行)

exportZOOKEEPER=/usr/hadoopsoft/zookeeper-3.4.6

export PATH=$PATH:$ZOOKEEPER/bin

source ~/.bash_profile

启动命令:

zkServer.sh start

7、搭建

NN

DN

JN

ZK

ZKFC zookeeper failover controller

Node3

1

1

1

Node4

1

1

1

1

1

Node5

1

1

1

Node6

1

1

搭建步骤:

1、  主机,修改hosts,网络 – 网络连接、关闭防火墙

2、  时间同步

3、  Jdk配置环境变量

4、  下载tar 解压

5、etc/hadoop/hadoop-env.sh

修改export JAVA_HOME=/usr/java/ jdk1.7.0_79

6、  免密钥配置

  $ ssh-keygen -t dsa -P '' -f ~/.ssh/id_dsa
  $ cat ~/.ssh/id_dsa.pub >> ~/.ssh/authorized_keys

Node3 与Node4

Node3 、Node4分别与其他几个节点

7、  修改配置文件

!!!masters配置文件必须删除所有节点!!!

slaves 配置的是DN(DataNode)

core-site.xml

<configuration>

<property>

<name>fs.defaultFS</name>   HDFS命名空间名称

<value>hdfs://sxt</value>

</property>

<property>

<name>hadoop.tmp.dir</name>

<value>/opt/hadoop</value>

</property>

</configuration>

以下按照官方文档修改、添加

HDFS High Availability Using the Quorum JournalManager

hdfs-site.xml

<property>

<name>dfs.nameservices</name>   命名空间名称

<value>sxt</value>

</property>

<property>

<name>dfs.ha.namenodes.sxt</name>   两台NN别名

<value>nn1,nn2</value>

</property>

<property>

<name>dfs.namenode.rpc-address.sxt.nn1</name>  NN RPC访问端口

<value>node1:8020</value>

</property>

<property>

<name>dfs.namenode.rpc-address.sxt.nn2</name>

<value>node2:8020</value>

</property>

<property>

<name>dfs.namenode.http-address.sxt.nn1</name>  NN HTTP访问端口

<value>node1:50070</value>

</property>

<property>

<name>dfs.namenode.http-address.sxt.nn2</name>

<value>node2:50070</value>

</property>

<property>

<name>dfs.namenode.shared.edits.dir</name>   执行JN集群 <value>qjournal://node4:8485;node5:8485;node6:8485/sxt</value>

</property>

<property>

<name>dfs.client.failover.proxy.provider.sxt </name>  NN自动切换 <value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>

</property>

<property>

<name>dfs.ha.fencing.methods</name>  指定ssh认证以及私钥文件

<value>sshfence</value>

</property>

<property>

<name>dfs.ha.fencing.ssh.private-key-files</name>

<value>/root/.ssh/id_dsa</value>  要配置为自己主机私钥文件(ssh加密方式不同需要修改id_dsa)

</property>

<property>

<name>dfs.journalnode.edits.dir</name>  JN节点上edits文件存放目录

<value>/opt/journal/data</value>

</property>

注:以上配置中的红色“sxt”为hdfs命名空间名称,可全部替换为自己的命名

vi ~/.bash_profile (将hadoop配置到环境中)

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

export PATH=$PATH:$JAVA_HOME/bin

exportCLASSPATH=.:/lib/dt.jar:/lib/tools.jar

exportHADOOP_HOME=/usr/hadoopsoft/hadoop-2.5.1

exportPATH=$PATH:$HADOOP_HOME/bin

exportPATH=$PATH:$HADOOP_HOME/sbin

exportZOOKEEPER=/usr/hadoopsoft/zookeeper-3.4.6

export PATH=$PATH:$ZOOKEEPER/binsource ~/.bash_profile

source ~/.bash_profile

同步配置文件!!

检查目录是否存在/opt/hadoop  全部删除

操作::

首先启动所有的JN   hadoop-daemon.sh start journalnode

然后选一台NN 执行格式化命令  hdfs namenode -format

接着启动 这台NN  hadoop-daemon.sh start namenode

最后在另外一台NN 执行同步命令   hdfs namenode -bootstrapStandby

配置HDFS中关于ZK的内容

修改hdfs-site.xml

<property>

<name>dfs.ha.automatic-failover.enabled</name>  启动自动切换设置为true

<value>true</value>

</property>

修改core-site.xml

<property>

<name>ha.zookeeper.quorum</name>   指定zk集群

<value>node3:2181,node4:2181,node5:2181</value>

</property>

 

操作:

启动zk,同时一起启动三台

zkServer.sh start

在其中一台NN上执行格式化zk命令  hdfs zkfc -formatZK

停止之前启动的节点

启动dfsstart-dfs.sh

 

HDFS HA搭建完成以后

重启时,首先需要启动zk  再执行hdfs启动脚本

MR—Hadoop核心组件

– Hadoop  分布式计算框架(MapReduce)

1、MapReduce设计理念

–何为分布式计算。

–移动计算,而不是移动数据。

 

2、计算框架MR

3、MapReduce的 Split大小

– max.split(100M)

– min.split(10M)

– block(64M)

– max(min.split,min(max.split,block))

4、Mapper

– Map-reduce的思想就是“分而治之”

• Mapper负责“分”,即把复杂的任务分解为若干个“简单的任务”执行

–“简单的任务”有几个含义:

• 数据或计算规模相对于原任务要大大缩小;

• 就近计算,即会被分配到存放了所需数据的节点进行计算;

• 这些小任务可以并行计算,彼此间几乎没有依赖关系

5、Hadoop计算框架Reducer

–对map阶段的结果进行汇总。

– Reducer的数目由mapred-site.xml配置文件里的项目mapred.reduce.tasks 决定。缺省值为1,用户可以覆盖之

6、Hadoop计算框架Shuffler

–在mapper和reducer中间的一个步骤

–可以把mapper的输出按照某种key值重新切分和组合成n份,把key值符合某种范围的输出送到特定的reducer那里去处理

–可以简化reducer过程

Hadoop计算框架shuffle过程详解

 

– 每个map task都有一个内存缓冲区(默认是100MB),存储着map的输出结果

– 当缓冲区快满的时候需要将缓冲区的数据 以一个临时文件的方式存放到磁盘(Spill)

– 溢写是由单独线程来完成,不影响往缓冲 区写map结果的线程(spill.percent,默认是 0.8)

– 当溢写线程启动后,需要对这80MB空间内 的key做排序(Sort)

–假如client设置过Combiner,那么现在就是使用Combiner的时候了。将有相同key的key/value对的value加起来,减少溢写到磁盘的数据量。( reduce1,word1,[8])。

–当整个map task结束后再对磁盘中这个map task产生的所有临时文件做合并(Merge),对于“word1”就是像这样的:{“word1”, [5, 8, 2, …]},假如有Combiner,{word1 [15]},最终产生一个文件。

– reduce  从tasktrackercopy数据

– copy过来的数据会先放入内存缓冲区中,这里的缓冲区大小要比map端的更为灵活,它基于JVM的heap size设置

– merge有三种形式:1)内存到内存 2)内存到磁盘 3)磁盘到磁盘。merge 从不同tasktracker上拿到的数据,{word1 [15,17,2]}

–参考博客http://langyu.iteye.com/blog/992916?page=3#comments

7、MapReduce的架构

–一主多从架构

–主 JobTracker: ResourceManager

• 负责调度分配每一个子任务task运行于TaskTracker上,如果发现有失败的task就重新分配其任务到其他节点。每一个hadoop集群中只一个JobTracker, 一般它运行在Master节点上。

–从TaskTracker:NodeManager

• TaskTracker主动与JobTracker通信,接收作业,并负责直接执行每一个任务 ,为了减少网络带宽TaskTracker最好运行在HDFS的DataNode上

MR搭建、HA

NN

DN

JN

ZK

ZKFC zookeeper failover controller

RS

Node1

1

1

1

Node2

1

1

1

1

1

Node3

1

1

1

1

Node4

1

1

1

 

停掉HA集群

stop-dfs.sh

修改配置文件:

mapred-site.xml:

<configuration>

<property>

<name>mapreduce.framework.name</name>  mr框架运行在yarn上,通过yarn做资源管理

<value>yarn</value>

</property>

</configuration>

yarn-site.xml:

<configuration>

<property>

<name>yarn.nodemanager.aux-services</name>

        <value>mapreduce_shuffle</value>

</property>

</configuration>

ResourceManager NodeManager主从结构

RS存在单点故障问题   所以要对他做HA  通过zk

修改yarn-site.xml配置文件

<property>

<name>yarn.resourcemanager.ha.enabled</name>  启用ha 设置为true

<value>true</value>

</property>

<property>

<name>yarn.resourcemanager.cluster-id</name>  名称要与之前namespace不同(之前我设置了“sxt”)

<value>cluster1</value>

</property>

<property>

<name>yarn.resourcemanager.ha.rm-ids</name>

<value>rm1,rm2</value>

</property>

<property>

<name>yarn.resourcemanager.hostname.rm1</name> 分别指定两台rm

<value>node5</value>

</property>

<property>

<name>yarn.resourcemanager.hostname.rm2</name>

<value>node6</value>

</property>

<property>

<name>yarn.resourcemanager.zk-address</name>   指定zk集群

<value>node3:2181,node4:2181,node5:2181</value>

</property>

操作

停止之前的hdfs ha集群

stop-dfs.sh

启动Zookeeper集群:zkServer.sh start (在zk每一台机器上执行)

启动集群:start-all.sh(在一台机器上执行)


  

 

Rs会在你运行启动命令的节点 启动

Rs需要手动来启动,两台分别执行一下命令

yarn-daemon.sh start resourcemanager

Hadoop集群搭建完成

启动

启动Zookeeper集群,每台机器执行命令: zkServer.sh start

start-all.sh

手动启动RS,两台配置了resourcemanager的机器:yarn-daemon.sh start resourcemanager

浏览器访问node3:50070


访问node4:50070

可以手动停止处于active状态的node4的NN进程:hadoop-daemons.shstop namenode

启动:hadoop-daemons.shstart namenode

再次浏览器访问node3和node4的50070端口查看状态

访问node5:8088(RM)

如图,此时node5的RM处于standby状态将自动重定向到active状态的node6

手动停止node6的RM进程:yarn-deamon.sh stop resourcemanager

启动命令:yarn-deamon.sh start resourcemanager

再次访问node5和node6的8088端口,可以看出active状态的机器已经改变

至此,HDFS HA与MR HA已经搭建完成

停止

stop-all.sh

zkServer.sh stop

 

hdfs HA + MR HA相关推荐

  1. 什么是Hadoop - HDFS - MapReduce - YARN - HA

    Hadoop 为什么要有Hadoop? 从计算机诞生到现今,积累了海量的数据,这些海量的数据有结构化.半结构化.非 结构的数据,并且这些海量的数据存储和检索就成为了一大问题. 我们都知道大数据技术难题 ...

  2. hadoop3节点hdfs ha,yarn ha配置

    2019独角兽企业重金招聘Python工程师标准>>> 0 各机器职责 进程 node1 node2 node3 NN NameNode 1 1 DN DateNode 1 1 1 ...

  3. Hadoop(HDFS,YARN)的HA集群安装

    搭建Hadoop的HDFS HA及YARN HA集群,基于2.7.1版本安装. 安装规划 角色规划 IP/机器名 安装软件 运行进程 namenode1 zdh-240 hadoop NameNode ...

  4. Could not create FileSystem for highly available storage path (hdfs://node7-1/flink/ha/flinkCluster)

    flink 集群 Standalone 模式 高可用部署无法启动已解决 hadoop , zookeeper,工作正常,flink-standalone 启动正常.在搭建HA集群时,集群启动未报错,查 ...

  5. 葵花宝典--HDFS高可用HA

    一.HA概述 所谓谓HA(High Availablity),即高可用(7*24小时不中断服务).实现高可用最关键的策略是消除单点故障.HA严格来说应该分成各个组件的HA机制:HDFS的HA和YARN ...

  6. Hadoop HA (一) --------- HA 概述 与 HDFS-HA 集群搭建

    目录 一.HA 概述 二.HDFS-HA 集群搭建 一.HA 概述 所谓 HA (High Availablity),即高可用 (7*24 小时不中断服务) .实现高可用最关键的策略是消除单点故障.H ...

  7. 一 梳理 从 HDFS 到 MR。

    MapReduce 不仅仅是一个工具,更是一个框架.我们必须拿问题解决方案去适配框架的 map 和 reduce 过程   很多情况下,需要关注 MapReduce 作业所需要的系统资源,尤其是集群内 ...

  8. HDFS、MR、Kafka、Storm、Spark、Hbase、Redis原理图

    1.大数据分析阶段图 2.大数据分析平台总体架构 3.大数据分析平台技术栈 4.HDFS分布式存储原理图 5.MR计算原理图 6.Kafka分布式消息队列原理图 7.Storm分布式流式计算原理图 8 ...

  9. 【高可用HA】HA之DRBD详解(基于CentOS7.0)

    作者:吴业亮 博客:https://wuyeliang.blog.csdn.net/ 一.DRBD简介 DRBD的全称为:Distributed ReplicatedBlock Device(DRBD ...

最新文章

  1. java代码使用http请求解压zip包并解析xml_Javascript 是如何解析 Excel 文件的?
  2. public接口可以被任何一个类实现_一文带你深入Java核心技术:对象克隆+接口与回调,还有这种操作...
  3. 百度飞桨入选互联网领先科技成果,王海峰:AI进入工业化大生产新阶段
  4. golang map range遍历是随机顺序
  5. 经典C语言程序100例之五六
  6. mysql mydump还原_用mydump对所有数据库进行备份,还原具体案例
  7. Springboot-Flowable 快速开发工作流
  8. CentOS/Ubuntu制作自动安装arm iso镜像
  9. field-symbols的用法[转]
  10. PHP之内置web服务器
  11. bp神经网络反向传播推导,bp神经网络的传递函数
  12. Linux CentOS 内核编译全流程:从安装vmware开始
  13. 基于fpga+stm32的数字示波器
  14. linux磁盘写保护怎么修改_在Linux下创建写保护的文件的教程
  15. 《C++ Primer 第5版》-13.6对象移动-康奈尔笔记
  16. 基于单片机的数字秒表
  17. Mysql中删除语句delete、truncate、drop的区别
  18. 报表和专业BI有什么区别?
  19. iis启动和停止的方法介绍
  20. 程序员生存状态调查报告

热门文章

  1. NXP之i.MX RT系列单片机上电操作
  2. 慢慢毁掉你的,是你的将就与凑合
  3. Complex Network Analysis in Python学习笔记
  4. 手机远程控制电脑+手机显示器
  5. 广义相对论-学习记录9-第四章-相对论性的引力理论2
  6. 腾讯云服务器CVM(CentOS 7、Tencent Linux)手动搭建LNMP环境(linux+Nginx+Mariadb+PHP)
  7. [填坑]解决PL2303HXA自2012已停产,请联系供货商
  8. 软件安装 怎么安装与破解Xmind 8 pro
  9. 动态拨号器linux,Debian Linux下ADSL拨号及动态域名的使用
  10. activemq--可持久化机制之AMQ