从 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