我在这个领域的乞丐,所以不知道确切的术语,抱歉
问题库:想自动化批处理层的处理吗
问题:我无法理解人们是如何像这样运行大型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中使用option。
1条答案
按热度按时间vsdwdz231#
您可以在hadoop解决方案和非hadoop解决方案之间进行选择。
hadoop解决方案
对于这种情况,hadoop有三个主要框架:
奥齐(http://oozie.apache.org/)
路易吉(https://github.com/spotify/luigi
阿兹卡班(https://azkaban.github.io/)
每种框架都有其优缺点。例如,oozie是基于xml的(很多人不喜欢),您可以编写可以添加到oozie工作流引擎的作业。人们通常喜欢oozie的地方是他们有一个gui来设计工作流。
有关hadoop工作流解决方案的详细信息,请通过google比较这些语言。有许多部门比较可用
非hadoop解决方案
用任何语言编写您的工作流代码(很可能是像python、bash或perl这样的脚本语言比编译语言更适合该用例)。将此应用程序添加到cron作业,然后定期运行该应用程序。
调用所有命令(例如
hdfs dfs
或者hadoop jar
)应用程序中的。在捕捉异常或准备包含所有所需编程逻辑的语句方面,您非常灵活。怎样
如果您使用的是hue,那么使用oozie意味着您在默认情况下有一个gui来创建工作流。另请参见屏幕截图。
在您的例子中,您可以在gui中添加示例hadoop命令,您可以在mapper、reducer等字段中指定,然后您可以安排您的工作流。
如您所见,有许多oozie作业模板,例如MapReduceJob。如果没有特定的作业模板,可以用java实现自己的oozie作业。在后台,oozie将内容存储在xml文件中,因此您也可以用xml编辑工作流和作业。
计划/运行编辑并设计工作流后,还可以选择运行或计划工作流。调度是一个向导,允许您定义详细信息,如频率、输入数据或更高级的主题,如并发性。
这显示了oozie相对于脚本实现的另一个优势。如果您与偶尔应该允许触发工作流的用户协作,则会增加将脚本实现集成到gui中的工作量。使用oozie,只需单击并完成。
权衡
一如往常,没有解决一切问题的最佳工具银弹。对于hadoop解决方案,您必须学习特定的工具。它增加了一条学习曲线来理解oozie、luigi或azkaban是如何工作的。
如果您已经精通编程语言,则不需要此学习曲线。使用脚本语言并将脚本添加到诸如cron之类的计划程序中。您拥有所有的编程能力来对异常做出React并自定义您的工作流。你为了编程能力而放弃了舒适的用户界面。
总而言之,如果您只需要安排简单的作业,那么任何特定于hadoop的解决方案就足够了。在一定的复杂性和定制下,使用python的实现以维护为代价增加了灵活性。
还有第三种选择。市场上有很多专业的etl解决方案,比如informatica、talend或osi。