如何在Amazon Aws上运行Python Spark代码?

Piy*_*ush 9 amazon-s3 amazon-web-services apache-spark pyspark

我在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
Run Code Online (Sandbox Code Playgroud)

我尝试使用和没有我的权限文件,即

-i permissionsfile.pem
Run Code Online (Sandbox Code Playgroud)

然而,它失败了,堆栈跟踪显示了一些东西

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)
    ......
    ......
Run Code Online (Sandbox Code Playgroud)

我的方法是否正确,我需要解决Access问题才能开始,或者我是朝着错误的方向前进?

这样做的正确方法是什么?

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

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

Kri*_*ian 7

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

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

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

  • 有一个下拉框,你将它从`custom Jar`更改为`Spark application`,然后选择你的pyspark应用程序,即`s3:// your-bucket/path/to/file.py` (4认同)