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了。 |

相关推荐
拓端研究室TRL1 小时前
【梯度提升专题】XGBoost、Adaboost、CatBoost预测合集:抗乳腺癌药物优化、信贷风控、比特币应用|附数据代码...
大数据
黄焖鸡能干四碗1 小时前
信息化运维方案,实施方案,开发方案,信息中心安全运维资料(软件资料word)
大数据·人工智能·软件需求·设计规范·规格说明书
编码小袁1 小时前
探索数据科学与大数据技术专业本科生的广阔就业前景
大数据
WeeJot嵌入式2 小时前
大数据治理:确保数据的可持续性和价值
大数据
zmd-zk3 小时前
kafka+zookeeper的搭建
大数据·分布式·zookeeper·中间件·kafka
激流丶3 小时前
【Kafka 实战】如何解决Kafka Topic数量过多带来的性能问题?
java·大数据·kafka·topic
测试界的酸菜鱼3 小时前
Python 大数据展示屏实例
大数据·开发语言·python
时差9533 小时前
【面试题】Hive 查询:如何查找用户连续三天登录的记录
大数据·数据库·hive·sql·面试·database
Mephisto.java3 小时前
【大数据学习 | kafka高级部分】kafka中的选举机制
大数据·学习·kafka
苍老流年3 小时前
Hive中各种Join的实现
数据仓库·hive·hadoop