[关闭]
@zqbinggong 2018-06-02T07:28:56.000000Z 字数 991 阅读 753

MapReduce

hadoop 《权威指南》

! All pictures are screenshots from the book 'Hadoop: The Definitive Guide, Fourth Edititon, by Tom White(O'Reilly).Copyright©2015TomWhite, 978-1-491-90163-2'


Map和Reduce

  1. 任务过程分为map和reduce两个阶段,每阶段都以键值对最为输入和输出,其类型由程序员来选择
  2. Java MapReduce

横向扩展

为了实现横向扩展,我们需要将数据存储在分布式文件系统中(如HDFS),通过YARN,hadoop,可以将MR计算转移到存储有部分数据的各台机器上

数据流

  1. 作业(job)
    • 是客户端执行的一个工作单元:包括输入数据、MR程序和配置信息
    • hadoop将作业分成若干个任务(map和reduce两类),任务运行在集群的节点 上,由YARN来进行调度;若一个任务失败,就会在另一个不同的节点上自动重新调度运行
  2. hadoop将MR的输入数据切分成输入分片(趋向于一个块的大小,默认128mb),并为每一个分片构建一个map任务
    • 数据本地化最优: 在存储有输入数据(HDFS中的数据)的节点上运行map任务,可以获得最佳性能,因为它无需使用宝贵的集群宽带资源
    • 此处输入图片的描述
    • 最佳分片的大小应该与块的大小相同,因为这样可以避免数据需要进行网络传输
  3. map任务将其输出写入到本地硬盘而不是HDFS,这是因为map的输出只是一个中间结果,一旦作业完成,就可以直接删除,因而不需要存储到HDFS
  4. reduce任务
    • 不具备数据本地化的优势,单个reduce任务的输入通常来自于所有mapper的输出
    • 输出通常存储在HDFS中以实现可靠存储
    • reduce任务的数量并非由输入数据的大小决定,而是独立指定的
      此处输入图片的描述此处输入图片的描述此处输入图片的描述

combiner函数

  1. 集群上的可用带宽限制了MR作业的数量,因此尽量避免map和reduce任务之间的数据传输是有利的
  2. combiner函数不能取代reduce函数,但是可以版主减少mapper和reducer之间数据传输量。
  3. combiner属于优化方案,其规则制约着可用的函数类型,例如计算平均值的函数。

hadoop steaming

hadoop streaming使用Unix标准流作为hadoop和应用程序之间的接口,因而我们可以使用任何编程语言通过标准输入/输出来写MR程序

添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注