📜  MapReduce-算法

📅  最后修改于: 2020-11-30 05:28:33             🧑  作者: Mango


MapReduce算法包含两个重要任务,即Map和Reduce。

  • 映射任务是通过Mapper类完成的
  • reduce任务是通过Reducer类完成的。

Mapper类接收输入,对其进行标记,映射和排序。 Mapper类的输出用作Reducer类的输入,该类依次搜索匹配对并精简它们。

映射器减速器类

MapReduce实现了各种数学算法,可以将任务分成小部分,然后将它们分配给多个系统。用技术术语来说,MapReduce算法有助于将Map&Reduce任务发送到群集中的适当服务器。

这些数学算法可能包括以下内容-

  • 排序
  • 正在搜寻
  • 索引编制
  • 特遣部队

排序

排序是处理和分析数据的基本MapReduce算法之一。 MapReduce实现了排序算法,可以根据映射器的键自动对映射器的输出键值对进行排序。

  • 排序方法在mapper类本身中实现。

  • 在Shuffle和Sort阶段中,在标记了映射器类中的值之后, Context类(用户定义的类)将匹配的有值键作为集合进行收集。

  • 为了收集相似的键值对(中间键),Mapper类利用RawComparator类对键值对进行排序。

  • Hadoop将自动对给定Reducer的一组中间键值对进行排序,以形成键值(K2,{V2,V2,…}),然后再将其提供给Reducer。

正在搜寻

搜索在MapReduce算法中起着重要作用。它在组合器阶段(可选)和减速器阶段有帮助。让我们尝试借助示例来了解搜索的工作方式。

以下示例显示MapReduce如何使用Searching算法查找给定员工数据集中薪水最高的员工的详细信息。

  • 让我们假设我们在四个不同的文件A,B,C和D中拥有员工数据。我们还假设在四个文件中都有重复的员工记录,因为重复从所有数据库表中导入了员工数据。请参见下图。

地图减少插图

  • Map阶段处理每个输入文件,并以键值对()提供员工数据。请参见下图。

地图减少插图

  • 组合器阶段(搜索技术)将接受来自Map阶段的输入,作为具有员工姓名和工资的键值对。使用搜索技术,合并器将检查所有员工薪水以在每个文件中找到薪水最高的员工。请参阅以下代码段。


Max= the salary of an first employee. Treated as max salary

if(v(second employee).salary > Max){
   Max = v(salary);
}

else{
   Continue checking;
}

预期结果如下-

  • 减速器阶段-形成每个文件,您将找到薪水最高的员工。为避免冗余,请检查所有对,并消除重复的条目(如果有)。在来自四个输入文件的四个对之间使用相同的算法。最终输出应如下-


索引编制

通常,索引用于指向特定数据及其地址。它对特定Mapper的输入文件执行批索引。

MapReduce中通常使用的索引技术称为反向索引。像Google和Bing这样的搜索引擎使用倒排索引技术。让我们尝试通过一个简单的示例来理解索引的工作方式。

以下文本是反向索引的输入。这里T [0],T [1]和t [2]是文件名,其内容用双引号引起来。

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

应用索引算法后,我们得到以下输出-

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

此处的“ a”:{2}表示术语“ a”出现在T [2]文件中。类似地,“是”:{0、1、2}表示术语“是”出现在文件T [0],T [1]和T [2]中。

特遣部队

TF-IDF是一种文本处理算法,是术语频率-反向文档频率的缩写。它是常见的网络分析算法之一。在此,术语“频率”是指术语在文档中出现的次数。

词频(TF)

它测量特定术语在文档中出现的频率。它是根据单词在文档中出现的次数除以该文档中单词的总数而得出的。

TF(the) = (Number of times term the ‘the’ appears in a document) / (Total number of terms in the document)

反文档频率(IDF)

它衡量一个术语的重要性。它由文本数据库中的文档数除以出现特定术语的文档数来计算。

在计算TF时,所有术语都被视为同等重要。这意味着,TF为“ is”,“ a”,“ what”等普通单词计算术语频率。因此,我们需要通过计算以下内容,在扩展稀有术语的同时了解频繁术语-

IDF(the) = log_e(Total number of documents / Number of documents with term ‘the’ in it).

下面借助一个小示例对算法进行说明。

考虑一个包含1000个单词的文档,其中单词hive出现了50次。蜂巢的TF为(50/1000)= 0.05。

现在,假设我们有1000万个文档,并且蜂巢一词出现在其中的1000个中。然后,将IDF计算为log(10,000,000 / 1,000)= 4。

TF-IDF重量是这些量的乘积-0.05×4 = 0.20。