Den*_*nis 5 amazon-s3 amazon-web-services amazon-emr apache-spark
当尝试使用S3上的文件通过AWS-EMR集群上的pyspark运行Spark-MLLIB示例时遇到了一些困难。很明显,这是一个权限问题(403错误),但是在这一点上,我可以用一只手找出要看的地方。
我从AWSCLI创建了EMR的默认角色
$ aws emr create-default-roles
Run Code Online (Sandbox Code Playgroud)
接下来,我向创建的两个角色(EMR_DefaultRole和EMR_EC2_DefaultRole)添加了以下策略:AmazonEC2FullAccess,AmazonS3FullAccess,AmazonElasticMapReduceFullAccess,AmazonElasticMapReduceRole,AmazonElasticMapReduceForEC2Role
然后,我继续并通过AWSCLI启动了一个集群
$ aws emr create-cluster --name "Spark cluster" --release-label emr-5.0.0 --applications Name=Spark --ec2-attributes KeyName=AWS_Spark_Test --instance-type m3.xlarge --instance-count 3 --use-default-roles
Run Code Online (Sandbox Code Playgroud)然后,我通过SSH进入主服务器,启动pyspark并尝试以下代码:
from pyspark.sql import SparkSession
spark = SparkSession\
.builder\
.appName("PythonSQL")\
.config("spark.some.config.option", "some-value")\
.getOrCreate()
training = spark.read.format("libsvm").load("s3://s3.amazonaws.com/SparkTestingXYZ/sample_linear_regression_data.txt")
Run Code Online (Sandbox Code Playgroud)依次输出附加的堆栈跟踪,但这是标头:
16/08/12 17:44:19 WARN DataSource: Error while looking for metadata directory.
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/usr/lib/spark/python/pyspark/sql/readwriter.py", line 147, in load
return self._df(self._jreader.load(path))
File "/usr/lib/spark/python/lib/py4j-0.10.1-src.zip/py4j/java_gateway.py", line 933, in __call__
File "/usr/lib/spark/python/pyspark/sql/utils.py", line 63, in deco
return f(*a, **kw)
File "/usr/lib/spark/python/lib/py4j-0.10.1-src.zip/py4j/protocol.py", line 312, in get_return_value py4j.protocol.Py4JJavaError:
An error occurred while calling o49.load.: java.io.IOException: com.amazon.ws.emr.hadoop.fs.shaded.com.amazonaws.services.s3.model.AmazonS3Excepti on:
Access Denied (Service: Amazon S3; Status Code: 403; Error Code: AccessDenied; Request ID: XXXXXXXXXXX), S3 Extended Request ID: OnI4tyk8Uun6JbD0iVnEi+kvjDfSK2U=
Run Code Online (Sandbox Code Playgroud)
从这里,我甚至在启动集群时尝试了以下方法
$ aws emr create-cluster --name "Spark cluster" --release-label emr-5.0.0 --applications Name=Spark --service-role EMR_DefaultRole --ec2-attributes InstanceProfile=EMR_EC2_DefaultRole,KeyName=AWS_Spark_Test --instance-type m3.xlarge --instance-count 3
Run Code Online (Sandbox Code Playgroud)
在这一点上,我不确定需要设置哪个权限,或者我错过了一个策略。如果有人能指出正确的方向,我将不胜感激。我认为如果可以解决这个问题,我可以拨回一些完全访问策略,但是现在我希望能够读取该文件。最后一件事,我确实在同一区域(美国标准/ us-east-1)启动了两个S3 / Cluster。谢谢,如果你到目前为止做到了!
| 归档时间: |
|
| 查看次数: |
2750 次 |
| 最近记录: |