【问题标题】:How to add python spark step in EMR?如何在 EMR 中添加 python spark 步骤?
【发布时间】:2016-08-26 17:07:28
【问题描述】:

我正在尝试创建一个 aws datapipeline 任务,该任务将创建一个 EMR 集群并运行一个简单的 wordcount.py spark 程序。我使用了数据管道定义,其中步骤很简单:

"myEmrStep": "s3://test/wordcount.py,s3://test/data/abc.txt,s3://test/output/outfile5/",

现在,当我激活任务时,我收到如下错误:

线程“主”java.io.IOException 中的异常:打开作业 jar 时出错: /mnt/var/lib/hadoop/steps/s-187JR8H3XT8N7/wordcount.py 在 org.apache.hadoop.util.RunJar.run(RunJar.java:160) 在 org.apache.hadoop.util.RunJar.main(RunJar.java:136) 原因: java.util.zip.ZipException:在打开 zip 文件时出错 java.util.zip.ZipFile.open(本机方法)在 java.util.zip.ZipFile.(ZipFile.java:215) 在

似乎这些步骤正在尝试使用 java 而不是 python 运行程序。 有什么想法,请。

谢谢。

【问题讨论】:

    标签: amazon-web-services amazon-data-pipeline


    【解决方案1】:

    您需要告诉集群您要运行 spark 命令。您可以在 github 上找到示例(包括 Spark 管道): https://github.com/awslabs/data-pipeline-samples

    EMR 集群支持 'spark-submit' 格式来启动您的命令,详情请查看: http://spark.apache.org/docs/latest/submitting-applications.html

    最好的。

    【讨论】:

      【解决方案2】:

      在我的管道定义中,我使用以下内容,基本上是一些允许您在盒子上运行随机命令的 jar...然后我使用 spark-submit 命令提交 spark 作业(您也可以在本地使用)。

      确保你在命令中使用的所有路径都是绝对的,否则可能不起作用(我不知道哪个文件夹是当前目录)

      这是在管道中的 Activity 节点上: "step" : "/var/lib/aws/emr/step-runner/hadoop-jars/command-runner.jar,spark-submit,--py-files,/home/hadoop/lib.zip,/home/hadoop/analyse_exposures.py,#{myOutputS3Loc}/output/,#{myExposuresAnalysisWindowSize}"

      另请注意,我有一个脚本可以引导集群以将所有代码传输到集群中的各个机器,以便它们存在于本地。

      这是在 EMR 资源上定义的:"bootstrapAction": "#{myDeliverablesBucket}/emr/bootstrap.sh,#{myDeliverablesBucket}/emr/"

      我知道在集群启动时复制所有资源而不是直接从 S3 读取它们可能不是最灵活的方法,但它可以完成这项工作。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2019-04-08
        • 1970-01-01
        • 1970-01-01
        • 2021-12-22
        • 2020-05-24
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多