暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

分布式计算框架MapReduce

代码论道 2018-07-17
251

1.MapReduce概述

  • 源自于Google的MapReduce论文,论文发表于2004年12月

  • Hadoop MapReduce是Google MapReduce的克隆版

  • MapReduce优点:海量数据离线处理&易开发&易运行

  • MapReduce缺点:无法实时流式计算

2.MapReduce编程模型

案例:TopN问题

     词频统计wordcount

      cat.txt内容如下:

      hadoop  welcome

      hadoop  hdfs mapreduce

      hadoop hdfs

     需求:统计每个单词出现的次数

MapReduce编程模型之Map阶段和Reduce阶段

  • 将作业拆分成Map阶段和Reduce阶段

  • Map阶段:Map Tasks

  • Reduce阶段:Reduce Tasks

MapReduce编程模型之执行步骤

1,通过InputFormat讲文件读入并拆分成split

2,通过RecordReaders将split中的数据读入,并交给map处理。

3,map处理后的结果按照partitioner进行分区,然后将数据发送到对应的reduce上处理

4,reduce处理完成后,由outputFomat将结果写到文件系统

核心概念

  • Split:交由MapReduce作业来处理的数据块,是MapReduce中最小的计算单元。

  • InputFormat:将输入数据进行分片(split):InputSplit[] getSplits(JobConf job)

  • TextInputFormat:处理文本格式数据

  • OutputFormat:输出

  • Combiner

  • Partitioner

3.MapReduce架构

   MapReduce架构之MapReduce1.x

  • JobTracker:JT

            作业的管理者,将作业分解成一堆任务:Task(MapTask和ReduceTask),将任务分派给TaskTracker运行

             作业的监控、容错处理(task作业挂了,重启task的机制)

              在一定的时间间隔内,JT没有收到TT的心跳信息,TT可能挂了,TT上运行的任务会被指派到其它TT上去执行

  • TaskTracker:TT

     任务的执行者  干活的

     在TT上执行我们的Task(MapTask和ReduceTask)

  • MapTask

            自己开发的map任务交给Task

            解析每条记录的数据,交个自己的map方法处理

           将map的输出结果写到本地磁盘(有些作业仅有map没有reduce====>HDFS)

  • ReduceTask

        将MapTask输出的数据进行读取

       按照数据进行分组传给我们自己编写的reduce方法处理

       输出结果到HDFS

MapReduce架构之MapReduce2.x

4.MapReduce


编程

实战: 使用Java编程wordcount

  使用idea+maven开发wc:

       1,开发

       2,编译

       3,上传到服务器

      开发:

   1,创建JAVA项目

mvn clean package  -DskipTests

将jar包上传到linux服务器

启动hadoop

提交作业:

hadoop jar xx.jar 主类 输入路径 输出路径

hadoop jar  xx.jar hdfs://hadoop000:8020/hello.txt   hdfs://hadoop000:8020/output.wc/

查看结果

bug:

MapReduce编程之Combiner

  • 本地的reducer

  • 减少Map Tasks输出的数据量及数据网络传输量

  • Combiner案例开发


改造wordcount案例

使用场景

求和、统计次数

但是求平均值不可以

MapReduce编程之Partitioner

  • Partitioner决定MapTask输出的数据交由哪个ReduceTask处理

  • 默认实现:key的hash值对ReduceTask个数取模

partitioner.txt内容如下

xiaomi 200

huawei 300

xiaomi 100

huawei 200

iphone8 300

iphne8 500

nokia 20

需求:相同类型的手机放到一个reduce处理并输出。


文章转载自代码论道,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论