【问题标题】:What is a good way to code Java for multiple versions of Hadoop?为多个版本的 Hadoop 编写 Java 代码的好方法是什么?
【发布时间】:2015-07-24 15:08:24
【问题描述】:

我正在为多个 Hadoop 集群编写 Java 代码,其中一个是 HDP 2.2,另一个是 CDH4。我编写的代码需要在两者上都可以运行。这导致需要多个 Hadoop 依赖项的不同版本,这些依赖项不向后兼容。例如,HDP 版本需要使用 Protobuf for Hbase 进行自定义过滤器,因为它比 0.96 更新,而 CDH4 使用 Hbase 0.94。我已将我的代码的所有 Hadoop 依赖项减少到一个 API 中的几个包,并已将 Maven 配置文件用于依赖于它的代码,但我想尽可能利用 DRY 原则,以便我编写的代码用于开发每次我进行更改时,不必对那个 API 进行精心挑选或从 HDP 复制到 CDH4。

我目前在多个 git 分支中都有这段代码,但这很难维护。

我意识到 Java 旨在编写一次,随处运行,但这是其中一种似乎并不容易解决的情况。我可以想到一些潜在的选择,其中一些可能只会将无法重复的代码重构到单独的位置:

  • 使用 Maven 子模块并根据我使用 Maven 配置文件构建的 Hadoop 版本选择一个子模块。
  • 将多个 git 分支中的代码重构为同一项目中的单独 Java 包,并使用 Maven Profiles 和 Maven 编译器排除选项根据 Hadoop 版本选择包。
  • 我可能不知道有更好的解决方案。

【问题讨论】:

    标签: java maven hadoop protocol-buffers dry


    【解决方案1】:

    我会将项目组织成至少 3 个子模块,例如

    • 项目
      • 常见
      • v2stuff
      • v4stuff

    根据您交付项目的方式,您可能会有更多子模块来组装每个版本的 hadoop 的最终工件。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-05-26
      • 1970-01-01
      • 2020-01-29
      • 1970-01-01
      • 1970-01-01
      • 2010-12-08
      • 2010-11-22
      相关资源
      最近更新 更多