标签:逻辑 MapReudce -- MapReduce 处理 初探 Input 数据 分布式
1、功能
MapReudce的发展
- Hadoop1:分布式并行计算框架,
类似于YARN+Mapreduce
- Hadoop2:分布式编程模型
分布式计算由YARN来实现
- MapReduce的 主要功能:实现分布式程序的开发
提供了一套完整的分布式程序的API框架
- 大数据存储:必须将一个大的文件,拆分成多个小的块,交个多台机器并行存储,提供并行的读写
- 大数据计算:必须将一个大的任务,拆分成多个小的任务,交个多台机器并行运行,提供并行的计算
怎么提高性能效率的?
用多台机器一起处理来代替一台机器处理
问题:大数据就是开发一些数据处理的程序来实现对数据的计算,程序必须为可以分布式在多台机器上并行运行计算的程序,怎么实现?
- 自己开发实现:多线程并发运行
- 复杂度和成本非常高
- 利用封装好的分布式的API来开发
- 将需求的逻辑代码填空填到这个框架,这个框架会自动帮你实现分布式
- 只要给定数据处理的逻辑
举例:1加到9
- 只要给定逻辑:1,2,3,4,5,6,7,8,9,每个数字相加
- 要
处理的数据
是什么? - 要
实现的逻辑
是什么? - 要
结果保存的地方
在哪里?
- 要
- MapReduce:自动将这个逻辑进行拆分和计算【YARN】以及合并的逻辑
- task1:1+2+3 = 6
- task2:4+5+6 = 15
- task3: 7+8+9 = 24
- task4 : 6+15+24 = 45
2、设计模型
- 设计思想:
分而治之
的思想- 1+2+3+4+5+6+7+8+9
- 分:将大的任务逻辑,拆分成多个小的任务逻辑
- 1+2+3
- 4+5+6
- 7+8+9
- 合:将每个小任务的结果再根据对应的任务逻辑进行何必并
- 6+15+24 = 45
3、阶段
常规的划分:两个阶段
- Map:
分
- Input + Map + 一半的shuffle
- Reduce:
合
- 另一半shuffle+Reduce+Output
详细划分:五大阶段
Input:
负责整个程序的输入,我们要处理的数据在什么地方
- MapReduce程序默认就会读取HDFS上的文件,作为程序的输入
- MapReduce的API中:InputFormat
- 这个类默认使用的TextInputFormat:默认从HDFS上读取数据
- 其他举例:DBInputFormat:可以从数据库中读取数据
Map:
分,将任务在逻辑上划分多个小的任务,每个小的任务会对应一个MapTask
- 负责处理Input传递过来的数据
- 每个MapTask处理一部分数据
- 假设:
- Input:256M数据
- Map:2个MapTask,每个MapTask处理128M数据
- 处理的逻辑:由开发者自定义,
重写一个map方法
public void map(Input阶段的数据){
//这个方法中定义你的对Input阶段传进来的数据怎么进行处理
}
每个MapTask会对自己的每一条数据调用这个方法来处理
Shuffle:
MapReduce自带的一个功能
可以干预但是不能避免
- 会自动对Map输出的数据进行处理
- 处理的逻辑:
分组、排序
- 处理逻辑类似于SQL,当初设计的时候就是参考SQL逻辑的
select 1 from 2 where 3 group by 4 having 5 order by 6 limit 7
Reduce:
合,将shuffle处理的结果,进行聚合,默认会启动一个ReduceTask将上一步所有的数据再次进行处理
- 合并逻辑:由开发者自定义
- 提供了一个方法:
重写reduce方法
public void reduce(SHuffle的输出){
//定义聚合的逻辑
}
Output:
负责整个程序的输出,将处理以后得到的结果进行保存
- MapReduce程序默认会将结果写入HDFS,保存为文件
- MapReduce的API中:OutputFormat
- 这个类默认使用TextOutputFormat:默认将结果写入HDFS
- 其他举例:DBOutputFormat:可以将结果写入数据库
三个过程
- 输入:Input:处理的数据是什么
- 处理:数据怎么处理
- Map:拆分:处理的逻辑由用户自定义,重写map方法
- Shuffle:处理逻辑:分组和排序
- Reduce:合并:处理的逻辑由用户自定义,重写reduce方法
- 输出:Output:结果保存在什么地方
标签:逻辑,MapReudce,--,MapReduce,处理,初探,Input,数据,分布式 来源: https://blog.csdn.net/qq_46893497/article/details/110421721
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。