在 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 驱动程序

猪用户定义函数中的 aws Amazon S3 客户端凭证

带有 tez 的 aws emr 上的 Pig 脚本偶尔会因 OutOfMemoryException 而失败

在 Amazon EMR-4 上的 Tez 上运行 Pig

在 Amazon EMR 中运行的 Pig 作业的引导文件的路径是啥

在 AWS EMR 上的 PySpark 脚本上找不到 com.amazon.ws.emr.hadoop.fs.EmrFileSystem