我有一个分布式hadoop集群,其hdfs上运行着hbase。要使用hbase构建映射/减少作业,我包括以下依赖项:
<dependencies>
<dependency>
<groupId>org.apache.hadoop</groupId>
<artifactId>hadoop-core</artifactId>
<version>1.2.1</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.apache.hbase</groupId>
<artifactId>hbase-client</artifactId>
<version>1.2.3</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.apache.hbase</groupId>
<artifactId>hbase-server</artifactId>
<version>1.2.3</version>
<scope>provided</scope>
</dependency>
</dependencies>我正在努力弄清楚如何准确地部署所有这些库。hadoop应该只在其类路径中包含$HBASE_HOME/lib/*吗?存在大量的重叠和版本冲突。似乎我只需要一些子集,但hbase文档只提供了一些帮助:
替换与HBase捆绑的Hadoop!因为HBase依赖于Hadoop,所以它将Hadoop的一个实例捆绑在它的lib目录下。捆绑的jar只在独立模式下使用。在分布式模式下,在集群中的Hadoop版本必须与HBase下的版本匹配。将在HBase库目录中找到的hadoop替换为您正在集群上运行的hadoop,以避免版本不匹配问题。确保您在集群中的HBase everywhere中替换了jar。Hadoop版本不匹配问题有不同的表现形式,但通常看起来都像是挂起的。
我找不到它能肯定地告诉您需要向hadoop的计算节点添加哪些hbase库。
发布于 2016-10-07 19:09:24
我试着从实验上回答这个问题。我似乎需要使其发挥作用的一组最起码的项目如下:
hbase-client-1.2.3.jar -> ../../../../hbase/lib/hbase-client-1.2.3.jar
hbase-common-1.2.3.jar -> ../../../../hbase/lib/hbase-common-1.2.3.jar
hbase-hadoop2-compat-1.2.3.jar -> ../../../../hbase/lib/hbase-hadoop2-compat-1.2.3.jar
hbase-hadoop-compat-1.2.3.jar -> ../../../../hbase/lib/hbase-hadoop-compat-1.2.3.jar
hbase-prefix-tree-1.2.3.jar -> ../../../../hbase/lib/hbase-prefix-tree-1.2.3.jar
base-protocol-1.2.3.jar -> ../../../../hbase/lib/hbase-protocol-1.2.3.jar
hbase-server-1.2.3.jar -> ../../../../hbase/lib/hbase-server-1.2.3.jar
metrics-core-2.2.0.jar -> ../../../../hbase/lib/metrics-core-2.2.0.jar稍微解释一下,我的hadoop安装在/home/hadoop中,我的hbase安装在/home/hbase中。它们都是通过将apache和hbase tarball分别解压缩到" hadoop“和"hbase”用户的主目录来“安装”的。减速器是一个空的TableReducer。
它似乎在运行--或者至少它没有任何与hbase相关的ClassNotFound异常。
我不确定这是不是真的..。我只能说我的空TableReducer确实需要那些东西。
https://stackoverflow.com/questions/39921938
复制相似问题