【发布时间】:2018-08-21 02:42:30
【问题描述】:
我正在本地运行 Spark 流应用程序以从 S3 存储桶读取数据。
我正在使用 Hadoop-AWS jar 设置 S3 身份验证参数 - https://hadoop.apache.org/docs/r3.0.0/hadoop-aws/tools/hadoop-aws/index.html#Authenticating_with_S3
这是错误消息“禁止”:
org.apache.hadoop.fs.s3a.S3AFileSystem printAmazonServiceException - Caught an AmazonServiceException, which means your request made it to Amazon S3, but was rejected with an error response for some reason.
org.apache.hadoop.fs.s3a.S3AFileSystem printAmazonServiceException - Error Message: Status Code: 403, AWS Service: Amazon S3, AWS Request ID: #####, AWS Error Code: null, AWS Error Message: Forbidden
org.apache.hadoop.fs.s3a.S3AFileSystem printAmazonServiceException - HTTP Status Code: 403
org.apache.hadoop.fs.s3a.S3AFileSystem printAmazonServiceException - AWS Error Code: null
org.apache.hadoop.fs.s3a.S3AFileSystem printAmazonServiceException - Error Type: Client
org.apache.hadoop.fs.s3a.S3AFileSystem printAmazonServiceException - Request ID: #####
org.apache.hadoop.fs.s3a.S3AFileSystem printAmazonServiceException - Class Name: com.amazonaws.services.s3.model.AmazonS3Exception
从存储桶中读取的代码:
val sc: SparkContext = createSparkContext(scName)
val hadoopConf=sc.hadoopConfiguration
hadoopConf.set("fs.s3a.impl", "org.apache.hadoop.fs.s3a.S3AFileSystem")
val ssc = new StreamingContext(sc, Seconds(time))
val lines = ssc.textFileStream("s3a://foldername/subfolder/")
lines.print()
我已经在我的终端上设置了AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY, and AWS_SESSION_TOKEN 变量,但它仍然给我“禁止”。
我可以从终端访问 S3(使用 AWS 配置文件),所以我不确定为什么当我通过 Spark 时它不起作用。任何想法表示赞赏。
【问题讨论】:
-
您需要将这些变量导出到所有执行器,而不仅仅是您的本地机器
-
您是否位于任何禁运国家?
-
@cricket_007 我该怎么做?如果我在 hadoopConf 中设置这些变量还不够吗?
-
@MobinRanjbar 不,我不是
-
"fs.s3a.impl", "org.apache.hadoop.fs.s3a.S3AFileSystem"只设置文件系统。您还需要设置密钥。请参阅此处的代码。 stackoverflow.com/q/49230086/2308683 另见cloudera.com/documentation/enterprise/latest/topics/… 搜索“在运行时指定凭据”
标签: scala hadoop apache-spark amazon-s3 spark-streaming