我正在阅读hadoopmapreduce教程,并得出以下浅显的理解。有人能帮我确认一下我的理解是否正确吗?
mapreduce是一种聚合数据的方法
在分布式环境中
在非常大的文件中使用非结构化数据
使用java、python等。
产生类似的结果,比如使用sql聚合函数在rdbms中可以做什么
select count, sum, max, min, avg, k2
from input_file
group by k2
map()方法基本上是将水平数据v1(输入文件中的一行)旋转到垂直行中,每行都有一个字符串键和一个数值。
分组将发生在数据流的洗牌和分区阶段。
reduce()方法将负责计算/聚合数据。
mapreduce作业可以组合/嵌套,就像sql语句可以嵌套一样,以生成复杂的聚合输出。
对吗?
在hadoop之上的hive中,mr代码将由hiveql进程引擎生成。因此,从编码的Angular 来看,使用java的mr编码将逐渐被高级hiveql所取代。是真的吗?
1条答案
按热度按时间unftdfkk1#
看看这篇文章,比较一下rdbms和hadoop
1.与rdbms不同,hadoop可以处理数PB的数据,这些数据通过商用硬件分布在数千个节点上。在数据处理过程中,Map约简算法的效率取决于数据的局部性。
2.rdbms只能处理结构化数据,不像hadoop可以处理结构化、非结构化和半结构化数据。
您对聚合、分组和分区的理解是正确的。
您提供的示例仅用于处理结构化数据。
hiveql正在转换为一系列map reduce作业。在性能方面,hiveql作业将比原始map reduce作业慢。hiveql不能像上面解释的那样处理所有类型的数据,因此它不能用java代码代替map reduce作业。
hiveql将与其他语言的map reduce作业共存。如果您希望将性能作为map reduce作业的关键标准,则必须考虑将javamap reduce作业作为备选方案。如果您正在为半结构化和非结构化数据寻找map reduce作业,则必须考虑hive ql map reduce作业的替代方案。