在 Amazon AWS 上并行运行 Pig 脚本
Posted
技术标签:
【中文标题】在 Amazon AWS 上并行运行 Pig 脚本【英文标题】:Run Pig scripts in Parallel on Amazon AWS 【发布时间】:2017-03-20 15:15:39 【问题描述】:我们目前在 Amazon EMR 上按顺序运行所有 Pig 作业,因此我们启动一个集群,然后将所有 Pig 作业作为一个步骤逐个添加到集群中。 虽然这可行,但我想知道是否有什么东西可以让您并行运行这些 Pig 作业。
理想情况下,我想做以下事情: 启动一个集群(比如说 c3.xlarge),然后向它抛出 15 个猪作业。 然后,这些作业将尽可能并行运行(例如:同时运行 3 个),当 1 个完成时,另一个将被执行。
如果存在类似的东西以及我们如何使用它,我们将不胜感激。我读过一些关于 Oozie 的文章,但我不确定这是否适合我们的需求。
【问题讨论】:
【参考方案1】:不能使 EMR 步骤并行运行。但是,就像您提到的那样,使用 oozie 使用 fork 和 join 操作来编排您的 pig 脚本执行以并行运行。
【讨论】:
【参考方案2】:通常,如果您手动重新配置您的 EMR 集群以使用 Fair 调度程序并通过 shell 提交任务,这是可能的。或者也许你可以和 Oozie 一起去。但一般情况下,它不像是从盒子里拿出来的。
【讨论】:
【参考方案3】:Oozie 可以帮助您并行运行 pig 脚本。为了调度 pig 脚本的并行执行,您可以使用 Fork-Join 控制节点。例如Fork and Join Control Nodes。
唯一的一点是,它会开始并行执行所有的分叉脚本,不提供你控制一个固定的并行度。您需要在 oozie 工作流应用程序定义中自己管理它。对于Pig action,请查看文档。
两个 map-reduce 作业将并行执行。您可以在此处使用多种作业组合,例如 Pig、Hive、Map-Reduce 等。
<workflow-app name="sample-wf" xmlns="uri:oozie:workflow:0.1">
...
<fork name="forking">
<path start="firstparalleljob"/>
<path start="secondparalleljob"/>
</fork>
<action name="firstparallejob">
<map-reduce>
<job-tracker>foo:8021</job-tracker>
<name-node>bar:8020</name-node>
<job-xml>job1.xml</job-xml>
</map-reduce>
<ok to="joining"/>
<error to="kill"/>
</action>
<action name="secondparalleljob">
<map-reduce>
<job-tracker>foo:8021</job-tracker>
<name-node>bar:8020</name-node>
<job-xml>job2.xml</job-xml>
</map-reduce>
<ok to="joining"/>
<error to="kill"/>
</action>
<join name="joining" to="nextaction"/>
...
</workflow-app>
【讨论】:
感谢您的信息,已经看过 Oozie,但我不确定是否符合我的需要。因为我认为 Oozie 没有考虑可用资源(默认情况下) Oozie 不考虑资源可用性。它将作业提交给 Yarn/MR 框架并依赖它。谢谢。以上是关于在 Amazon AWS 上并行运行 Pig 脚本的主要内容,如果未能解决你的问题,请参考以下文章
无法在 Amazon EMR 集群上使用 PIG 0.12.0 和 Hadoop 2.4.0 找到 MySql 驱动程序
带有 tez 的 aws emr 上的 Pig 脚本偶尔会因 OutOfMemoryException 而失败
在 Amazon EMR 中运行的 Pig 作业的引导文件的路径是啥
在 AWS EMR 上的 PySpark 脚本上找不到 com.amazon.ws.emr.hadoop.fs.EmrFileSystem