【问题标题】:Automating Hadoop batch processing commands自动化 Hadoop 批处理命令
【发布时间】:2016-03-28 20:14:00
【问题描述】:

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

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

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

这样的大型 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中使用选项。

【问题讨论】:

  • 您希望运行该作业的频率是多少?您可以创建一个 shell 脚本并将此命令写入其中并将其调度到 unix cron 中。这是最简单的方法。有许多可用的调度工具,如 Apache Oozie 或 Tidal 等企业软件。
  • 我想通过服务器上的 POST 请求运行它,或者当新数据输入 hdfs 时,我的意思是有任何方法可以自动生成批处理视图或经验法则?还是这些命令是手动运行的?
  • 我假设您在 hadoop 集群中设置了 oozie 服务器和客户端。您可以使用带有streaming 配置的map-reduce 操作在oozie 工作流xml 中定义您的处理组件。要根据时间(如每天)或数据运行任何工作流,您可以使用 oozie 协调器并安排它。

标签: python hadoop mapreduce oozie luigi


【解决方案1】:

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

Hadoop 解决方案

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

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

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

非 Hadoop 解决方案

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

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

如何

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

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

如您所见,oozie 作业模板有很多,例如 map reduce 作业。如果您没有特定的作业模板,您可以在 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。

【讨论】:

  • 感谢您回答这个问题,我已阅读有关 luigi 和 oozie 的信息,但我正在寻找答案的“如何”部分,这只是一个简单的示例,因为 oozie 之类的框架很复杂,我只想设置一个数据到达后我需要运行 hadoop 语句的任务
  • 我在方法中添加了一些信息
  • 感谢支持它的详细信息,以便默认情况下可以接受它作为赏金。您能否添加最后一件事,即我们可以在 oozie 中放置时间或条件何时执行作业?我的意思是每天在某个时间自动?再次感谢这个
  • 我添加了一些日程安排信息。您可以非常灵活地安排您的 oozie 工作流程。最重要的是您可以使用 HUE 进行管理
  • @stephan 感谢您提供详细信息,如果我有任何疑问,我会联系您这些详细信息,已接受赏金。如果您认为它需要未来用户的任何详细信息,您仍然可以对其进行编辑。再次感谢
猜你喜欢
  • 2015-12-15
  • 1970-01-01
  • 1970-01-01
  • 2019-09-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多