Hadoop MapReduce编程:计算极值

  • 时间:
  • 浏览:0

亲戚亲戚大伙实现的ExtremumOutputFormat类,在getRecordWriter最好的办法中返回另一个多 ExtremumRecordWriter实例,这个实例就是用来执行写入输出结果的,里面输出结果的格式就是“国家代码最小值最大值”,各个字段时间使用TAB分隔,一共三列。

Reducer输出,实际上就是亲戚亲戚大伙写个这个Job的输出。亲戚亲戚大伙定义了ExtremumOutputFormat类,该类描述Reducer输出规格的,让我参考Hadoop自带的TextOutputFormat类,重写自带的getRecordWriter最好的办法,来实现亲戚亲戚大伙被委托人输出结果的操作。ExtremumOutputFormat类实现代码如下所示:

各个字段之间以空格号分隔。亲戚亲戚大伙要计算的结果是,求各个国家(以国家代码标识)的成本估值的极值(最大值和最小值)。

数据格式,如下所示:

测试数据

Mapper实现就是解析一行文本数据,抽取出国家代码和成本估值,直接列出亲戚亲戚大伙实现的ExtremunGlobalCostMapper累代码,如下所示:

Reducer实现也需用很简化,需用注意的是,计算出最小值和最大值随后 ,将它们包装到非Hadoop定义的类型的实例中,这里是Extremum类。亲戚亲戚大伙实现的ExtremumGlobalCostReducer类,代码如下所示:

里面文本数据一行一行存储,一行饱含4每种,分别表示:

现在,亲戚亲戚大伙需用计算另一个多 最大值了(想了解怎么计算最大值,还需用参考Hadoop MapReduce编程:计算最大值),就是计算另一个多 最大值和另一个多 最小值。实际上,实现Mapper和Reducer也是非常简单的,怎么让亲戚亲戚大伙要输出结果,需用要能区分出最大值和最小值,并一起输出结果,这就需用自定义被委托人的输出类型,以及需用定义输出格式。

编程实现

可见,结果符合预期。

运行过程控制台输出内容,如下所示:

运行应用进程

下面,亲戚亲戚大伙完全说明怎么去实现:

Reducer的输出Value类型应该定义另一个多 字段:最大值和最小值,另另一个多 要能在最终的输出中一起就看同另一个多 国家代码对应的极值数据。亲戚亲戚大伙定义了Extremum类来代表极值,实现代码如下所示:

下面看运行应用进程的过程:

配置Job,需用按照亲戚亲戚大伙定义的输出值类型,以及输出规格说明来进行配置,亲戚亲戚大伙实现的MapReduce应用进程的配置逻辑,实现类为ExtremumCostDriver,代码如下所示:

亲戚亲戚大伙被委托人定义的类型需用实现Hadoop定义的Writable接口,另另一个多 才要能实用Hadoop的序列化机制,最终将数据写入到HDFS。该接口定义了另一个多 最好的办法,分别对应于序列化和反序列化操作。

这个自定义类型中,封装了最大值和最小值另一个多 字段。

这里,一定要正确设置对应阶段的Key和Value输出类型,以及亲戚亲戚大伙定义的输出规格描述类型。另外,亲戚亲戚大伙设置了启动另一个多 Reduce任务,最终会输出另一个多 结果文件。

首先,亲戚亲戚大伙应该考虑需用实现哪十几个 内容,要能满足亲戚亲戚大伙的编程需用。

Mapper中输入数据类型分别为:K1=>LongWritable,V1=>Text,K1表示文本文件中行偏移量,V1表示一行的文本内容;输出数据类型分别为:K2=>Text,V2=>LongWritable,K2表示亲戚亲戚大伙解挥发性来的国家代码,是字符串类型,V2表示成本估算值,是另一个多 数字类型。

而Reducer的输入即为<K2, list>,输出亲戚亲戚大伙设计为,K3=>Text,是国家代码,V3是亲戚亲戚大伙被委托人定义的类型,这个类中应该饱含最大值和最小值。

另外,意味着着 Reducer运行阶段亲戚亲戚大伙得到最终的输出,怎么让是输出到HDFS中。亲戚亲戚大伙设计了输出对象的类型,怎么让还需用设计另一个多 用来描述输出数据的格式,其饱含有了应该怎么将最终的数据写入到HDFS中。

有关Mapper的实现,还需用参考Hadoop MapReduce编程:计算最大值,这里,为了计算极值,需用实现如下内容: