Hadoop-Mapreduce

  • MapReduce是一个分布式运算程序的编程框架,是用户开发基于Hadoop的数据分析应用的核心框架
  • MapReduce的核心功能是将用户编写的业务逻辑代码和自带默认组建整合成一个完整的分布式运算程序,并发运行在一个Hadoop集群上

优点:
1.MapReduce易于编程:它简单的实现一些接口,就可以完成一个分布式程序,这个分布式程序可以分布到大量的廉价机器上运行
2.良好的扩展性:可以通过简单的增加机器来扩展计算能力
3.高容错性:某一台机器挂了,可以把该机器上的计算任务转移到另一个节点运行,不会导致这个任务运行失败
4.适合PB级以上海量数据的离线处理

缺点:
1.不擅长实时计算:无法像MySQL一样在毫秒或者秒级返回结果
2.不擅长流式计算:流式计算的输入数据是动态的,而MapReduce的输入数据集是静态的,不能动态变化
3.不擅长DAG(有向图)计算: 多个应用程序存在依赖关系,后一个应用程序的输入为前一个的输出,在这种情况下,每个MapReduce作业的输出结果都会写入到磁盘,会造成大量的磁盘IO,导致性能非常的低下

MapReduce核心编程思想:
1.MapReduce运算程序一般分为两个阶段,Map阶段和Reduce阶段
2.Map阶段的并发MapTask,完全并行运行,互补想干
3.Reduce阶段的并发ReduceTask,完全互不想干,但是他们的数据依赖于上一个阶段的所有Map Task并发实例的输出
4.MapReduce编程模型只能包含一个Map阶段和一个reduce阶段,如果用户的业务逻辑非常复杂,那就只能多个MapReduce程序串行运行

图解:


F172EE56-A845-4633-9F13-C175F989FA60.png

抛出问题:
1.Map Task如何工作?
2.Reduce Task如何工作?
3.Map Task如何控制分区、排序?
4.Map Task和Reduce Task之间如何衔接?

  • 常用数据序列化类型


    F304E1E1-8E65-4F28-B760-FE505B4BB580.png
  • MapReduce进程:
    一个完整的MapReduce程序在分布式运行时有三类实例进程:
    1>Mr AppMaster: 负责整个程序的过程调度及状态协调
    2>MapTask:负责Map阶段的整个数据处理流程
    3>ReduceTask:负责Reduce阶段的整个数据处理流程

  • MapReduce编程规范
    用户编写的程序分为3个部分:Mapper、Reducer和Driver

Mapper阶段

1.用户自定义的Mapper要继承自己飞父类
2.Mapper的输入数据是KV对的形式(KV的类型可自定义)
3.Mapper中的业务逻辑写在map()方法中
4.Mapper的输出数据是KV对的形式(KV的类型可自定义)
5.map()方法(MapTask进程)对每一个<K,V>调用一次

MapReduce编程规范

1.用户自定义的Reducer要继承自己的父类
2.Reducer的输入数据类型对应Mapper的输出数据类型,也是KV
3.reducer的业务逻辑写在reduce()方法中
4.Reduce Task进程对每一组相同k的<k,v>组调用一次reduce()方法

Driver阶段

相当于YARN集群的客户端,用于提交我们整个程序到YARN集群,提交的是封装了MapReduce程序相关运行参数的job对象

  • WorldCount案例实操
  • Hadoop序列化
    自定义bean对象实现序列化接口(Writable)
    在企业开发中往往常用的基本序列化类型不能满足所有需求,比如在Hadoop内部传递一个bean对象,那么该对象就需要实现序列化接口

具体实现bean对象序列化步骤:
1.必须实现Writable接口
2.反序列化时,需要反射调用空参构造函数,所以必须有空参构造

public FlowBean()
{
    super();
}

3.重写序列化方法

@Override
public void write (DataOutput out) throws IOException {
    out.writeLong(upFlow);
    out.writeLong(downFlow);
    out.writeLong(sumFlow);
}

4.重写反序列化方法

@Override
public function readFields(DataInput in) throws IOException{
    upFlow = in.readLong();
    downFlow = in.readLong();
    sumFlow = in.readLong();
}

5.注意反序列化的顺序和序列化的顺序完全一致

6.想要把结果显示在文件中,需要重写toString(),可用"\t"分开,方便后续用

7.如果需要将自定义的bean放在key中传输,则还需要实现Comparable接口,因为MapReduce框中的Shuffle过程要求对key必须能排序

@Override
public int compareTo(FlowBean o){
    //倒叙排序,从大到小
    return this.sumFlow > o.getSumFlow() ? -1 : 1;
}

MapReduce框架原理

  • InputFormat数据输入
    1.切片与MapTask并行度决定机制:
    问题引入:MapTask的并行度决定Map阶段的任务处理并发度,进而影响到整个Job处理速度
    思考:1G的数据启动8个MapTask,可以提高集群的并发处理能力,那么1K的数据也启动8个MapTask,会提高集群性能吗?
    2.MapTask并行度决定机制:
    数据块:Block时HDFS物理上吧数据分成一块块
    数据切片:数据切片只是在逻辑上对输入进行分片,并不会在磁盘上切分成片进行存储

数据切片与MapTask并行度决定机制:

1 MapTask并行度由数据切片决定,切成3片就开3个MapTask
2 多文件如何切片:每个文件单独切片

E51E2996-8480-453D-BCE1-70A548F14BDC.png

虚拟存储切片最大值设置:

ConbineTextInputFormat.setMaxInputSplitSize(job, 4194304); //4M
注意:虚拟存储切片最大值设置最好根据实际的小文件大小情况来设置具体的值

2C8BCAA1-CA7E-40B1-B6CF-7FFC4A61569D.png

FileInputFormat

4E26B0DB-4B0C-4930-B16D-E1FE42F87914.png
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 205,386评论 6 479
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,939评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,851评论 0 341
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,953评论 1 278
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,971评论 5 369
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,784评论 1 283
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,126评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,765评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,148评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,744评论 2 323
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,858评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,479评论 4 322
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,080评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,053评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,278评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,245评论 2 352
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,590评论 2 343

推荐阅读更多精彩内容