连接到 S3 的 Spark 流式传输会导致套接字超时

Spark streaming connecting to S3 gives socket timeout

我正在尝试 运行 我本地的 Spark 流式应用程序连接到 S3 存储桶并 运行 连接到 SocketTimeoutException。这是从存储桶中读取的代码:

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()

这是我得到的错误:

com.amazonaws.http.AmazonHttpClient executeHelper - Unable to execute HTTP request: connect timed out
java.net.SocketTimeoutException: connect timed out
at java.net.PlainSocketImpl.socketConnect(Native Method)

我认为这可能是由于代理问题,所以我 运行 我的 spark-submit 使用代理选项,如下所示:

    spark-submit --conf "spark.driver.extraJavaOptions=
-Dhttps.proxyHost=proxyserver.com -Dhttps.proxyPort=9000" 
--class application.jar s3module 5 5 SampleApp

那仍然给了我同样的错误。也许我没有正确设置代理?有没有办法在 SparkContext 的 conf 中的代码中设置它?

有代理设置的特定选项,covered in the docs

<property>
  <name>fs.s3a.proxy.host</name>
  <description>Hostname of the (optional) proxy server for S3 connections.</description>
</property>

<property>
  <name>fs.s3a.proxy.port</name>
  <description>Proxy server port. If this property is not set
    but fs.s3a.proxy.host is, port 80 or 443 is assumed (consistent with
    the value of fs.s3a.connection.ssl.enabled).</description>
</property>

可以在带有 spark.hadoop 前缀的 spark 默认值中设置

spark.hadoop.fs.s3a.proxy.host=myproxy
spark.hadoop.fs.s3a.proxy.port-8080