【问题标题】:How to run Python Spark code on Amazon Aws?如何在 Amazon Aws 上运行 Python Spark 代码?
【发布时间】:2017-03-19 12:37:49
【问题描述】:

我在 spark 中编写了一个 python 代码,我想在 Amazon 的 Elastic Map reduce 上运行它。

我的代码在我的本地机器上运行良好,但我对如何在亚马逊的 AWS 上运行它有点困惑?

更具体地说,我应该如何将我的 python 代码转移到主节点?我是否需要将我的 Python 代码复制到我的 s3 存储桶并从那里执行它?或者,我应该 ssh 进入 Master 并将我的 python 代码 scp 到 Master 中的 spark 文件夹吗?

目前,我尝试在终端本地运行代码并连接到集群地址(我是通过读取 spark 的 --help 标志的输出来完成此操作的,所以我可能会在这里遗漏几个步骤)

./bin/spark-submit --packages org.apache.hadoop:hadoop-aws:2.7.1 \
--master spark://hadoop@ec2-public-dns-of-my-cluster.compute-1.amazonaws.com \
mypythoncode.py

我在有和没有我的权限文件的情况下都试过了,即

-i permissionsfile.pem

但是,它失败了,堆栈跟踪在

行显示了一些东西
Exception in thread "main" java.lang.IllegalArgumentException: AWS Access Key ID and Secret Access Key must be specified as the username or password (respectively) of a s3n URL, or by setting the fs.s3n.awsAccessKeyId or fs.s3n.awsSecretAccessKey properties (respectively).
    at org.apache.hadoop.fs.s3.S3Credentials.initialize(S3Credentials.java:66)
    at org.apache.hadoop.fs.s3native.Jets3tNativeFileSystemStore.initialize(Jets3tNativeFileSystemStore.java:49)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    ......
    ......

我的方法是否正确,我需要解决访问问题才能继续前进,还是我走错了方向?

正确的做法是什么?

我在 youtube 上搜索了很多,但找不到任何关于在 Amazon 的 EMR 上运行 Spark 的教程。

如果有帮助,我正在处理的数据集是亚马逊公共数据集的一部分。

【问题讨论】:

    标签: amazon-web-services apache-spark amazon-s3 pyspark


    【解决方案1】:
    1. 进入 EMR,创建新集群...[建议:仅从 1 个节点开始,仅用于测试目的]。
    2. 点击复选框安装Spark,如果您不需要其他程序,可以取消选中其他框。
    3. 通过选择 VPC 和安全密钥(ssh 密钥,也称为 pem 密钥)进一步配置集群
    4. 等待它启动。一旦您的集群显示“正在等待”,您就可以继续操作了。
    5. [通过 GUI 提交 spark] 在 GUI 中,您可以添加 Step 并选择 Spark 作业,并将您的 spark 文件上传到 S3,然后选择新上传的路径S3 文件。一旦运行,它将成功或失败。如果失败,请稍等片刻,然后单击步骤列表中该步骤行的“查看日志”。不断调整你的脚本,直到你让它工作为止。

      [通过命令行提交] 按照页面顶部的 ssh 说明通过 SSH 连接到驱动程序节点。进入后,使用命令行文本编辑器创建一个新文件,然后将脚本的内容粘贴到其中。然后 spark-submit yourNewFile.py。如果失败,您将直接看到错误输出到控制台。调整你的脚本,然后重新运行。这样做,直到你让它按预期工作。

    注意:将作业从本地计算机运行到远程计算机很麻烦,因为您实际上可能会导致本地 spark 实例负责一些昂贵的计算和网络上的数据传输。这就是您要从 EMR 中提交 AWS EMR 作业的原因。

    【讨论】:

    • 当我尝试通过 GUI 添加一个 spark 提交时,它要求一个 jar 文件并指向一个 s3 位置。 jar文件的路径应该是什么?
    • 有一个下拉框,你把它从custom Jar改成Spark application,然后选择你的pyspark应用,即s3://your-bucket/path/to/file.py
    【解决方案2】:

    在 Amazon EMR 集群上运行作业通常有两种方式(无论是 Spark 还是其他作业类型):

    如果您有Apache Zeppelin installed on your EMR cluster,则可以使用网络浏览器与 Spark 交互。

    您遇到的错误是通过 s3n: 协议访问的文件,这需要提供 AWS 凭证。相反,如果文件是通过 s3: 访问的,我怀疑凭据将来自自动分配给集群中节点的 IAM 角色,并且此错误将得到解决。 p>

    【讨论】:

      猜你喜欢
      • 2017-03-03
      • 2017-06-13
      • 1970-01-01
      • 1970-01-01
      • 2017-04-11
      • 2015-10-02
      • 2021-09-14
      • 1970-01-01
      • 2013-11-12
      相关资源
      最近更新 更多