基于YARN的配置信息, 参见: http://www.ibm.com/developerworks/cn/opensource/os-cn-hadoop-yarn/

hadoop入门 - 基础概念

HDFS (Hadoop Distributed File System)

HDFS

是Hadoop框架的子模块, 采用master-slave结构, 一个HDFS Cluster由一个NameNode(管理系统元数据), 和多个DataNode(存放数据文件)组成. 文件将被分割成多块, 存储在一组DataNode中.
NameNode用来操作文件命名空间的文件或目录操作. 如打开, 关闭, 重命名等等. 同时它需要确定文件块与DataNode的映射.
DataNode负责来自文件系统Client的读写请求. 同时还要执行文件块的创建, 删除, 和来自NameNode的块复制指令.
Client读写文件的工作模式: Clients先和NameNode联系, 取得文件原数据(metadata)或者文件修改数据, 然后直接和DataNodes进行文件读写操作.

JobTracker

Hadoop用于分发MapReduce任务到特定节点的一个服务. 分发的优先级是先把任务给数据所在的节点, 其次给数据所在rack中的节点.
rack: 一份数据, 分割后分布存放在不同节点中, 这些节点组成一个rack.
工作流程:
1. Client提交jobs到JobTracker
2. JobTracker和NameNode联系, 确定数据所在位置.
3. JobTracker按分发的优先级顺序, 找到数据所在位置附近的TaskTracker.
4. JobTracker把作业提交到选中的TaskTracker节点.
5. 若任务失败, TaskTracker会通知JobTracker, JobTracker决定如何处理. 重新分发给其他节点, 对该TaskTracker做一定的标记以避免再次出现问题.
6. 各个节点计算完毕, JobTracker会更新自己的状态, Client app可以对其询问相关结果.
潜在问题, JobTracker是MapReduce的关键点, 如果它出现问题, 会导致所以jobs挂起.

TaskTracker

接收MapReduce任务的节点. 主要功能是

1 .资源管理
每个TaskTracker都有一组slot, 用于表明可接收的任务数量. 当JobTracker试图分发任务时, 首先会检查数据文件所在的节点上是否有空的slot, 如果没有, 则考虑分发给数据文件所在的rack中的某个节点.
TaskTracker会每隔几分钟给JobTracker发送一次状态更新, 包括可用的slot数量.
2. 作业调度, 监控:
对任务进行Map, Reduce和Shuffle操作.
TaskTracker会为每个任务启动一个独立的JVM进程, 然后监控各个任务进程, 捕捉输出结果和返回代码, 并将执行结果告知JobTracker.

MapReduce

是Hadoop MapReduce Engine 用来在集群中分发作业的关键算法.

由Map(映射)和Reduce(规约)两个函数式编程的概念组成.

Map

将input data(单个key-value对)转换成一组key-value对: map(key1,value) -> list<key2,value2>
注意: output的key可以和input的不同; output的多个entries可以使用同一个key.

Reduce

对特定的某个key对应的所以value值取出来, 生成一个新的list, 称为reduced output. reduce(key2, list<value2>) -> list<value3>

MapReduce引擎的核心概念

每个Map和Reduce都是独立的. 分布式系统对每份数据都会做多个拷贝, 并分发到不同的机器, 这样任何一个机器出问题都不容易导致整个计算被拖延.

不足之处

1. JobTracker是MapReduce的关键点, 可能引发单点故障. 并且JobTracker负责的任务过多, 导致资源消耗大, 当Job数量非常多的时候, 会造成很大的内存开销, 增加JobTracker出问题的风险. 一般认为MapReduce V1最多只能支持4000个左右的节点.
2. TaskTracker以Map/Reduce的Task数目作为资源的表示, 不考虑cpu/内存的占用情况, 如果两个大内存消耗的Task被调度到了一起, 很容易出现OOM.
3. TaskTracker把资源强制划分为Map Task Slot和Reduce Task Slot, 如果系统中只有Map Task或者只有Reduce Task时, 就会导致集群资源利用率很低.
4. 强制升级更新导致用户体验差.
5. 如果没有新的数据加入, 那么我们可以把计算结果做index, 这样下次同样的操作, 比如查询,就能很快从数据库得到答案. 但是如果数据持续被更新, 我们必须重新运行MR作业来确保index也得到更新, 当数据更新频率达到一定程度, MapReduce的工作原理迟早会导致资源不足.
6. 所有的Map操作没有完成之前, 任何一个Reduce操作都是无法开始的.
7. 通常我们会发现Reduce的输出总是小于Map的输入, 意味着我们用很大的datasource来生成很小的values.
8. 为了做到最大化并发, 作业中的Map和Reduce必须是无序的: 任何一个Map和Reduce都不能依赖于它们的MapReduce作业所生成的数据. 因此计算顺序无法控制.

