从Spark会话读取文件时如何传递s3存储桶区域

时间:2019-05-17 04:10:45

标签: apache-spark

我的EMR位于EAST地区,我正在尝试使用spark会话读取西方地区的s3文件。 我看到连接超时问题。

通过指定--region us-west-2,我可以使用aws CLI命令访问同一文件。

您可以使用sparkSession或spark-shell帮助我实现相同的目的吗?从Spark会话读取文件时如何传递区域。

Caused by: com.amazon.ws.emr.hadoop.fs.shaded.org.apache.http.conn.ConnectTimeoutException: Connect to Xxxxxxxx-west2.s3.amazonaws.com:443 [xxxxxxx-lake-west2.s3.amazonaws.com/xxxx] failed: connect timed out
  at com.amazon.ws.emr.hadoop.fs.shaded.org.apache.http.impl.conn.DefaultHttpClientConnectionOperator.connect(DefaultHttpClientConnectionOperator.java:150)
  at com.amazon.ws.emr.hadoop.fs.shaded.org.apache.http.impl.conn.PoolingHttpClientConnectionManager.connect(PoolingHttpClientConnectionManager.java:353)
  at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
  at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
  at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
  at java.lang.reflect.Method.invoke(Method.java:498)
  at com.amazon.ws.emr.hadoop.fs.shaded.com.amazonaws.http.conn.ClientConnectionManagerFactory$Handler.invoke(ClientConnectionManagerFactory.java:76)

1 个答案:

答案 0 :(得分:0)

在运行--conf命令时,您可以使用spark-submit并设置s3区域的值,如下所示:

spark-submit --name "Test Job" \
    --conf "spark.hadoop.fs.s3a.endpoint=s3-us-west-2.amazonaws.com"
    <your_remaining_command_goes_here>

如果您想在Scala代码中以编程方式设置相同的代码,则可以使用

val sparkConf = new SparkConf()
sparkConf.setAppName("Test Job")
sparkConf.set("spark.hadoop.fs.s3a.endpoint", "s3-us-west-2.amazonaws.com")

val sparkSession = SparkSession.builder().config(sparkConf).getOrCreate()