自动化 Hadoop 批处理命令

Automating Hadoop batch processing commands

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

问题库:想自动化处理batch层

问题:我无法理解人们如何管理 运行 像

这样的大型 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(here) 构建 jar 或 运行 命令,但没有任何文档或示例关于它

注意: 因为我不知道 java 我没有搜索过并且不能使用 java 中的选项。

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

Hadoop 解决方案

Hadoop 为这种情况提供了三个主要框架:

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

有关 Hadoop 工作流解决方案的详细信息,google 这些语言的比较。有很多可用的内部比较

非 Hadoop 解决方案

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

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

如何

如果您使用的是 Hue,则使用 Oozie 意味着默认情况下您有一个 GUI 来创建您的工作流。另请参见屏幕截图。

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

如您所见,有很多oozie作业模板,例如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"/>

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

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

取舍

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

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

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

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