`

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-common-2.6.0-bin-master.zip

    Hadoop是大数据处理领域的一个关键框架,...通过正确安装、配置和使用这个压缩包中的组件,开发者可以在没有Linux环境的情况下,也能顺利地进行Hadoop相关的工作,这对于学习和理解Hadoop的分布式计算原理非常有帮助。

    hadoop3.3.0-winutils所有bin文件

    同时,它也展示了大数据生态系统中不同组件如何协同工作,如Hadoop的HDFS、YARN和MapReduce,以及Spark的计算引擎,所有这些都依赖于Java和Scala等编程语言来实现。正确理解和使用这些工具,将能有效地利用大数据的...

    Hadoop Real-World Solutions Cookbook 源代码

    通过这些章节的源代码,读者不仅可以了解Hadoop的基本工作原理,还能掌握在实际项目中如何运用这些技术解决问题。通过动手实践,可以加深对大数据处理流程的理解,提高解决实际问题的能力。同时,书中其他未列出的...

    spark-3.2.4-bin-hadoop3.2-scala2.13 安装包

    2. **Hadoop**: Hadoop是大数据处理的基础框架,包括HDFS(Hadoop Distributed File System)和MapReduce计算模型。Spark与Hadoop的集成意味着它可以读取、写入HDFS中的数据,并且可以利用YARN(Hadoop的资源调度器...

    Hadoop-0.20.0-HDFS+MapReduce+Hive+HBase十分钟快速入门

    6. **Hive**:提供了一个数据仓库工具,允许用户通过类似SQL的HiveQL语言对存储在Hadoop中的大量数据进行查询和汇总,简化了数据分析过程。 7. **MapReduce**:实现了分布式数据处理的编程模型,允许开发者编写处理...

    高级软件人才培训专家-Hadoop课程资料-3-第三章 - MapReduce & YARN入门

    ### 高级软件人才培训专家-Hadoop课程资料-3-第三章 - MapReduce & YARN入门 #### 知识点一:分布式计算概述 - **定义**:分布式计算是一种计算模型,它通过网络将任务分配到多台计算机上并行处理,以提高计算效率...

    《实战Hadoop--开启通向云计算的捷径》源码

    《实战Hadoop--开启通向云计算的捷径》这本书是学习Hadoop的宝贵资源,其源码更是理论与实践结合的桥梁,能帮助读者深入理解Hadoop的工作原理和应用。 Hadoop的核心由两个主要组件构成:Hadoop Distributed File ...

    hadoop-eclipse插件各版本合集

    Hadoop-Eclipse插件是Apache Hadoop项目与Eclipse IDE集成的一个重要工具,它使得Hadoop开发者能够在Eclipse环境中直接创建、编辑、调试和管理Hadoop MapReduce作业,极大地提升了开发效率。本合集包含了多个版本的...

    hadoop-2.6.0-cdh5.7.0版本.zip

    8. **数据处理流程**: 在Hadoop中,数据通常会经过ETL(提取、转换、加载)过程,然后使用MapReduce进行批处理,再通过Hive或Pig进行查询分析,最后可能通过HBase进行实时访问。 总结来说,"hadoop-2.6.0-cdh5.7.0...

    hadoop-2.7.1.tar.gz.zip

    Hadoop是一个开源的分布式计算框架,由Apache基金会开发,它主要设计用于处理和存储大量数据。...无论是开发者还是数据分析师,都需要深入理解Hadoop的工作原理和应用方法,以便在实际项目中发挥其最大价值。

    Hadoop Real-world Solutions Cookbook(英文版)

    接着,书中详细探讨了MapReduce的工作原理,包括Mapper和Reducer阶段,以及它们在处理数据时的角色。Mapper阶段负责接收输入数据,进行必要的转换,并生成中间键值对。Reducer阶段则负责聚合Mapper阶段产生的中间...

    hadoop.dll-and-winutils.exe-for-hadoop2.9.0-on-windows_X64

    这使得你可以在Windows环境中进行大数据处理,进行MapReduce任务或者其他基于Hadoop生态的开发工作。不过需要注意的是,虽然Hadoop在Windows上的支持已经相当完善,但在生产环境中,通常还是推荐在Linux系统上部署...

    hadoop-3.1.0.rar windows 环境依赖

    4. **Hadoop的Java API**:对于开发者来说,Hadoop 3.1.0提供了更新的Java API,使得开发和集成更容易,同时支持更多高级功能。 5. **跨版本兼容性**:Hadoop 3.1.0致力于提高与其他版本的兼容性,使得升级和回滚...

    hadoop 2.6.0 安装包

    - **YARN(Yet Another Resource Negotiator)**:资源管理器,取代了旧版Hadoop中的JobTracker,负责集群资源的管理和调度,提高了系统的可扩展性和资源利用率。 - **HDFS HA(High Availability)**:通过...

    hadoop-eclipse-plugin

    Hadoop Eclipse Plugin是Apache Hadoop项目的一个重要组成部分,它为Eclipse IDE提供了集成开发环境的支持,使得Java开发者能够在Eclipse中直接对Hadoop项目进行创建、编辑和调试。这个压缩包包含了两个版本的Hadoop...

    linux下编译过的hadoop jar包--hadoop-2.7.2.zip

    Hadoop由两个主要部分组成:Hadoop Distributed File System (HDFS) 和 MapReduce。 二、Hadoop HDFS HDFS是一个分布式文件系统,它将大文件分割成多个块,并在集群中的多台机器上存储这些数据块的副本,增强了数据...

    Hadoop MapReduce实战手册(完整版)

    《Hadoop MapReduce实战手册》是一本专注于大数据处理技术的专著,主要针对Apache Hadoop中的MapReduce框架进行了深入的探讨。MapReduce是Hadoop生态系统中的核心组件之一,用于处理和生成大规模数据集。该书旨在...

    学习hadoop--java零基础学习hadoop手册

    2. **HDFS详解**:深入理解Hadoop分布式文件系统的工作原理。 3. **MapReduce框架**:学习MapReduce算法的工作流程和实现方法。 4. **Hadoop生态系统**:探索Hadoop生态系统中的其他重要组件,如Hive、Pig、Spark等...

    hadoop-2.0.0-cdh4.2.1的src

    通过学习和分析`hadoop-2.0.0-cdh4.2.1`的源码,开发者可以更好地理解Hadoop的工作原理,定制化开发,或者优化Hadoop集群的性能。同时,这对于解决生产环境中遇到的问题,以及进行大数据处理的算法设计都是非常有...

    hadoop中文实战

    Hive则允许用户使用SQL查询Hadoop中的数据,简化了数据分析工作;Pig提供了一种高级语言,使得数据处理脚本更为简洁;Spark则以其内存计算的优势,实现了比MapReduce更快的数据处理速度。 本书还会讨论数据安全和...

Global site tag (gtag.js) - Google Analytics