选择哪一个:hadoop定制jar、hadoop流媒体、pig还是mahout?

epfja78i  于 2021-06-21  发布在  Pig
关注(0)|答案(1)|浏览(291)

我正在从事一个nlp项目,可以创建实体集和计算大规模语料库的成对相似性。目前我正在使用hadoop流媒体,并在python中实现了所有的Map器和还原器。由于该算法需要几轮map reduce,因此我使用shell脚本来链接作业。
下面是我关心的问题和下一步要做的:
[问题1]。作业链和作业控制。链接hadoop流作业是有问题的。如果作业序列(job1-job2-job3)中的job2失败,我必须手动删除输出文件夹,调整启动作业的脚本文件,然后从中间重新运行作业序列。我真的希望能找到一个更聪明的方法。由于我需要经常调整算法的参数和逻辑,我不想一次又一次地重复这些步骤。
[问题2]。速度和效率。我认为很大一部分时间成本是用于将文本解析成数字和这种完全不必要的格式转换过程。在开发过程中,输入和测试那些近乎重复的python代码也需要大量时间。
[问题3]。易于维护和分发。随着项目越来越大(我有20多个map reduce作业),它确实需要模块化整个项目。我想使它面向对象,并使用ide来开发和维护项目,这样它将更自如地处理各种内部数据结构和格式。我还想把我的项目作为一个包分发出去,这样其他人就可以从中受益。我需要一个简单的方法导入整个项目在一个ide,使其易于分发。
我对解决方案的可能性做了一些研究:
备选方案1。hadoop定制jar:最好的方法是将整个项目转换成java—一个hadoop定制jar。这可以解决所有的问题,包括工作链,效率和维护问题。但这可能需要相当长的时间,我已经找到了一种方法来进行有效的调试。
备选方案2。Pig:我发现这个问题的答案对决定何时(不)使用Pig很有帮助。在回答中,arun\u suresh说如果“你需要在map/reduce函数中进行一些非常具体的计算……那么你应该考虑部署你自己的jar”。我的工作包括shingling,hashing,min hashing,permutation等。它能用pig拉丁语实现吗?有没有一个地方可以让我知道程序的计算有多复杂?
备选方案3。mahout:我发现新发布的apachemahout版本有几个与我正在做的工作重叠的功能,但是它不能代替我的工作。我要把我的计划建立在马霍特的基础上吗?
由于我基本上是一个人来做这项工作,而且只有大约2周的时间预算来做整个家政工作,还有大约1个月的时间来改进,所以我真的需要找到一个高效可靠的方法来做这项工作。请帮我选择一个替代方案,或者告诉我你是否有更好的解决方案。

mlnl4t2r

mlnl4t2r1#

关注点1:考虑到使用oozie,您可以在一个“工作流”中定义整个作业链,其中包含许多操作(可以是map-reduce步骤、决策切换/连接)。
每个操作都可以定义一个准备阶段,您可以在其中删除即将出现的输出文件夹。
您还可以查看工作流中发生故障的位置,并从该特定步骤重新运行工作流。
oozie文档中有运行流式处理作业的示例,还有一些食谱示例(案例7)
关注点2:这是所有流作业都面临的一个问题,如果您想要获得最佳性能,您需要咬紧牙关,或者寻找可以处理二进制格式的替代流输入/输出格式(如avro),并且您需要一些定制的mapper/reducer流 Package 器,它们知道如何处理这些格式。
问题3:通过流式处理,可以将所有python脚本捆绑到一个tarball中,并让hadoop将tarball解包到每个任务节点。这是distributedcache归档特性的一个函数(在oozie中,这是在map reduce操作的archives元素中定义的-请参阅前面oozie cookbook链接中的案例6)

相关问题