hadoop-MapReduce

分布式计算模型MapReduce

|-----------------------------------------------------------------------------------------------------------------------------------|
| 1. 理解MapReduce设计思想 2. 理解MapReduce分布式计算的基本原理 3. 掌握使用Java进行MapReduce编程 4. 掌握在Hadoop集群中提交MapReduce任务 |

1. MapReduce设计思想

|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| 1.1 什么是MapReduce 1 )MapReduce是一个分布式计算框架 它将大型数据操作作业分解为可以跨服务器集群并行执行的单个任务。 起源于Google 2 )适用于大规模数据处理场景 每个节点处理存储在该节点的数据 3 )每个job包含Map(分类kv)和Reduce(计算)两部分 |
| 1.2 MapReduce 的设计思想 1 )分而治之:简化并行计算的编程模型 2 )构建抽象模型:Map和Reduce 开发人员专注于实现Mapper和Reducer函数 3 )隐藏系统层细节:开发人员专注于业务逻辑实现 |
| 1.3 MapReduce 特点 1 )优点:易于编程;可扩展性;高容错性;高吞吐量 2 )不适用领域:难以实时计算;不适合流式计算;不适合DGA(有向图)计算 |
| 1.4 MapReduce 编程规范 1 )MapReduce框架处理的数据格式是<K,V>键值对形式 Mapper Map 端接收<K,V>键值对数据,经过处理输出新的<K,V>键值对 Map 端处理逻辑写在Mapper类中map()方法中 2 )Reducer Reduce 端搜集多个Mapper端输出的<K,V>数据,进行汇总 Reducer 的业务逻辑写在reduce()方法中 每一组相同k的<k,Iterator<v>>组调用一次reduce()方法 |

2. 使用Java进行MapReduce编程

|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| 3.1 WordCount 功能实现 (1)物料准备:wordcount (2)WordCountMapper (3)WordCountReduce (4)WordCountDriver 执行后输出: |

3. Hadoop集群中提交MapReduce任务

|------------------------------------------------------------------------------------------------------------------------------|
| Idea 打包工程成jar包,执行命令 |

4. MapReduce分布式计算的基本原理

|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| 4.1 Hadoop 序列化 什么是序列化:序列化就是把内存中的对象,转换成字节序列(或其他数据传输协议)以便于存储到磁盘(持久化)和网络传输。 反序列化就是将收到字节序列(或其他数据传输协议)或者是磁盘的持久化数据,转换成内存中的对象。 (1)必须可序列化(serializable) 作用:网络传输以及持久化存储 IntWritable 、LongWriteable、FloatWritable、Text、DoubleWritable, BooleanWritable、NullWritable等 (2)都继承了Writable接口 并实现write()和readFields()方法 (3)Keys必须实现WritableComparable接口 MapReduce 框架会按照Key进行排序 Reduce 阶段需要sort keys 需要可比较 |
| 4.2 MapReduce 框架原理 MapReduce 执行流程: (1)split阶段:计算分片 (2)map阶段:调用map()方法对数据进行处理 (3)shffule阶段:主要负责将map端生成的数据传递给reduce端 (4)reduce阶段:对Shffule阶段传来的数据进行最后的整理合并 |
| 4.3 MapTask |
| 4.4 ReduceTask |
| 4.5 InputFormat 数据输入 接口 |
| 4.6 InputSplit (输入分片) |
| 4.7 Shuffle 阶段 数据从Map输出到Reduce输入的过程 |
| 4.8 Combiner (1)Combiner相当于本地化的Reduce操作 在shuffle之前进行本地聚合 用于性能优化,可选项 输入和输出类型一致 (2)Reducer可以被用作Combiner的条件 符合交换律和结合律 (3)实现Combiner job.setCombinerClass(WCReducer.class) |
| 4.9 Partitioner (1)用于在Map端对key进行分区 默认使用的是HashPartitioner 获取key的哈希值 使用key的哈希值对Reduce任务数求模 决定每条记录应该送到哪个Reducer处理 (2)自定义Partitioner 继承抽象类Partitioner,重写getPartition方法 job.setPartitionerClass(MyPartitioner.class) |

5. MapReduce实现 SQL Join操作

|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| 4.1 map 端join 1 )使用场景 Map Join 适用于一张表十分小、一张表很大的场景。 2 )优点 思考:在Reduce端处理过多的表,非常容易产生数据倾斜。怎么办? 在Map端缓存多张表,提前处理业务逻辑,这样增加Map端业务,减少Reduce端数据的压力,尽可能的减少数据倾斜。 3 )具体办法:采用DistributedCache (1)在Mapper的setup阶段,将文件读取到缓存集合中。 (2)在Driver驱动类中加载缓存。 // 缓存普通文件到Task运行节点。 job.addCacheFile(new URI("file:///e:/cache/pd.txt")); // 如果是集群运行,需要设置HDFS路径 job.addCacheFile(new URI("hdfs://hadoop102:8020/cache/pd.txt")); |
| 4.2 reduce 端join Map 端的主要工作:为来自不同表或文件的key/value对,打标签以区别不同来源的记录。然后用连接字段作为key,其余部分和新加的标志作为value,最后进行输出。 Reduce 端的主要工作:在Reduce端以连接字段作为key的分组已经完成,我们只需要在每一个分组当中将那些来源于不同文件的记录(在Map阶段已经打标志)分开,最后进行合并就ok了。 |

相关推荐
TDengine (老段)4 小时前
TDengine 线程模型 — 网络、调度、执行
大数据·数据库·物联网·制造·时序数据库·tdengine·涛思数据
智购科技自动贩卖机6 小时前
自动售货机嵌入式状态机设计实战:从45个事件源到层次型状态机的工程重构
大数据·人工智能·stm32·物联网·重构·硬件架构
乐迪信息6 小时前
智慧港口船舶AI算法实现在线状态监测
大数据·人工智能·深度学习·算法·计算机视觉
Raas1006 小时前
MAI Gateway(魔芋企业级AI网关)对比分析:AI网关和API网关区别?企业级能力差距一览
大数据·人工智能·数据挖掘·mai gateway·企业级产品
Neighbor_OldY7 小时前
云上安全配置审计与误配置修复实战:从安全组、OSS、RAM到数据库的全栈排查复盘
大数据·运维·安全·云计算
工业甲酰苯胺8 小时前
AI低代码破局:制造业数智转型落地实战
大数据·人工智能·低代码·制造
大大大大晴天9 小时前
每天认识一个组件:流式存储Apache Fluss
大数据
熊野君9 小时前
第 4 章 技术产品经理核心能力模型
大数据·人工智能·产品经理
财复视界9 小时前
光智科技从“光学元件”到“稀散金属材料平台”的进化逻辑
大数据·人工智能·科技
牛企老板俱乐部10 小时前
2026年珠海精锐增材智造金属小批量交付可提供SGS与RoHS材质证明
大数据