Hadoop Distributed File System

MapReduce

MapReduce shuffle

按照 reducer 分区,排序和将数据分区从 mapper 复制到 reducer。(令人困惑的术语,并不完全与洗牌一样,在 MapReduce 中其实没有随机性)。

MapReduce 的分布式执行

Hadoop MapReduce 并行化基于数据分区实现:

  • 输入:通常是 HDFS 中的一个目录。
  • 分区:每个文件或文件块都被视为一个单独的分区。
  • 处理:每个分区由单独的 map 任务来处理。
  • 每个 mapper 都会尽量实现计算靠近数据
  • 代码复制:JAR 文件。
  • Reduce 任务的计算也被分隔成块,可以不必与 mapper 任务数量相同,MapReduce 框架使用关键字的哈希值来确保具有相同关键字的键值对都在相同的 reduce 任务中处理。
  • 键值对必须进行排序,排序是分阶段进行的:
    1. 每个 map 任务都基于关键字哈希值,按照 reducer 对输出进行分块。
    2. 每个分区都被写入 mapper 程序所在的本地磁盘上的已排序文件,参见 SSTablesLSM-Tree
  • reducer 与每个 mapper 相连接:MapReduce 调度器会在 mapper 写入经过排序的输出文件后,通知 reducer 开始从 mapper 中获取输出文件,框架进行 MapReduce shuffle
  • reducer 任务从 mapper 中获取文件并将它们合并在一起,同时保持数据的排序。不同 mapper 使用相同的关键字生成记录,会在合并后的 reducer 输入中位于相邻的位置。
  • reducer 可以使用任意逻辑来处理这些记录,并且生成任意数量的输出记录。记录被写入分布式文件系统中的文件。

MapReduce 工作流调度器

  • Oozie
  • Azkaban
  • Luigi
  • Airflow
  • Pinball

对比分布式数据库

MapReduce 中的并行处理和并行 join 算法已经在十多年前所谓的大规模并行处理(MPP)数据库中实现了。

存储多样性

分布式文件系统中的文件只是字节序列,可以使用任何数据模型和编码来编写。可以是数据库记录,也可以是文本、图像、视频、传感器读数、稀疏矩阵、特征向量、基因组序列或任何其他类型的数据。

MPP 数据库 通常需要对数据和查询模式进行仔细的提前建模。

Hadoop 经常被用于实现 ETL 过程:来自事务处理系统的数据以某种原始形式转储到分布式文件系统,然后编写 MapReduce 作业进行数据清理,将其转换为关系表单,并将其导入 MPP 数据仓库以进行分析。

处理模型多样性

  • MPP 数据库属于一体化、紧密集成的软件系统。
  • SQL、MapReduce、HBase(随机访问的 OLTP 数据库)Impala 等不同的组件。

针对频繁故障设计

YARN

Yarn参数优化(Fair Scheduler版本)