YARN (aka MapReduce NextGen, aka MRv2)

Apache Hadoop YARN (Yet Another Resource Negotiator)
YARN是对MapReduce框架的重构(API和Interface兼容MRv1), 主要包括:

把JobTracker的两个主要功能(资源管理和作业调度/监控)分成了两个独立的部分 - RM和AM.

1. ResourceManager (RM) - 资源管理

从全局来对应用进行基础计算资源(内存, 带宽等等)管理, 这里说的应用要么是传统意义上的MapReduce作业, 要么是作业的有向无环图(DAG).
它又有两个主要部分:

  • Scheduler(S):

让RM根据所选的Policy(capacity guarantees, fairness, etc), 将资源分配给各个应用. 它让RM成为一个纯粹的调度器, 它在执行过程中, 不会去做Monitoring和tracking status等工作. 此外, 它也不会去重启因应用失败或者硬件错误而运行失败的任务. 调度工作是基于每个应用的资源需求来合理安排的, 包括CPU, 内存, 带宽, 磁盘空间等等.
调度器的插件可以将集群资源分配给多个队列和应用程序. 这些插件有:Capacity Scheduler(能力调度), Fair Scheduler(公平调度), 等等. 其中, 能力调度支持队列继承/层级支持, 为子队列之间共享集群资源提供更好的可控性和可预测性.

  • ApplicationsManager(ASM):

RM使用该组件来接受作业提交, 并为每个应用分配合适的容器来运行对应的AM, 同时管理AM, 在AM运行失败时提供service来重启AM所在的容器或者去其他机器重启一个AM.

2. ApplicationMaster(AM/AppMst) - 作业调度/监控

管理应用的调度和协调. 它会跟调度器索要运行应用所需的资源容器, 跟踪容器状态, 监控进程.

3. NodeManager

它是框架在每台机器上的代理, 负责容器的状态维护. 监视容器的资源状况, 并告知RM/Scheduler.

总结

RM是一个中心服务, 它调度并启动每个Job所对应的AM, 监控AM的存在状况. 它接受JobSubmitter提交的作业, 根据作业的上下文信息, 和NodeManager提供的容器状态信息, 为AM提供一个容器.
AM则负责一个Job生命周期内的所有工作, 包括对task的监控, 重启等等, 类似以前的JobTracker. 不同的是每个Job都有一个AM, 它们分散在RM以外的机器上, 也即, JobTracker也被分布式化了, 它们由RM中的ASM来统一监控, 一旦任何一个机器的AM出问题, ASM可以重启这个AM, 或者在其他机器上重启一个AM. 从而防止了单点故障的可能.

YARN相比MRv1, 配置和全局变量, 启停脚本都有变化, 详细参见:
http://www.ibm.com/developerworks/cn/opensource/os-cn-hadoop-yarn/

hadoop入门 - 案例

统计词频编辑
如果想统计下过去10年计算机论文出现最多的几个单词,看看大家都在研究些什么,那收集好论文后,该怎么办呢?

方法一:我可以写一个小程序,把所有论文按顺序遍历一遍,统计每一个遇到的单词的出现次数,最后就可以知道哪几个单词最热门了.这种方法在数据集比较耗时,是非常有效的,而且实现最简单,用来解决这个问题很合适.

方法二:写一个多线程程序,并发遍历论文.
这个问题理论上是可以高度并发的,因为统计一个文件时不会影响统计另一个文件.当我们的机器是多核或者多处理器,方法二肯定比方法一高效.但是写一个多线程程序要比方法一困难多了,我们必须自己同步共享数据,比如要防止两个线程重复统计文件.

方法三:把作业交给多个计算机去完成.
我们可以使用方法一的程序,部署到N台机器上去,然后把论文集分成N份,一台机器跑一个作业.这个方法跑得足够快,但是部署起来很麻烦,我们要人工把程序copy到别的机器,要人工把论文集分开,最痛苦的是还要把N个运行结果进行整合(当然我们也可以再写一个程序).

方法四:让MapReduce来帮帮我们吧!
MapReduce本质上就是方法三,但是如何拆分文件集,如何copy程序,如何整合结果这些都是框架定义好的.我们只要定义好这个任务(用户程序),其它都交给MapReduce.

