2017-03-14 1 views
0

AWSS3 역할을 Spark에 허가 하시겠습니까?

내가 S3 스토리지 스파크에서 dataframe을 쓰기 위해 노력하고 있어요 내 클라우 데라에 pyspark2 (버전 2.0.0.cloudera1)를 사용하지만, 때문에 인증의 실패 :

pyspark.sql합니다. utils.IllegalArgumentException : 액세스 키 ID가 fs.s3n.awsAccessKeyId 및 fs.s3n.awsSecretAccessKey 속성이 각각 (각각)으로 설정되어 있어야합니다. '

내 pyspark 코드는 다음과 같습니다

utp.coalesce(1).write.format('com.databricks.spark.csv').save('s3n://my_bucket/tmr_xfers/test_output') 

우리는, 즉 'aws_iam_role = ARN : AWS : 스피 :: 123456789012 : 역할/RoleName'S3에 액세스하기위한 역할을 사용 - 개인이 아닌 AccessKeyIDs

내 csv가 개별 AccessKeyId 및 SecretAccessKey 대신 역할을 사용하여 S3에 기록되도록 Spark 코드를 변경해야합니까?

답변

1

나는이 문제를 가지고 있었고 그 대신에 s3a://을 사용하여 그 주위를 돌아 다녔다.

문제는 S3 파일 시스템에 대한 액세스를 담당하는 Hadoop 드라이버 코드입니다 (나는 hadoop-aws.jar라고 생각합니다). 외관상으로는 s3n '고유 한'의정서는 일하기 어려운 몇몇 오래된 jets3t 드라이버를 사용하며 모두가 두려워하는 것을 두려워합니다. 새로운 s3a 프로토콜 구현 직접 AWS SDK를 사용하고, 등 인스턴스 프로파일

들이이 문제를 WONTFIXed 이유를이 HADOOP-9680HADOOP-9384에서보세요을 지원합니다.

0

여기에 scala spark2의 해결책이 있습니다. 보안 문제에주의하십시오.

spark.sparkContext.hadoopConfiguration.set("fs.s3n.awsAccessKeyId", "xxxxx") 
spark.sparkContext.hadoopConfiguration.set("fs.s3n.awsSecretAccessKey", "xxxxxxxx") 
Df.write. 
    format("com.databricks.spark.csv").option("header", "true"). 
    save("s3n://my_bucket/tmr_xfers/test_output") 
관련 문제