从 S3 读取会引发 NoSuchMethodError,特别是 SSLConnectionSocketFactory

Posted

技术标签:

【中文标题】从 S3 读取会引发 NoSuchMethodError,特别是 SSLConnectionSocketFactory【英文标题】:Reading from S3 Throws NoSuchMethodError, specifically, SSLConnectionSocketFactory 【发布时间】:2016-10-11 21:06:53 【问题描述】:

我正在尝试使用 spark-shell 从 S3 读取 ORC 文件,遵循以下指南:

Read ORC files directly from Spark shell

我已将路径定义为s3a://...

不幸的是,这会导致抛出以下异常:

java.lang.NoSuchMethodError: org.apache.http.conn.ssl.SSLConnectionSocketFactory.<init>(Ljavax/net/ssl/SSLContext;Ljavax/net/ssl/HostnameVerifier;)V
    at com.amazonaws.http.conn.ssl.SdkTLSSocketFactory.<init>(SdkTLSSocketFactory.java:56)
    ...

我已经通过以下命令在spark-shell中导入了jar文件,试图纠正缺失的方法,但无济于事。

spark-shell --jars /home/admin/Downloads/httpclient4.5.2.jar, /home/admin/Downloads/httpclient-4.5.2.jar, /home/admin/Downloads/hadoop-common-2.6.0.jar, /home/admin/Downloads/hadoop-aws-2.6.0.jar, /home/admin/Downloads/aws-java-sdk-1.11.41.jar

我怀疑 spark 有自己的 SSLConnectionSocketFactory 副本,因为即使排除了 --jars 选项,我也能够导入 SSLConnectionSocketFactory

除了创建一个 maven 项目(这是另一个令人头疼的问题,因为我遇到了问题)之外,我是否可以解决 Spark 声称无法初始化 SSLConnectionSocketFactory 的这个错误?

【问题讨论】:

【参考方案1】:

我注意到某些 Spark 版本与某些 AWS 版本不兼容。例如,对于 Spark 1.6 和 hadoop 2.6,我必须使用 AWS 1.10.77(我遇到了同样的问题)。

【讨论】:

不幸的是,我无法让它工作。 @carlos_technogi,您如何确定哪个版本的 Spark 与哪个版本的 AWS 配套? 我花了很多时间,首先检查哪个版本的 httpclient 和 commons-httpclient 使用该参数具有该方法,然后尝试找到适用于这些版本的 hadoop 和 aws 版本。它有效,但它是一个钢琴......我实际上最终使用 Kinesis 而不是使用 Hadoop 的 S3 读取文件,发现它的速度要快得多......

以上是关于从 S3 读取会引发 NoSuchMethodError,特别是 SSLConnectionSocketFactory的主要内容,如果未能解决你的问题,请参考以下文章

使用 fetch 方法从 AWS S3 下载文件会引发 CORS 错误

从 Android USB 附件读取会引发 ENODEV IOException

如果 S3 前缀不存在,Redshift COPY 命令会引发错误

将文件从私有 S3 存储桶读取到 pandas 数据帧

Amazon S3 在创建对象时会引发 cURL 错误

从s3读取json文件以使用glueContext.read.json粘合pyspark会给出错误的结果