首页 > 代码库 > hadoop学习;datajoin;chain签名;combine()

hadoop学习;datajoin;chain签名;combine()

hadoop有种简化机制来管理job和control的非线性作业之间的依赖。job对象时mapreduce的表现形式。job对象的实例化可通过传递一个jobconf对象到作业的构造函数中来实现。

x.addDeopendingJob(y)意味着x在y完毕之前不会启动。

鉴于job对象存储着配置和依赖信息。jobcontrol对象会负责监管作业的运行,通过addjob()。你能够为jobcontrol加入作业,当全部作业和依赖关系加入完毕后。调用jobcontrol的run()方法,生成一个线程提交作业并监视其运行,有allFinised()。getFailedJobs()方法

hadoop引入chainMapper和chainReducer来简化预处理和后处理

driver会先设置“全局”jobconf对象。包括作业名,输入路径和输出路径等,它一次性加入全部步骤,然后按顺序运行

ChainMapper.addMapper()方法的签名来具体了解怎样一步步的链接作业

技术分享

byvalue用于推断是否是值传递。若为false则採用引用传递。初始mapper的输出内容保存在内存中,假设后期不再调用传入的值,能够这样,效率高,一般设为true

技术分享

reduce函数接收输入数据,并对其值进行交叉乘积,reduce生成这些值的全部合并结果。

交叉乘积得到的每一个合并结果被送入函数combine()(不是combiner)生成一个输出记录。对于随意特定的合并,combine能够选择不输出。交叉乘积的本质确保了combine看到的记录都有同样的连接键

在解释怎样使用DatajoingMapperBase和DataJoinReduceBase之前,你须要了解在代码通篇所使用的一个抽象数据类TaggedMapOutput(用Text标签封装记录的数据类型)

在数据流的描写叙述中,mapper输出的包带有一个组键和一个被标签记录的值。datajoin软件包指定组键为text类型。而值为TaggerMapOutput类型,它详细实现了getTag()和setTag(Text Tag)方法

作为mapper的输出,TaggerMapOutput必须是Writable类型,因此我们的子类必须实现readFile()和write()方法

DataJoinMapper运行全部的封装。指定了三个能够填充的抽象方法

generateInputTag在map任务開始前调用。来为这个map任务所处理的全部记录指定一个全局标签

技术分享

假设横跨几个文件,能够用它们的前缀作为标签

完毕map任务初始化后,为每一个记录调用DataJoinMapperBase的map()方法。里面调用generateTaggedOutput()和generateGroupKey()方法

原则上。在同一文件里,不同的记录能够用不同的标签,在标准情况下,我们希望一个标签代表一个数据源,它早先由generateInputTag()计算好并存在this.InputTag中


hadoop学习;datajoin;chain签名;combine()