我的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)
答案 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()