我是这个领域的乞丐,所以不知道确切的术语,抱歉
问题库:想要自动处理批处理层吗
问题:我无法理解人们是如何管理大型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 dfs
或hadoop jar
)。在捕捉异常或使用所需的所有编程逻辑准备语句方面,您相当灵活。在如何
使用Oozie意味着您有一个GUI来创建默认的工作流,如果您使用的是Hue。另请参见屏幕截图。
在您的例子中,您可以在GUI中添加示例hadoop命令,您可以在mapper、reducer等字段中指定,然后可以安排您的工作流。在
如您所见,有许多oozie作业模板,例如map reduce job。如果没有特定的作业模板,则可以在Java中实现自己的Oozie作业。在幕后,Oozie将内容存储在XML文件中,因此您也可以用XML编辑工作流和作业。在
计划/运行 编辑并设计工作流后,您还可以选择运行或计划工作流。调度是一个向导,允许您定义详细信息,如频率、输入数据或更高级的主题(如并发)。在
这显示了oozie与脚本实现相比的另一个优势。如果您与偶尔应该被允许触发工作流的用户协作,则会增加将脚本实现集成到GUI中的工作。有了Oozie,只需点击即可完成。在
权衡
和往常一样,并没有解决所有问题的最佳工具的银弹。使用Hadoop解决方案,您将不得不学习特定的工具。它增加了一个学习曲线来理解Oozie、Luigi或Azkaban是如何工作的。在
如果你已经掌握了编程语言,就不需要这种学习曲线。使用脚本语言并将脚本添加到诸如cron之类的调度程序中。你有所有的编程能力来应对异常和定制你的工作流程。你为了编程能力而放弃了对UI的舒适感。在
总而言之,如果您只需要安排简单的作业,那么任何特定于Hadoop的解决方案就足够了。在一定的复杂性和定制程度下,使用python的实现以维护为代价增加了灵活性。在
还有第三种选择。市场上有很多专业的ETL解决方案,如Informatica、Talend或OSI。在
相关问题 更多 >
编程相关推荐