2

我是这个领域的初学者,所以不知道确切的术语,抱歉

问题库:想自动化批处理层的处理

问题:我无法理解人们如何设法运行大型 hadoop 命令,例如

"hadoop jar /usr/lib/hadoop-0.20-mapreduce/contrib/streaming/hadoop-streaming-2.0.0-mr1-cdh4.4.0.jar \
    -mapper mapper.py \
    -reducer reducer.py \
    -input nfldata/stadiums \
    -output nfldata/pythonoutput \
    -file simple/mapper.py \
    -file simple/reducer.py" 

每次他们需要运行 map reduce 作业时,是否有任何方法可以自动化该过程,例如 cron 之类的,请让我知道是否有任何资源可以了解这一点,以便我们可以安排 hadoop 命令或与 python 或 bash 相关的东西脚本

我搜索过的内容:Luigi 建议(此处)构建 jar 或运行命令,但没有任何关于它的文档或示例

注意:由于我不知道 java,我没有搜索过并且无法在 java 中使用选项。

4

1 回答 1

1

您可以在 Hadoop 解决方案和非 Hadoop 解决方案之间进行选择。

Hadoop解决方案

针对这种情况,Hadoop 有三个主要框架:

每个框架都有其优点和缺点。例如,Oozie 是基于 XML 的(很多人不喜欢),您可以编写可以添加到 oozie 工作流引擎的作业。人们通常喜欢 Oozie 的地方是他们有一个 GUI 来设计工作流程。

有关 Hadoop 工作流解决方案的详细信息,请在 Google 上对这些语言进行比较。有许多内部比较可用

非 Hadoop 解决方案

用任何语言编写工作流代码(很可能是 Python、Bash 或 Perl 等脚本语言比编译语言更适合该用例)。将此应用程序添加到 cron 作业中,然后定期运行该应用程序。

调用应用程序中的所有命令(例如hdfs dfshadoop jar)。您可以非常灵活地捕捉异常或使用您需要的所有编程逻辑准备语句。

如何

如果您使用的是 Hue,则使用 Oozie 意味着默认情况下您有一个 GUI 来创建您的工作流程。另请参阅屏幕截图。 在此处输入图像描述

在您的情况下,您可以在 GUI 中添加示例 hadoop 命令,您可以在映射器、reducer 等字段中指定。然后您可以安排您的工作流程。

在此处输入图像描述

可以看到,有很多 oozie job 模板,比如 map reduce job。如果您没有特定的作业模板,您可以在 Java 中实现自己的 Oozie 作业。在底层,Oozie 将内容存储在 XML 文件中,因此您也可以在 XML 中编辑您的工作流程和作业。

<workflow-app xmlns="uri:oozie:workflow:0.2"
name="whitehouse-workflow">
<start to="transform_input"/>
<action name="transform_sample_pig">
  <pig>
    <job-tracker>${resourceManager}</job-tracker>
    <name-node>${nameNode}</name-node>
    <prepare>
      <delete path="pig_store"/>
    </prepare>
    <script>mypig.pig</script>
  </pig> 
  <ok to="end"/>
  <error to="fail"/>
</action>
<kill name="fail">
  <message>Job failed, error message[${wf:errorMessage(wf:lastErrorNode())}]
  </message>
</kill>
<end name="end"/>

调度/运行 一旦您编辑并设计了您的工作流程,您还可以选择运行或安排您的工作流程。调度是一个向导,允许您定义详细信息,例如频率、输入数据或更高级的主题(例如并发)。

这显示了 oozie 与脚本实现相比的另一个优势。如果您与偶尔应该被允许触发工作流的用户协作,则需要付出额外的努力才能将脚本实现集成到 GUI 中。使用 Oozie,只需单击即可完成。

调度

权衡

像往常一样,没有解决所有问题的最佳工具的灵丹妙药。使用 Hadoop 解决方案,您必须学习特定的工具。它增加了一个学习曲线来了解 Oozie、Luigi 或 Azkaban 的工作原理。

如果您已经精通一门编程语言,则不需要此学习曲线。使用脚本语言并将您的脚本添加到调度程序,例如 cron。您拥有对异常做出反应和自定义工作流程的所有编程能力。你放弃了 UI 的舒适性来获得编程能力。

总而言之,如果您只需安排简单的作业,那么任何 Hadoop 特定的解决方案就足够了。在一定的复杂性和定制性下,使用 python 的实现以维护为代价增加了灵活性。

还有第三种选择。市场上有很多专业的 ETL 解决方案,例如 Informatica、Talend 或 OSI。

于 2016-02-05T12:56:17.597 回答