gpt4 book ai didi

hadoop - 选择 : Hadoop custom jars, Hadoop Streaming、Pig 或 Mahout 中的哪一个?

转载 作者:可可西里 更新时间:2023-11-01 14:55:07 26 4
gpt4 key购买 nike

我正在从事一个 NLP 项目,该项目可以创建实体集并计算大型语料库的成对相似性。目前我正在使用 hadoop streaming 并在 Python 中实现了所有映射器和缩减器。由于算法需要多轮 map-reduce,我使用 Shell 脚本来链接作业。

现在这是我的顾虑和我接下来想做的事情:

  • [问题 1]。作业链和作业控制。链接 hadoop 流作业是有问题的。如果作业序列 (job1-job2-job3) 中的作业 2 失败,我必须手动删除输出文件夹,调整启 Action 业的脚本文件并从中间重新运行作业序列。我真的希望找到一种更聪明的方法来做到这一点。由于我需要经常调整算法的参数和逻辑,我不想一次又一次地重复这些步骤。

  • [关注点 2]。速度和效率。我认为很大一部分时间成本是用于将文本解析为数字以及这种完全没有必要的格式转换过程。在开发过程中,键入和测试那些几乎重复的 Python 代码也需要花费大量时间。

  • [关注点 3]。易于维护和分发。随着项目越来越大(我有超过 20 个 map-reduce 作业),它确实需要将整个项目模块化。我想把它做成面向对象的,用IDE来开发和维护项目,这样处理内部各种数据结构和格式会更得心应手。而且我还想将我的项目作为一个包分发,以便其他人可以从中受益。我需要一种简单的方法将整个项目导入 IDE 并使其易于分发。

我对解决方案的可能性做了一些研究:

  • 备选方案 1. Hadoop 自定义 jar:看来最好的方法是将整个项目转换为 java - 一个 hadoop 自定义 jar。这可能会解决所有问题,包括作业链、效率和维护问题。但这可能需要相当多的时间,我已经找到了一种高效调试的方法。

  • 备选方案 2. pig :我找到了 this question 的答案非常有助于确定何时(不)使用 pig 。在回答中,Arun_suresh 说如果“您需要在 Map/reduce 函数中进行一些非常具体的计算……那么您应该考虑部署自己的 jars”。我的工作包括 shingling、hashing、min-hashing、permutation 等。它可以使用 Pig Latin 实现吗?有什么地方可以让我了解 Pig Latin 程序的计算有多复杂?

  • 备选方案 3. Mahout:我发现新发布的 Apache Mahout versions 有几个功能与我正在做的事情重叠,但它不能取代我的工作。我的项目应该基于 Mahout 吗?

由于我基本上是一个人做这个工作,而且只有大约 2 周的时间预算来完成整个家政工作,大约 1 个月的时间来改进它,我真的需要找到一种高效可靠的方法来做吧。请帮我选择一个备选方案,或者告诉我您是否有更好的解决方案。

最佳答案

  • 问题 1:研究使用 OOZIE,您可以在“工作流”中定义整个作业链,其中包含许多操作(它们可以是 Map reduce 步骤、决策切换/连接)。

    每个操作都可以定义一个准备阶段,您可以在其中删除即将到来的输出文件夹。

    您还可以查看工作流程中发生故障的位置,并从该特定步骤重新运行工作流程。

    OOZIE 文档中有运行 streaming 的示例工作和一些cookbook examples too (Case 7)

  • 问题 2:这是所有流式处理作业共有的问题,如果您想要最佳性能,您要么需要咬住 Java 子弹,要么寻求可以处理二进制格式的替代流输入/输出格式 (例如 AVRO),并且您需要一些知道如何处理这些的自定义映射器/缩减器流包装器。

  • 问题 3:通过流式处理,您可以将所有 python 脚本打包到一个压缩包中,然后让 hadoop 将压缩包解压到每个任务节点。这是 DistributedCache 存档功能的一个功能(在 OOZIE 中,这是在 map-reduce 操作的存档元素中定义的 - 请参阅之前的 OOZIE 指南链接中的案例 6)

关于hadoop - 选择 : Hadoop custom jars, Hadoop Streaming、Pig 或 Mahout 中的哪一个?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11147695/

26 4 0