【发布时间】:2019-08-03 04:55:37
【问题描述】:
我正在尝试使用完全兼容 s3 sdk/api 的本地对象存储运行简单的 Apache spark (Cloudera) 读取操作。但我似乎无法弄清楚如何让 Spark 了解我正在尝试访问 本地 S3 存储桶而不是远程 AWS/S3。
这是我尝试过的...
pyspark2 --conf spark.hadoop.hadoop.security.credential.provider.path=jceks://hdfs/user/myusername/awskeyfile.jceks --conf fs.s3a.endpoint=https://myenvironment.domain.com
df = spark.read.parquet("s3a://mybucket/path1/")
错误信息...
Caused by: com.amazonaws.SdkClientException: Unable to execute HTTP request: Connect to mybucket.s3.amazonaws.com:443 [mybucket.s3.amazonaws.com/12.345.678.90] failed: Connection refused (Connection refused)
我可以在命令行上毫无问题地列出本地存储桶内容,因此我知道我的访问/密钥正确,但我需要让 Spark 理解不才能联系 aws尝试解析存储桶 url。
谢谢。
更新/解决:
该问题的修复是在 maven 坐标处缺少先决条件 jar:org.apache.hadoop:hadoop-aws:2.6.0
所以最终的 pyspark 调用看起来像:
pyspark2 --conf spark.hadoop.hadoop.security.credential.provider.path=jceks://hdfs/user/myusername/awskeyfile.jceks --conf fs.s3a.endpoint=https://myenvironment.domain.com --jars hadoop-aws-2.6.0.jar
df = spark.read.parquet("s3a://mybucket/path1/")
【问题讨论】:
-
您需要将 logging.level.com.amazonaws 的日志级别设置为 DEBUG 以查看发生了什么。这个错误可能意味着很多东西......
标签: apache-spark object-storage