`

Hadoop实战-中高级部分 之 Hadoop MapReduce工作原理

阅读更多

MapReduce 角色
•Client :作业提交发起者。
•JobTracker: 初始化作业,分配作业,与TaskTracker通信,协调整个作业。
•TaskTracker:保持JobTracker通信,在分配的数据片段上执行MapReduce任务。
提交作业
•在作业提交之前,需要对作业进行配置
•程序代码,主要是自己书写的MapReduce程序。
•输入输出路径
•其他配置,如输出压缩等。
•配置完成后,通过JobClinet来提交
作业的初始化
•客户端提交完成后,JobTracker会将作业加入队列,然后进行调度,默认的调度方法是FIFO调试方式。
任务的分配
•TaskTracker和JobTracker之间的通信与任务的分配是通过心跳机制完成的。
•TaskTracker会主动向JobTracker询问是否有作业要做,如果自己可以做,那么就会申请到作业任务,这个任务可以使Map也可能是Reduce任务。
任务的执行
•申请到任务后,TaskTracker会做如下事情:
  •拷贝代码到本地
  •拷贝任务的信息到本地
  •启动JVM运行任务
状态与任务的更新
•任务在运行过程中,首先会将自己的状态汇报给TaskTracker,然后由TaskTracker汇总告之JobTracker。
•任务进度是通过计数器来实现的。
 
作业的完成
•JobTracker是在接受到最后一个任务运行完成后,才会将任务标志为成功。
•此时会做删除中间结果等善后处理工作。
 
第二部分:错误处理
任务失败
•MapReduce在设计之出,就假象任务会失败,所以做了很多工作,来保证容错。
•一种情况:    子任务失败
•另一种情况:子任务的JVM突然退出
•任务的挂起
TaskTracker失败
•TaskTracker崩溃后会停止向Jobtracker发送心跳信息。
•Jobtracker会将该TaskTracker从等待的任务池中移除。并将该TaskTracker上的任务,移动到其他地方去重新运行。
•TaskTracker可以被JobTracker放入到黑名单,即使它没有失败。
 
JobTracker失败
•单点故障,Hadoop新的0.23版本解决了这个问题。
第三部分:作业调度
FIFO
         Hadoop 中默认的调度器,它先按照作业的优先级高低,再按照到达时间的先后选 择被执行的作业
公平调度器
      为任务分配资源的方法,其目的是随着时间的推移,让提交的作业获取等量的集群共享资源,让用户公平地共享集群。具体做法是:当集群上只有一个任务在运行时,它将使用整个集群,当有其他作业提交时,系统会将TaskTracker节点空间的时间片分配给这些新的作业,并保证每个任务都得到大概等量的CPU时间。
容量调度器
 
            支持多个队列,每个队列可配置一定的资源量,每个队列采用 FIFO 调度策略,为 了防止同一个用户的作业独占队列中的资源,该调度器会对同一用户提交 的作业所 占资源量进行限定。调度时,首先按以下策略选择一个合适队列:计算每个队列中 正在运行的任务数与其应该分得的计算资源之间的比值,选择一个该比值 最小的队 列;然后按以下策略选择该队列中一个作业:按照作业优先级和提交时间顺序选择 ,同时考虑用户资源量限制和内存限制。但是不可剥夺式
配置公平调度器
1.修改mapred-stie.xml 加入如下内容
<property>
      <name>mapred.jobtracker.taskScheduler</name>
      <value>org.apache.hadoop.mapred.FairScheduler</value>
       </property>
       <property>
      <name>mapred.fairscheduler.allocation.file</name>
      <value>/opt/hadoop/conf/allocations.xml</value>
       </property>
        <property>
     <name>mapred.fairscheduler.poolnameproperty</name>
      <value>pool.name</value>
       </property>
 
2 . 在 Hadoop conf 下创建
    allocations.xml
   内容为
     <?xml version="1.0"?>
        <alloctions>
        </alloctions>
样例:
 <pool name="sample_pool">
<minMaps>5</minMaps>
<minReduces>5</minReduces>
<weight>2.0</weight>
</pool>
<user name="sample_user">
<maxRunningJobs>6</maxRunningJobs>
</user>
<userMaxJobsDefault>3</userMaxJobsDefault>
3. 重启 JobTracker
4. 访问 http://jobTracker:50030/scheduler , 查看 FariScheduler  UI
5 . 提交任务测试
 
 
 
第四部分:Shuffle与排序
          Mapreduce 的 map 结束后,把数据重新组织,作为 reduce 阶段的输入,该过程称 之为 shuffle--- 洗牌。
          而数据在 Map 与 Reduce 端都会做排序。
Map
• Map 的输出是由collector控制的
• 我们从collect函数入手
Reduce
•reduce的Shuffle过程,分成三个阶段:复制Map输出、排序合并、reduce处理。
•主要代码在reduce的 run函数
 
Shuffle优化
•首先Hadoop的Shuffle在某些情况并不是最优的,例如,如果需要对2集合合并,那么其实排序操作时不需要的。
•我们可以通过调整参数来优化Shuffle
•Map端
•io.sort.mb
•Reduce端
•mapred.job.reduce.input.buffer.percent
 
第五部分:任务的执行时的一些特有的概念
推测式执行
•每一道作业的任务都有运行时间,而由于机器的异构性,可能会会造成某些任务会比所有任务的平均运行时间要慢很多。
•这时MapReduce会尝试在其他机器上重启慢的任务。为了是任务快速运行完成。
•该属性默认是启用的。
  
JVM重用
•启动JVM是一个比较耗时的工作,所以在MapReduce中有JVM重用的机制。
•条件是统一个作业的任务。
•可以通过mapred.job.reuse.jvm.num.tasks定义重用次数,如果属性是-1那么为无限制。
 
跳过坏记录
•数据的一些记录不符合规范,处理时抛出异常,MapReduce可以讲次记录标为坏记录。重启任务时会跳过该记录。
•默认情况下该属性是关闭的。
任务执行环境
•Hadoop为Map与Reduce任务提供运行环境。
•如:Map可以知道自己的处理的文件
•问题:多个任务可能会同时写一个文件
•解决办法:将输出写到任务的临时文件夹。目录为:{mapred.out. put.dir}/temp/${mapred.task.id}
 
 
 
部分:MapReduce的类型与格式
类型
•MapReduce的类型 使用键值对作为输入类型(key,value)
•输入输出的数据类型是通过输入输出的格式进行设定的。
输入格式
•输入分片与记录
•文件输入
•文本输入
•二进制输入
•多文件输入
•数据库格式的输入
输入分片与记录
•Hadoop通过InputSplit表示分片。
•一个分片并不是数据本身,而是对分片数据的引用。
•InputFormat接口负责生成分片

文件输入
•实现类:FileInputFormat
•通过文件作为输入源的基类。
•四个方法:
•addInputPath()
•addInputPaths()
•setInputPath()
•setInputPaths()
•FileInputFormat会按HDFS块的大小来分割文件
•避免分割
•继承FileInputFormat 重载isSplitable()
•return false

文本输入
•实现类:TextInputFormat
•TextInputFormat 是默认的输入格式。
•包括:
•KeyValueTextInputFormat
•NLineInputFormat
•XML
•输入分片与HDFS块之间的关系
•TextInputFormat的某一条记录可能跨块存在

二进制输入
•实现类:SequenceFileInputFormat
•处理二进制数据
•包括:
•SequenceFileAsTextInputFormat
•SequenceFileAsBinaryInputFormat

多文件输入
•实现类:MultipleInputs
•处理多种文件输入
•包括:
•addInputPath

数据库输入
•实现类:DBInputFormat
•注意使用,因为连接过多,数据库无法承受。
输出格式
•文本输出
•二进制输出
•多文件输出
•数据库格式的输出
文本输出
•实现类:TextOutputFormat
•默认的输出方式
• 以 "key \t value" 的方式输出
二进制输出
•基类: SequenceFileOutputFormat
•实现类: SequenceFileAsTextOutputFormat
              MapFileOutputFormat
              SequenceFileAsBinaryOutputFormat
 
多文件输出
•MutipleOutputFormat
•MutipleOutputs
•两者的不同在于MutipleOutputs可以产生不同类型的输出
数据库格式输出
• 实现类DBOutputFormat

 
  转载请注明出处【 http://sishuok.com/forum/blogPost/list/0/5965.html
4
2
分享到:
评论
2 楼 absolute007 2012-09-14  
yarn 的时代已经到来了,为什么还在1.0纠结呢?
1 楼 缘来是你 2012-09-14  
这么漂亮的妹妹 写程序天理何在!

相关推荐

    Hadoop实战手册

    这是一本hadoop实用手册,主要针对实际问题给出相应的解决方案。《hadoop实战手册》特色是以实践结合理论分析,手把手教...《hadoop实战手册》也可作为一本hadoop技术手册,针对要解决的相关问题,在工作中随时查阅。

    Hadoop-BAM-开源

    BAM的更高级描述,请参阅《生物信息学》第28卷第6期第876-877页中的文章“ Hadoop-BAM:直接在云中操作下一代测序数据”,该文章可从以下网站在线获得: /dx.doi.org/10.1093/bioinformatics/bts054请注意,Hadoop-...

    Hadoop MapReduce高级特性

    本文针对MapReduce中的包括计数器、排序和数据集连接进行讲解。计数器包括系统计数器和自定义计数器,排序包括部分排序和文件排序,还包括对键内数据的排序。

    Hadoop高级编程——构建与实现大数据解决方案

    本书解释了MapReduce的工作原理,并展示了如何在MapReduce中重新定制特定的业务问题。在整本书中,你将会发现深入的Java代码示例,这些代码示例可以直接使用,它们均源自于已经成功地构建和部署的应用程序。

    MapReduce设计模式

    MapReduce作为一种分布式海量数据处理的编程框架,已经得到业界的...《MapReduce设计模式》面向中高级MapReduce开发者,涵盖了绝大部分MapReduce编程可能面对的场景,相信初学者和专家同样可以在本书中得到一些启示。

    hadoop 1.2.1 api 最新chm 伪中文版

    支持即时查询,高级查询。方便编码学习。 大数据炙手可热!hadoop是一个大数据分布式系统基础架构,由Apache基金会开发。用户可以在不了解分布式底层细节的情况下,开发分布式程序。充分利用集群的威力高速运算和...

    Hadoop应用开发技术详解.part1.rar

    从开发者角度对Hadoop分布式文件系统、Hadoop文件I/O、Hive、HBase、Mahout,以及MapReduce的工作原理、编程方法和高级应用进行系统深入的讲解内容细致,包含大量用于实际生产环境中的案例,实战性强。 本资料共包含...

    mapreduce高级特性3

    结合案例讲解mr重要知识点1.1 多表连接1.2 mr各组件之间数据传递1.3 mr中压缩设置1.4 多个job之间有序执行1.5 自定义outputFormat

    elephant56:Hadoop MapReduce的遗传算法框架

    Elephant56是用于Hadoop MapReduce的遗传算法(GA)框架,旨在简化分布式GA的开发。 它提供了可以由开发人员重用的高级功能,而开发人员不再需要担心复杂的内部结构。 特征 顺序遗传算法 并行遗传算法 全局模型,也...

    The-Ultimate-Hands-On-Hadoop:AlvinToh终极动手Hadoop学习资料库-驯服大数据!

    在这门综合课程中,学习和掌握最受欢迎的大数据技术,该课程由来自Amazon和IMDb的前工程师和高级经理教授。 我们将超越Hadoop本身,深入研究您可能需要与之集成的各种分布式系统。 使用Hortonworks和Ambari UI在...

    2017最新大数据架构师精英课程

    本资源为大数据基础到中高级教学资源,适合稍微有点大数据或者java基础的人群学习,资源过大,上传乃是下载链接,不多说,上目录: 1_java基础2 l3 a2 a$ t7 J2 b+ `- p 2_java引入ide-eclipse 3_java基础知识-循环...

    mapreduce高级特性2

    mr各种应用场景的例子,1.1 内存排序1.2 mr数据类型1.3 自定义mr数据类型1.4 使用自定义数据实现内存排序1.5 二次排序1.6 使用自定义mr数据类型实现二次排序1.7 内存排序找出每一组中的最大值1.8 排序找出每一组中的...

    大数据学习笔记

    第一部分 Spark学习 6 第1章 Spark介绍 7 1.1 Spark简介与发展 7 1.2 Spark特点 7 1.3 Spark与Hadoop集成 7 1.4 Spark组件 8 第2章 Spark弹性分布数据集 9 2.1 弹性分布式数据集 9 2.2 MapReduce数据分享效率低 9 ...

    project-rhino:增强了针对Apache Hadoop生态系统的数据保护

    随着Hadoop扩展到新市场并看到新的用例面临安全性和合规性挑战,必须在所有Hadoop项目和HBase中处理敏感和受法律保护的数据的好处与对私有信息的保护相结合,以限制性能影响。 是我们的开源工作,旨在增强Hadoop生态...

    深入理解大数据:大数据处理与编程实践

     Intel Hadoop系统优化与功能增强■ MapReduce基础算法程序设计■ MapReduce高级程序设计技术■ MapReduce机器学习与数据挖掘基础算法■ 大数据处理算法与应用编程案例本书中算法设计章节的程序源码可在南京...

    大数据框架(HADOOP、HIVE、HBASE)优化和简历项目编写(视频+讲义+笔记)

    07_Hive中高级优化及数据倾斜处理(一) 08_Hive中高级优化及数据倾斜处理(二 09_Hive中groupBy数据倾斜面试详解及HBase 性能优化详解 10_大数据项目简历编写指导及HADOOP 项目业务需求补充说明

    大数据开发笔试.docx

    2、 mr的工作原理 答:当客户提交作业后,MapReduce库先把任务splits不同的块,然后根据"移动计算比移动数据更明智"的思想,把任务分发到各个DataNode上。在不同的DataNode上分别执行Map操作,产生键值对,然后通过...

    Spark工作原理

    最初在2009年由加州大学伯克利分校的AMPLab开发,并于2010年成为Apache的开源项目之一,与Hadoop和Storm等其他大数据和MapReduce技术相比,Spark有如下优势:1.运行速度快,Spark拥有DAG执行引擎,支持在内存中对数据...

    Spark 编程基础(Scala 版)-机房上机实验指南

    Spark简介:介绍Spark的起源、核心概念、架构以及与其他大数据处理框架(如Hadoop MapReduce)的比较。 Scala语言基础:由于Spark最初是使用Scala开发的,本书将详细介绍Scala的基础知识,包括语法、数据类型、控制...

Global site tag (gtag.js) - Google Analytics