自动化Hadoop批处理命令

时间:2015-12-22 14:21:40

标签: python hadoop mapreduce oozie luigi

我在这个领域很开心,所以不知道确切的术语,对不起

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

问题:我无法理解人们如何设法运行大型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" 

每当他们需要运行地图减少工作时,有没有办法像cron或其他东西一样自动化这个过程请告诉我是否有任何资源可以了解这一点,以便我们可以安排一个hadoop命令或相关的东西python或bash脚本

我搜索的内容:建议使用Luigi(here)来构建jar或运行命令但是没有关于它的任何文档或示例

注意:因为我不知道java我没有搜索并且无法在java中使用选项。

1 个答案:

答案 0 :(得分:1)

您可以选择Hadoop解决方案和非Hadoop解决方案。

Hadoop解决方案

Hadoop为此案例提供了三个主要框架:

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

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

<强>非Hadoop的解决方案

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

在应用程序中调用所有命令(例如URLs1 <- c('http://www.thetrainline.com/destinations/trains-to-london', 'https://wwf-fb.zyngawithfriends.com/wwf-fb.a84485c126e67ea2787c.html', 'https://www.thetrainline.com/buytickets/combinedmatrix.aspx?Command=TimeTable') > gsub('^(?:[^/]*/){3}','/', URLs1) [1] "/destinations/trains-to-london" "/wwf-fb.a84485c126e67ea2787c.html" [3] "/buytickets/combinedmatrix.aspx?Command=TimeTable" > hdfs dfs)。您可以非常灵活地捕获异常或使用您需要的所有编程逻辑准备语句。

如何

如果您使用Hue,与Oozie合作意味着您可以默认创建工作流程。另请参见屏幕截图。 enter image description here

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

enter image description here

正如您所看到的,有许多oozie作业模板,例如map reduce job。如果您没有特定的作业模板,则可以使用Java实现自己的Oozie作业。 Oozie将内容存储在XML文件中,因此您也可以使用XML编辑工作流和作业。

hadoop jar

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

这显示了oozie与脚本实现相比的另一个优势。如果您与那些应该被允许触发工作流的用户协作,则会创建额外的工作来将脚本实现集成到GUI中。使用Oozie,只需点击即可完成。

scheduling

<强>权衡

像往常一样,没有最好的工具可以解决所有问题。使用Hadoop解决方案,您将需要学习特定工具。它增加了学习曲线,以了解Oozie,Luigi或Azkaban的工作原理。

如果您已经熟悉编程语言,则不需要此学习曲线。使用脚本语言并将脚本添加到调度程序(如cron)。您拥有所有编程能力,可以对异常做出反应并自定义您的工作流程。你放弃了UI的编程能力。

总结一下,如果您只是安排简单的工作,那么任何Hadoop特定的解决方案就足够了。在某种复杂性和定制方面,使用python实现增加了灵活性,但代价是维护成本。

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