当尝试使用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 …Run Code Online (Sandbox Code Playgroud)