我在 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 的教程。
如果有帮助,我正在处理的数据集是亚马逊公共(public)数据集的一部分。
最佳答案
Spark
,如果您不需要这些附加程序,则可以取消选中其他框。 S3
,然后选择新上传的 S3 文件的路径。一旦运行,它将成功或失败。如果失败,请稍等片刻,然后单击步骤列表中该步骤行的“查看日志”。不断调整你的脚本,直到你让它工作。[通过命令行提交] 按照页面顶部的 ssh 说明通过 SSH 连接到驱动程序节点。进入后,使用命令行文本编辑器创建一个新文件,并将脚本的内容粘贴进去。然后 spark-submit yourNewFile.py。如果失败,您将直接看到错误输出到控制台。调整你的脚本,然后重新运行。这样做直到你让它按预期工作。
注:从本地机器到远程机器运行作业很麻烦,因为您实际上可能导致本地 spark 实例负责一些昂贵的计算和网络上的数据传输。这就是您要从 EMR 中提交 AWS EMR 作业的原因。
关于amazon-web-services - 如何在 Amazon Aws 上运行 Python Spark 代码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40443659/