自动化Hadoop批处理命令

2024-09-30 22:27:21 发布

您现在位置:Python中文网/ 问答频道 /正文

我是这个领域的乞丐,所以不知道确切的术语,抱歉

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

问题:我无法理解人们是如何管理大型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中使用选项。在


Tags: py命令hadoopusrjavasimple领域jar
1条回答
网友
1楼 · 发布于 2024-09-30 22:27:21

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

Hadoop解决方案

对于这种情况,Hadoop有三个主要框架:

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

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

非Hadoop解决方案

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

调用应用程序中的所有命令(例如hdfs dfshadoop jar)。在捕捉异常或使用所需的所有编程逻辑准备语句方面,您相当灵活。在

如何

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

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

enter image description here

如您所见,有许多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"/>

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

这显示了oozie与脚本实现相比的另一个优势。如果您与偶尔应该被允许触发工作流的用户协作,则会增加将脚本实现集成到GUI中的工作。有了Oozie,只需点击即可完成。在

scheduling

权衡

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

如果你已经掌握了编程语言,就不需要这种学习曲线。使用脚本语言并将脚本添加到诸如cron之类的调度程序中。你有所有的编程能力来应对异常和定制你的工作流程。你为了编程能力而放弃了对UI的舒适感。在

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

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

相关问题 更多 >