MapReduce

本文详细介绍了MapReduce的工作过程及其算法应用,包括输入阶段、映射阶段、中间键值处理、洗牌与排序、归约阶段和输出阶段。同时,阐述了排序、搜索、索引和TF-IDF等算法在MapReduce中的具体实现和作用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

MapReduce 的具体工作过程:

本文源自http://www.tutorialspoint.com/map_reduce/map_reduce_introduction.htm
http://www.tutorialspoint.com/map_reduce/map_reduce_algorithm.htm



  • Input Phase: 这里有一个 Record Reader,它会对输入文件的每一条记录做 key-value 转换,并将解析好的数据以键值对的方式传给mapper.
  • Map Phase: 这是用户自定义的函数,它的输入时一系列的键值对,然后对他们一一处理,产生0个或更多的键值对。
  • Intermediate Keys:mapper 函数产生的就是Intermediate Keys
  • Combiner: 这个不是必须的阶段,是 optional 的。用用户自动以的代码,把map 阶段产生的相同的数据放在同一个集合里。
  • Shuffle and Sort: Reduce 任务开始于这个阶段,它下载 grouped 的键值对到 Reducer 所在的 local machine,把键相同的值放在同一个数据列表里面,以方面后面的操作。
  • Reducer: 在每一个数据列表上执行Reduce操作。此处数据可以被合并,过滤等一系列操作。执行结束后再输出一系列键值对。
  • Output Phase: 格式化输出,将键值对写入到输出文件。

Algorithm

MapReduce 主要是用算术算法把一个任务分成多个小任务分配给不同的节点。
算法主要包括四中:Sorting、Searching、Indexing、TF-IDF

Sorting

Sorting 是 MapReduce 处理和分析数据最常用的算法之一:

  • Sorting 方法本身就包含在 mapper class 中.
  • 在 Shuffle and Sort 阶段, 在 mapper 中 tokenizing(符号化) the values 之后, 用户自定义的 Context 类会收集匹配的键值.
  • 为了收集相同的 key-value 对 (intermediate keys), Mapper 会用到 RawComparator 类的 sorting 功能对 key-value 对排序.
  • 一个给定的 Reducer, 它的intermediate key-value 集合是以key-values (K2, {V2, V2, …}) 的形式自动排序好的.

Searching

主要用在 Combiner 和 Reducer 阶段。

indexing

通常 Indexing 用于指明某个特定的数所在的位置,MapReduce 中常用的 indexing 技术是 inverted index (Bing 和Google 的搜索引擎也是用的这个技术)。
比如,有三个文件 T[0], T[1], T[2], 他们的内容分别如下所示:

T[0] = "it is what it is"
T[1] = "what is it"
T[2] = "it is a banana"

用Indexing 算法转化之后,可以得到

"a": {2}
"banana": {2}
"is": {0, 1, 2}
"it": {0, 1, 2}
"what": {0, 1}

即 “a”出现在T[2] 中,”what”出现在T[0] 和 T[1] 中。

TF-IDF

Term Frequency - Inverse Document Frequency 的缩写, 常用的网页分析算法。

Term Frequency (TF)

衡量一篇文章中特定的单词出现的频率,每个单词都被认为同等的重要:

TF(hadoop) = (单词‘hadoop’在文章中出现的次数) / (文章中的单词总数)

Inverse Document Frequency (IDF)

衡量某个单词的重要性,即它是都罕见。

IDF(hadoop) = log_e(文档的总数量 / 含有单词‘hadoop’的文档数)

我们需要知道高频词, 并且扩大罕见词的重要性。

如果一个文章含有单词1500个,其中Hadoop 60个
TF(hadoop) = 60/1500 = 0.04

假设一共有1000万篇文章,其中含有hadoop 的文章一共有1000个,那么:
IDF(hadoop) = log(10,000,000 / 1000) = 4

TF-IDF 权重就是 0.04*4 = 0.16

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值