#hadoop #hbase #classpath
#hadoop #hbase #путь к классу
Вопрос:
У меня есть распределенный кластер hadoop с hbase, работающий на его hdfs. Для создания задания map / reduce с использованием 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 предлагает лишь небольшую помощь:
Замените Hadoop в комплекте с HBase! Поскольку HBase зависит от Hadoop, он объединяет экземпляр Hadoop jar в свой каталог lib. Пакет jar предназначен ТОЛЬКО для использования в автономном режиме. В распределенном режиме очень важно, чтобы версия Hadoop, которая отсутствует в вашем кластере, соответствовала версии HBase. Замените jar-файл hadoop, найденный в каталоге библиотеки HBase, на jar-файл hadoop, который вы используете в своем кластере, чтобы избежать проблем с несоответствием версий. Убедитесь, что вы заменили jar в HBase везде в своем кластере. Проблемы с несоответствием версий Hadoop имеют различные проявления, но часто все выглядит так, как будто он зависает.
Я не могу найти, где в нем утверждается, какие библиотеки hbase вам нужно добавить к вычислительным узлам hadoop.
Ответ №1:
Я попытался ответить на этот вопрос экспериментально. Минимальный набор элементов, которые мне, похоже, нужны для его работы, таков:
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 hadoop и hbase в домашние каталоги пользователей «hadoop» и «hbase» соответственно. Редуктор представляет собой пустой TableReducer.
Кажется, что он работает — или, по крайней мере, у него нет исключений ClassNotFound, связанных с hbase.
Я не уверен, что это реальный набор… Я могу только сказать, что моему пустому TableReducer нужны именно эти вещи.
Комментарии:
1. Что я сделал, так это поместил их в /home/hadoop/share/hadoop/hbase/ как символические ссылки, а затем добавил весь этот каталог в путь к классу hadoop в hadoop-env.sh