大家好,欢迎来到IT知识分享网。
MapReduce是Google流行的一种并行编程技术。 它用于处理大量数据。 仅通过将工作并行分配给多台机器,就可以在合理的时间内完成这种处理。 每台机器都处理一小部分数据。
MapReduce是一种编程模型,使开发人员可以专注于编写处理数据的代码,而不必担心并行执行的细节。
MapReduce需要将要处理的数据建模为键值对。 开发人员编写了map函数和reduce函数的代码。
MapReduce运行时为每个键/值对调用map函数。 映射功能将键值对作为输入,并产生另一个键值对的输出。
MapReduce运行时通过键对映射函数的输出进行排序和分组。 然后,它调用将其传递给键的reduce函数以及与该键关联的值的列表。 为每个键调用reduce函数。 reduce函数的输出是键值对。 该值通常是聚合值或通过处理为输入键传递的值列表而计算出的值。 对于由map函数生成的每个中间键,调用reduce函数。 reduce函数的输出是必需的结果。
例如,假设您有大量的日志文件,其中包含某些事件(例如访问帐户)的审核日志。 您需要找出过去10年中每个帐户被访问了多少次。
假定日志文件中的每一行都是审核记录。 我们正在逐行处理日志文件,map和reduce函数如下所示:
-
map(key , value) {
-
// key = byte offset in log file
-
// value = a line in the log file
-
if ( value is an account access audit log) {
-
account
number = parse account from value -
output key = account
number, value = 1 -
}
-
}
-
-
reduce(key, list of values) {
-
// key = account number
-
// list of values {1,1,1,1…..}
-
for each value
-
count = count + value
-
output key , count
-
}
每个日志文件中的每一行都会调用map函数。 不相关的行将被忽略。 从相关行中解析出帐号,并输出一个值1。MapReduce运行时按帐号对输出进行排序和分组。 为每个帐户调用reduce函数。 reduce函数汇总每个帐户的值,这是必需的结果。
MapReduce作业通常在计算机集群上执行。 每台机器执行一个任务,该任务可以是映射任务,也可以是归约任务。 每个任务都在处理数据的子集。 在上面的示例中,假设我们从一组大型输入文件开始。 MapReduce运行时将输入数据分为称为分割或碎片的分区。 每个拆分或碎片均由计算机上的映射任务处理。 每个映射任务的输出均按键排序和分区。 来自所有映射的输出被合并以创建输入到reduce任务的分区。
可以有多台计算机,每台计算机都运行简化任务。 每个reduce任务都有一个要处理的分区。 该分区可以具有多个键。 但是每个键的所有数据都在1个分区中。 换句话说,每个键只能处理1个缩减任务。
机器数量,映射任务数量,reduce任务数量以及其他几项都是可配置的。
对于需要对大数据集进行某些处理的问题,MapReduce非常有用。 该算法可以分解为map和reduce函数。 MapReduce运行时负责将处理分配到多台计算机并汇总结果。
Apache Hadoop是mapreduce的开源Java实现。 请继续关注有关使用hadoop的有关mapreduce的未来博客/教程。
免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://yundeesoft.com/33172.html