MapReduce

MapReduce 原理与组成

一、MapReduce 组件及任务
  1. Mapper(映射器)

    • 任务:处理输入数据并生成键值对。每个输入记录被转换成一个或多个键值对。
    • 工作原理:Mapper 接收输入的分片(Input Split),通常是文件的一部分,然后根据业务逻辑将这些数据转换为键值对。
    • 例子:假设我们要统计文本中每个单词出现的次数,Mapper 可以将每一行文本分割成单词,并输出每个单词作为键,值设为1。
  2. Reducer(归约器)

    • 任务:汇总 Mapper 输出的数据,通常用于聚合操作。
    • 工作原理:Reducer 接收来自所有 Mapper 的中间键值对,其中相同键的所有值会被组合在一起,然后执行归约操作。
    • 例子:继续上面的例子,Reducer 收集所有相同单词的计数(值),并将它们加总起来得到最终的单词计数。
  3. Shuffle and Sort(洗牌和排序)

    • 任务:在 Mapper 和 Reducer 之间传输数据时进行重新分配(洗牌)和按键排序。
    • 工作原理:Hadoop 自动处理这一过程,确保具有相同键的所有值都被发送到同一个 Reducer 实例,并按照键的顺序进行排序。
  4. InputFormat(输入格式)

    • 任务:定义如何从输入源读取数据以及如何将其分割成 Input Splits。
    • 工作原理:例如 TextInputFormat 默认会将文本文件按行分割成多个部分。
  5. OutputFormat(输出格式)

    • 任务:指定如何写入输出数据到目标存储系统。
    • 工作原理:如 TextOutputFormat 将结果写回 HDFS 中的文本文件。
二、协同工作流程
  • 数据首先通过 InputFormat 被分解成若干个 Input Split,然后分配给不同的 Mapper 进行处理。
  • 每个 Mapper 处理完自己的输入后,其输出会被 Shuffle and Sort 阶段重新组织,以便相同的键能够被送到同一个 Reducer
  • 最后,Reducer 对接收到的数据进行处理,产生最终结果并通过 OutputFormat 写回到存储系统中。
三、优缺点分析
  • 优点
    • 容错性:MapReduce 自动处理节点故障,重新分配任务。
    • 扩展性强:可以轻松地添加更多机器来处理更大规模的数据集。
  • 缺点
    • 延迟高:不适合实时数据分析。
    • 编程模型复杂:对于某些类型的应用程序来说,编写有效的 MapReduce 程序可能比较困难。

造成这些优缺点的原因在于 MapReduce 设计初衷是为了处理大规模批处理任务,而非低延迟查询或交互式分析。

四、实际应用示例

假设我们需要计算日志文件中不同IP地址访问次数。使用 MapReduce,我们可以编写一个简单的程序,Mapper 解析每条日志记录提取出 IP 地址作为键,值设为1;Reducer 则负责累加相同 IP 地址对应的计数值。

五、常用命令和配置
  • 命令: hadoop jar 是运行 MapReduce 程序的主要命令。例如:

    hadoop jar my-mapreduce-app.jar com.example.MyApp input_path output_path

    使用场景:当需要执行自定义的 MapReduce 应用时。

  • 配置项:

    • mapreduce.job.reduces: 设置作业使用的 Reducer 数量,默认由框架决定。
    • mapreduce.map.memory.mb: 分配给 Mapper 的内存大小。
    • mapreduce.reduce.memory.mb: 分配给 Reducer 的内存大小。

你可能感兴趣的:(mapreduce,大数据)