Hbase mappers / снижение требований к библиотеке на узлах кластера

#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