我正在为Hadoop创建一个应用程序,该应用程序应该在不同供应商提供的所有Hadoop发行版上运行,例如:Cloudera,MapR,Hortonworks,Pivotal等。我的应用程序将部署在WebLogic,JBoss等应用程序服务器上,也可以部署在tomcat上。 所以我的问题是: - 假设所有这些供应商的某些版本使用相同的底层Hadoop版本说Hadoop 2.0,那么我应该使用这些供应商提供的JAR文件还是使用Apache hadoop提供的JAR文件?
我的意思是JAR文件与Apache hadoop具有相同的类,但它们的名称如 blablaCDH5.2blabla.jar
,所以我应该使用这个还是来自Apache的那个?所以我可以为Hadoop 2.0构建一个版本并将其用于所有供应商。可以做到这一点,或者我必须为所有供应商发行版构建我的应用程序的不同风格。
提前致谢
答案 0 :(得分:2)
根据您的版本控制和构建系统,可能会略有不同的一种方法是使用来自不同发行版的依赖项来创建单独的构建脚本。
如果测试用例对于给定的发行版失败,你可以为该发行版提供一个分支/分支,或者可能不太理想,具有特定的构建,为该发行版做一些预构建魔术。
通过这种方式,您应该能够维护一致的主干,同时能够跟踪和处理供应商/版本特定分发中出现的问题。对于git和大多数构建系统(例如gradle,maven或ant),这肯定是可能的。
答案 1 :(得分:2)
您可以创建一个允许您的应用程序与任何hadoop发行版一起运行的填充程序层。由于大多数发行版具有不同的hadoop版本,因此很难处理这个问题。所以大多数供应商现在正在创建填充程序层可以使用任何hadoop发布。现在已经在Pentaho,hive,gora等许多应用程序中实现了.him层。
答案 2 :(得分:1)
这取决于你正在线程的hadoop API的深度。
如果您的应用程序仅将作业提交到群集,只要您坚持使用一个特定版本,您就可以使用vanilla库。如果您正在使用高级内容并使用hadoop内部,则可能需要包含特定于供应商的内容。
答案 3 :(得分:0)
Dennis你可以使用Apache Hadoop提供的jar来构建你的应用程序,因为它们都是Apache hadoop的修改形式。这些所有发行版具有相同的基线结构,因此使用Apache hadoop提供的jar不会产生任何问题。 事实上,我正在为你提供他们正在使用Apache Hadoop本身提供的jar的cloudera的链接。This the required link.