《Hadoop权威指南4》第2章 关于MapReduce

第2章 关于MapReduce

2.1 气象数据集

  • 文本数据
  • 一行代表一条记录,包括了各方面的天气信息,地点,日期,温度,等等
  • 很多小文本

2.2 使用Unix工具来分析数据

  • 可以使用按行处理数据工具 awk 写shell脚步

2.3 使用Hadoop来分析数据

2.3.1 map和reduce

  • MapReduce任务过程分为两个处理阶段:map阶段和reduce阶段,每个阶段都以健-值对作为输入输出,健-值对的类型由程序员来确定
  • map阶段的输入key-value为:
    1. key:是文件中的行偏移量,map函数一般不用这个数据
    2. value:是文件中的一行文本信息
  • map输出为:
    1. key:年份
    2. value:气温
  • map的输出由MapReduce框架处理后,发送给reduce函数key-value为:
    1. key:年份
    2. value:该年份的一系列温度数据,如下图所示
      在这里插入图片描述
    • 整个数据流如下图
      在这里插入图片描述

2.3.2 Java MapReduce

  • java代码实现需要3样:一个map函数,一个reduce函数和一些用来运行作业的代码
  • map函数,由Mapper类来表示,声明一个抽象的map()方法
    在这里插入图片描述
  • reduce函数,由Reduce类来表示,声明一个抽象的reduce()方法
    在这里插入图片描述
  • 还需要实现一个main函数,负责运行MapReduce作业,进行一系列作业运行的设置
    在这里插入图片描述
2.3.2.1 运行测试
  • 以独立本机的模式安装Hadoop,这种模式下在本地文件系统上运行作业程序
  • 安装编译打包程序,命令行运行程序指定输入数据和输出结果存放的目录名,输出数据目录应该不存在,由hadoop运行是创建
    在这里插入图片描述
  • 作业运行会在命令行打印一些信息,比如作业ID,map和reduce的任务id,还会统计任务的输入输出记录

2.4 横向扩展

2.4.1 数据流

  • MapReduce作业(job)是客户端需要执行的一个工作单元,包括:输入数据、MapReduce程序和配置信息。
  • 作业分成若干任务(task)来执行,包括2类任务:map任务和reduce任务,任务运行在集群的节点上,通过YARN进行调度。
  • MapReduce的输入数据被划分池等长的小数据块,称为 输入分片(input split),每个分片一个map任务。
  • 分片的合理大小为HDFS中一个 块(block) 的大小,可以更好地实现map任务的 数据本地化,map任务将其输出数据写入本地硬盘
  • reduce任务不具备数据本地化优势,单个reduce任务的输入通常来自于所有map任务的输出,一个reduce任务的完整数据流如下图:
    在这里插入图片描述
  • 若由多个reduce任务,每个map任务就会针对输出进行分区,为每一个reduce任务建一个分区。map任务和reduce任务之间的数据流称为 shuffle(混洗),多个reduce任务的数据流如下图:
    在这里插入图片描述

2.4.2 combiner 函数

  • 集群的可用带宽限制MapReduce作业的数量,所以尽量避免map和reduce任务之间的数据传输是有利的。
  • 可以通过针对map任务的输出指定一个combiner,来减少reduce函数的输入,同时不影响reduce输出结果。
  • combimer是通过Reducer类来实现的,需要在main方法中setcombiner,如下图:
    在这里插入图片描述

2.4.3 运行分布式的MapReduce作业

  • 独立模式下的Java MapReduce程序不用做修改就可以在完整数据集的分布式集群上运行,可以根据数据量的大小和硬件规模进行扩展

2.5 Hadoop Streaming

  • Hadoop Streaming使用Unix标准流作为Hadoop和应用程序之间的接口,所以我们可以用任何编程语言通过标准输入/输出来写MapReduce程序。比如python和ruby。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值