MapReduce Hadoop 实现
-
MapReduce Hadoop 实现
MapReduce 是一个框架,用于编写应用程序以可靠的方式处理大型商用硬件集群上的大量数据。本章将指导您使用Java在Hadoop框架中操作MapReduce。 -
MapReduce 算法
通常,MapReduce范例基于将map-reduce程序发送到实际数据所在的计算机。- 在 MapReduce 作业期间,Hadoop将Map和Reduce任务发送到集群中的相应服务器。
- 该框架管理数据传递的所有细节,例如发布任务,验证任务完成以及在节点之间的集群周围复制数据。
- 大多数计算是在本地磁盘上的数据在节点上进行的,从而减少了网络流量。
- 完成给定任务后,集群将收集并减少数据以形成适当的结果,然后将其发送回Hadoop服务器。
-
输入和输出(Java透视图)
MapReduce框架对<key,value>对操作,即,该框架将作业的输入视为一组<key,value>对,并生成一组<key,value>对作为作业的输出,可能是不同类型的。键和值类应由框架以串行方式进行,因此需要实现Writable接口。此外,关键类必须实现Writable-Comparable接口,以利于框架排序。MapReduce作业的输入和输出类型-(输入)<k1,v1>→Map→<k2,v2>→reduce→<k3,v3>(输出)。输入 输出 Map <k1, v1> list (<k2, v2>) Reduce <k2, list(v2)> list (<k3, v3>) 术语-
PayLoad−应用程序实现Map和Reduce函数,并构成工作的核心。 Mapper− 映射器将输入键/值对映射到一组中间键/值对。 NamedNode− 管理Hadoop分布式文件系统(HDFS)的节点。 DataNode− 在进行任何处理之前预先呈现数据的节点。 MasterNode− JobTracker运行所在的节点,它接受来自客户端的作业请求。 SlaveNode− 运行Map and Reduce程序的节点。 JobTracker− 计划作业,并将分配的作业跟踪到任务跟踪器。 Task Tracker−跟踪任务并将状态报告给JobTracker。 Job−
程序是跨数据集的Mapper和Reducer的执行。 Task− 在数据切片上执行Mapper或Reducer。 TaskAttempt − 尝试在SlaveNode上执行任务的特定实例。
-
示例场景
以下是有关组织的电力消耗的数据。它包含每月的用电量和各年的年平均值。Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec Avg 1979 23 23 2 43 24 25 26 26 26 26 25 26 25 1980 26 27 28 28 28 30 31 31 31 30 30 30 29 1981 31 32 32 32 33 34 35 36 36 34 34 34 34 1984 39 38 39 39 39 41 42 43 40 39 38 38 40 1985 38 39 39 39 39 41 41 41 00 40 39 39 45 如果将上述数据作为输入,则我们必须编写应用程序对其进行处理并产生结果,例如查找最大使用年份,最小使用年份等。对于记录数量有限的程序员来说,这是一个过渡。他们将简单地编写逻辑以产生所需的输出,并将数据传递给编写的应用程序。但是,请考虑代表该州成立以来所有大型行业的用电量的数据。当我们编写应用程序来处理此类批量数据时,- 他们将花费很多时间来执行。
- 当我们将数据从源移动到网络服务器等时,网络流量将会很大。
为了解决这些问题,我们有MapReduce框架。输入数据以上数据另存为sample.txt,并作为输入提供。输入文件如下所示。范例程序下面给出的是使用MapReduce框架的示例数据程序。将上述程序另存为ProcessUnits.java。程序的编译和执行如下所述。 -
加工单元程序的编译和执行
让我们假设我们位于Hadoop用户的主目录中(例如/home/hadoop)。请按照下面给出的步骤来编译和执行上述程序。步骤1以下命令将创建一个目录来存储已编译的Java类。步骤2下载Hadoop-core-1.2.1.jar,它用于编译和执行MapReduce程序。访问以下链接mvnrepository.com以下载jar。让我们假设下载的文件夹是/home/hadoop/。步骤3以下命令用于编译ProcessUnits.java程序并为该程序创建jar。步骤4以下命令用于在HDFS中创建输入目录。步骤5以下命令用于在HDFS的输入目录中复制名为sample.txt的输入文件。步骤6以下命令用于验证输入目录中的文件。步骤7以下命令用于通过从输入目录获取输入文件来运行Eleunit_max应用程序。等待一段时间,直到文件执行完毕。执行后,如下所示,输出将包含输入分割数,Map任务数,reduce任务数等。步骤8以下命令用于验证输出文件夹中的结果文件。步骤9以下命令用于查看Part-00000文件中的输出。该文件由HDFS生成。以下是MapReduce程序生成的输出。步骤10以下命令用于将输出文件夹从HDFS复制到本地文件系统以进行分析。