Hadoop基础概念介绍的更多相关文章

  1. 【miscellaneous】 GStreamer应用开发手册学习笔记之基础概念介绍

    第3章. 基础概念介绍 本章将介绍GStreamer的基本概念. 理解这些概念对于你后续的学习非常重要,因为后续深入的讲解我们都假定你已经完全理解了这些概念. 3.1. 元件(Elements) 元件 ...

  2. 大数据 - hadoop基础概念 - HDFS

    Hadoop之HDFS的概念及用法 1.概念介绍 Hadoop是Apache旗下的一个项目.他由HDFS.MapReduce.Hive.HBase和ZooKeeper等成员组成. HDFS是一个高度容 ...

  3. 计算机系统4-> 计组与体系结构1 | 基础概念介绍

    在大二上学期学习数字逻辑的过程中,我对计算机如何运作产生了兴趣,因此开了这个系列来记录自己在这方面的学习过程,此前三篇分别是: 计算机系统->Hello World的一生 | 程序如何运行,从大 ...

  4. hadoop分布式存储(1)-hadoop基础概念(毕业设计)

    hadoop是一种用于海量数据存储.管理.分析的分布式系统.需要hadoop需要储备一定的基础知识:1.掌握一定的linux操作命令 2.会java编程.因此hadoop必须安装在有jdk的linux ...

  5. hadoop分布式存储(1)-hadoop基础概念

    hadoop是一种用于海量数据存储.管理.分析的分布式系统.需要hadoop需要储备一定的基础知识:1.掌握一定的linux操作命令 2.会java编程.因此hadoop必须安装在有jdk的linux ...

  6. NAND FLash基础概念介绍

    一.引脚介绍 引脚名称 引脚功能 CLE 命令锁存功能 ALE 地址锁存功能 /CE 芯片使能 /RE 读使能 /WE 写使能 /WP 写保护 R/B 就绪/忙输出信号 Vcc 电源 Vss 地 N. ...

  7. Hadoop基础概念

    Apache Hadoop有2个核心的组件,他们分别是: HDFS: HDFS是一个分布式文件系统集群,它可以将大的文件分裂成块并将他们冗余地分布在多个节点上,HDFS是运行在用户空间的文件系统 Ma ...

  8. Hadoop 新生报道(三) hadoop基础概念

    一.NameNode,SeconderyNamenode,DataNode NameNode,DataNode,SeconderyNamenode都是进程,运行在节点上. 1.NameNode:had ...

  9. Hadoop 基础概念

    Hadoop就是一个实现了Google云计算系统的开源系统,包括并行计算模型Map/Reduce,分布式文件系统HDFS,以及分布式数据库Hbase,同时Hadoop的相关项目也很丰富,包括ZooKe ...

随机推荐

  1. self

    self在对象方法中使用,指代调用当前对象方法的对象.可以利用self->属性名称的方法访问成员变量 self在类方法中使用,其指代的是当前类. 使用总结: self 谁调用当前方法,self就 ...

  2. html系列教程--标题,水平线,注释以及段落

    HTML标题 标题,用来显示文章重要性的文字,包含了文章的主旨,类似于作文题目. 标题(Heading)是通过 <h1> - <h6> 等标签进行定义的,由大到小一次排列,h1 ...

  3. MS SQLSERVER通用存储过程分页

    最近在面试的时候,遇到个奇葩的秃顶老头面试官. 问:写过存储过程分页吗? 答:没写过,但是我知道分页存储的原理,我自己也写过,只是在工作中没写过. 问:那你这么多年工作中就没写过吗? 答:的确没写过, ...

  4. oracle丢失temp表空间处理

    之前有做临时表空间的切换,切换后没drop tablespace就删除了temp01.dbf结果排序跟查dba_temp_files报错 SQL Mbytes from dba_temp_files; ...

  5. [Script]EBS里查看模块的版本、文件的版本信息【Z】

    系统版本信息 装了哪些模块,以及版本信息 select 'Current Application Release: '||ver||' ('||bug||')' "Description&q ...

  6. Java核心技术卷1Chapter7笔记 图形程序设计

    Swing是指被绘制的用户界面类,AWT是指像事件处理这样的窗口工具箱的底层机制. SWT,JavaFX是可能的代替技术. 创建框架 在Java中,顶层窗口(就是没有包含在其他窗口中的窗口)被称为框架 ...

  7. ASP.Net连接WebServer使用Https协议(证书)

    ASP.Net使用Https(证书)协议连接WebService 最近使用ASP.Net连接WebService,不过走的协议是Https的,我一般用的使用都是普通的http协议.所以刚开始有点不值从 ...

  8. (转)详解汇编系统调用过程(以printf为例)

    本文以printf为例,详细解析一个简单的printf调用里头,系统究竟做了什么,各寄存器究竟如何变化. 环境: linux + gnu as assembler + ld linker 如何在汇编调 ...

  9. zxing源码分析——QR码部分

    Android应用横竖屏切换 zxing源码分析——DataMatrix码部分 zxing源码分析——QR码部分 2013-07-10 17:16:03|  分类: 默认分类 |  标签: |字号大中 ...

  10. Docker容器的数据管理

    Docker容器的数据管理 Docker容器的数据管理 什么是数据卷(Data Volume)? 数据卷是经过特殊设计的目录,可以绕过联合文件系统(UFS),为一个或者多个容器提供访问 数据卷设计的目 ...