hadoop aws 版本兼容性
Posted
技术标签:
【中文标题】hadoop aws 版本兼容性【英文标题】:hadoop aws versions compatibility 【发布时间】:2018-03-26 21:22:50 【问题描述】:关于 aws java sdk、hadoop、hadoop-aws bundle、hive、spark 之间兼容哪些版本集有任何参考吗?
例如,我知道 Spark 与 Hive 2.1.1 以上的 Hive 版本不兼容
【问题讨论】:
【参考方案1】:您不能从构建 hadoop-aws 的内容中插入更高版本的 AWS 开发工具包,并期望 s3a 连接器能够正常工作。曾经。这在S3A troubleshooting docs
中已经写得很清楚了无论您遇到什么问题,更改 AWS 开发工具包版本都不会解决问题,只会更改您看到的堆栈跟踪。
考虑到 AWS 团队推出新 SDK 的速度,这似乎令人沮丧,但您必须了解 (a) API 经常在版本之间不兼容地更改(如您所见),以及 (b)发布引入/移动了最终导致问题的错误。
以下是 AWS 开发工具包更新时中断的 3.x 时间线。
移动 1.11.86 和 some tests hang under load。 修复:移动到 1.11.134 导致 logs are full of AWS telling us off for deliberatly calling abort() on a read。 修复:移动到 1.11.199 导致 logs full of stack traces。 修复:移至 1.11.271 和 shaded JAR pulls in netty unshaded。AWS 开发工具包 JAR 的每次升级都会在某处引起问题。有时会编辑代码并重新编译,最常见的情况是:日志充满误报消息、依赖问题、线程怪癖等。这些事情可能需要一段时间才能浮出水面。
当您获得一个 hadoop 版本时,您所看到的不仅仅是一个针对它进行编译的 aws-sdk JAR,您还获得了一个 hadoop-aws JAR,其中包含针对该版本引入和识别的任何问题的变通方法和修复在 hadoop 发布前至少 4 周的测试。
这就是为什么,不,您不应该更改 JAR,除非您计划对 s3a 客户端代码进行完整的端到端重新测试,包括负载测试。我们鼓励您这样做,hadoop 项目总是欢迎对我们的预发布代码进行更多测试,并准备好使用 Hadoop 3.1 二进制文件。但是尝试通过更改 JAR 来自己做呢?可悲的是,这是一种孤立的疼痛练习。
【讨论】:
假设我想使用 Spark 2.3.0(读/写到 S3)、Hive 2.1.1(从 S3 读取的外部表)没有明确的矩阵我可以使用 Hadoop vA、AWS SDK vB、hadoop-aws vC 或者我可以使用 Hadoop vD、AWS SDK vE、hadoop-aws vF 吗? 顺便说一句,你知道为什么mvnrepository.com/artifact/com.amazonaws/aws-java-sdk/1.7.5 是11mb 而mvnrepository.com/artifact/com.amazonaws/aws-java-sdk/1.11.303 只有30kb 没有类吗? AWS 从一个包含所有东西的 JAR 变成了不久前的“一组扩展的相互依赖的库”。 Hadoop 3 已经接受了 aws-sdk-bundle,它将所有东西都集中在一个地方以及它需要的阴影依赖项(尤其是 jackson)。 50MB,但始终为 50MB。 关于版本,hadoop-* JAR 需要保持一致。然后您选择的 AWS SDK 来自 hadoop-aws 版本。 Hadoop-common vA => hadoop-aws vA => 匹配 aws-sdk 版本。好消息:您可以选择使用 FWIW 的 spark 版本,我喜欢 ASF 2.8.x 发布链作为稳定的功能; 2.7 对 S3 表现不佳。以上是关于hadoop aws 版本兼容性的主要内容,如果未能解决你的问题,请参考以下文章
Hadoop-3.0.0 与旧版本 Hive、Pig、Sqoop 和 Spark 的兼容性如何
哪个版本的 httpclient 与 Amazon SDK v 1.11.5 兼容?