Поделиться через


Руководство. Использование Apache HBase в Azure HDInsight

В этом учебнике описано, как создавать кластеры Apache HBase в HDInsight, создавать таблицы HBase и запрашивать таблицы с помощью Apache Hive. Общие сведения об HBase см. в статье What is Apache HBase in Azure HDInsight (Что такое Apache HBase в HDInsight).

В этом руководстве описано следующее:

  • Создание кластера Apache HBase
  • Создание таблиц HBase и вставка данных
  • Использование Apache Hive для создания запросов к Apache HBase
  • Использование API REST для HBase
  • Проверка состояния кластера

Необходимые компоненты

  • Клиент SSH. Дополнительные сведения см. в руководстве по подключению к HDInsight (Apache Hadoop) с помощью SSH.

  • Bash. В примерах, приведенных в этой статье, для команд curl используется оболочка Bash в Windows 10. Шаги установки см. в статье Windows Subsystem for Linux Installation Guide for Windows 10 (Подсистема Windows для Linux в Windows 10). Другие оболочки Unix также работают. Примеры curl с некоторыми небольшими изменениями могут работать в командной строке Windows. Либо можете использовать командлет Windows PowerShell Invoke-RestMethod.

Создание кластера Apache HBase

Следующая процедура использует шаблон Azure Resource Manager для создания кластера HBase. Шаблон также позволяет создать зависимую учетную запись службы хранилища Azure по умолчанию. Описание параметров, используемых в процедуре, и других методов создания кластеров см. в статье Создание кластеров Hadoop под управлением Linux в HDInsight.

  1. Выберите следующее изображение, чтобы открыть шаблон на портале Azure. Шаблон расположен в шаблонах быстрого запуска Azure.

    Кнопка

  2. В диалоговом окне Настраиваемое развертывание укажите следующие значения:

    Свойство Описание
    Подписка Выберите подписку Azure, которая используется для создания этого кластера.
    Группа ресурсов Создайте группу управления ресурсами Azure или выберите существующую.
    Расположение Укажите расположение группы ресурсов.
    ClusterName Укажите имя кластера HBase.
    Имя для входа и пароль для кластера Имя входа по умолчанию — admin.
    Имя пользователя SSH и пароль Имя пользователя по умолчанию — sshuser.

    Остальные параметры являются необязательными.

    У каждого кластера есть зависимость учетной записи хранения для службы хранилища Azure. После удаления кластера данные остаются в учетной записи хранения. Имя учетной записи хранения в кластере — это имя кластера, к которому добавлено слово store. Это прописано в разделе переменных в коде шаблона.

  3. Установите флажок Я принимаю указанные выше условия и выберите Приобрести. Процесс создания кластера занимает около 20 минут.

После удаления кластера HBase можно создать другой кластер HBase с помощью того же контейнера BLOB-объектов по умолчанию. Новый кластер получит таблицы HBase, созданные в исходном кластере. Перед удалением кластера рекомендуется отключить таблицы HBase, чтобы избежать несогласованности.

Создание таблиц и вставка данных

Для подключения к кластерам HBase можно использовать протокол SSH, а для создания таблиц HBase, вставки данных и создания запросов к данным — Apache HBase Shell.

Для большинства пользователей данные отображаются в табличном формате:

Табличные данные HDInsight Apache HBase.

В HBase (реализация Cloud BigTable) те же данные выглядят следующим образом:

Данные BigTable в HDInsight Apache HBase.

Использование оболочки HBase

  1. С помощью команды ssh подключитесь к кластеру HBase. Измените следующую команду, заменив CLUSTERNAME имя кластера, а затем введите команду:

    ssh sshuser@CLUSTERNAME-ssh.azurehdinsight.net
    
  2. С помощью команды hbase shell запустите интерактивную оболочку HBase. В строку SSH-подключения введите следующую команду:

    hbase shell
    
  3. Используйте create команду для создания таблицы HBase с двумя семействами столбцов. В именах таблиц и столбцов учитывается регистр. Введите следующую команду:

    create 'Contacts', 'Personal', 'Office'
    
  4. С помощью команды list выведите список всех таблиц HBase. Введите следующую команду:

    list
    
  5. С помощью команды put вставьте значения в указанный столбец строки в определенной таблице. Введите следующие команды:

    put 'Contacts', '1000', 'Personal:Name', 'John Dole'
    put 'Contacts', '1000', 'Personal:Phone', '1-425-000-0001'
    put 'Contacts', '1000', 'Office:Phone', '1-425-000-0002'
    put 'Contacts', '1000', 'Office:Address', '1111 San Gabriel Dr.'
    
  6. С помощью команды scan выполните сканирование данных таблицы Contacts и верните их. Введите следующую команду:

    scan 'Contacts'
    

    Оболочка HDInsight Apache Hadoop HBase.

  7. С помощью команды get получите содержимое строки. Введите следующую команду:

    get 'Contacts', '1000'
    

    Вы увидите те же результаты, что и при использовании команды scan, так как в таблице есть только одна строка.

    Дополнительные сведения о схеме таблицы HBase см. в этой статье. Дополнительные команды HBase см. в справочнике по Apache HBase.

  8. С помощью команды exit остановите интерактивную оболочку HBase. Введите следующую команду:

    exit
    

Для массовой загрузки данных в таблицу контактов HBase

HBase включает несколько методов загрузки данных в таблицы. Для получения дополнительных сведений обратитесь к разделу Массовая загрузка.

Пример файла данных находится в общедоступном контейнере больших двоичных объектов wasb://hbasecontacts@hditutorialdata.blob.core.windows.net/contacts.txt. Файл данных содержит:

8396 Calvin Raji 230-555-0191 230-555-0191 5415 San Gabriel Dr.

16600 Karen Wu 646-555-0113 230-555-0192 9265 La Paz

4324 Karl Xie 508-555-0163 230-555-0193 4912 La Vuelta

16891 Jonn Jackson 674-555-0110 230-555-0194 40 Ellis St.

3273 Miguel Miller 397-555-0155 230-555-0195 6696 Anchor Drive

3588 Osa Agbonile 592-555-0152 230-555-0196 1873 Lion Circle

10272 Julia Lee 870-555-0110 230-555-0197 3148 Rose Street

4868 Jose Hayes 599-555-0171 230-555-0198 793 Crawford Street

4761 Caleb Alexander 670-555-0141 230-555-0199 4775 Kentucky Dr.

16443 Terry Chander 998-555-0171 230-555-0200 771 Northridge Drive

При желании вы можете создать текстовый файл и отправить его в свою учетную запись хранения. Дополнительные сведения см. в статье Upload data for Apache Hadoop jobs in HDInsight (Отправка данных для заданий Apache Hadoop в HDInsight).

Эта процедура использует таблицу Contacts HBase, созданную в последней процедуре.

  1. В открытом сеансе SSH-подключения выполните следующую команду, чтобы преобразовать файл данных в StoreFiles и сохранить по относительному пути, указанному в Dimporttsv.bulk.output.

    hbase org.apache.hadoop.hbase.mapreduce.ImportTsv -Dimporttsv.columns="HBASE_ROW_KEY,Personal:Name,Personal:Phone,Office:Phone,Office:Address" -Dimporttsv.bulk.output="/example/data/storeDataFileOutput" Contacts wasb://hbasecontacts@hditutorialdata.blob.core.windows.net/contacts.txt
    
  2. Для передачи данных из /example/data/storeDataFileOutput в таблицу HBase выполните следующую команду:

    hbase org.apache.hadoop.hbase.mapreduce.LoadIncrementalHFiles /example/data/storeDataFileOutput Contacts
    
  3. Откройте оболочку HBase и выполните команду scan для получения списка содержимого таблицы.

Использование Apache Hive для создания запросов к Apache HBase

Вы можете запрашивать данные в таблицах HBase с помощью Apache Hive. В этом разделе будет создана таблица Hive, которая сопоставляется с таблицей HBase и использует ее для формирования запросов к данным в таблице HBase.

  1. В открытом сеансе SSH-подключения используйте следующую команду, чтобы запустить Beeline.

    beeline -u 'jdbc:hive2://localhost:10001/;transportMode=http' -n admin
    

    Дополнительные сведения о Beeline см. в статье Использование Hive с Hadoop в HDInsight с применением Beeline.

  2. Выполните приведенный ниже скрипт HiveQL, чтобы создать таблицу Hive, сопоставляемую с таблицей HBase. Перед выполнением этой инструкции убедитесь, что вы создали упомянутый в этой статье пример таблицы с помощью оболочки HBase.

    CREATE EXTERNAL TABLE hbasecontacts(rowkey STRING, name STRING, homephone STRING, officephone STRING, officeaddress STRING)
    STORED BY 'org.apache.hadoop.hive.hbase.HBaseStorageHandler'
    WITH SERDEPROPERTIES ('hbase.columns.mapping' = ':key,Personal:Name,Personal:Phone,Office:Phone,Office:Address')
    TBLPROPERTIES ('hbase.table.name' = 'Contacts');
    
  3. Запустите приведенный ниже скрипт HiveQL, чтобы запросить данные в таблице HBase.

    SELECT count(rowkey) AS rk_count FROM hbasecontacts;
    
  4. Чтобы выйти из Beeline, используйте инструкцию !exit.

  5. Чтобы выйти из сеанса SSH-подключения, используйте exit.

Разделение кластеров Hive и HBase

Запрос Hive для доступа к данным HBase не следует выполнять из кластера HBase. Для запроса данных HBase можно использовать любой кластер, поставляемый с Hive (включая Spark, Hadoop, HBase или Interactive Query), при условии что выполнены следующие шаги:

  1. Оба кластера должны быть подключены к одной виртуальной сети и подсети.
  2. Скопируйте /usr/hdp/$(hdp-select --version)/hbase/conf/hbase-site.xml головные узлы кластера HBase в головной кластер Hive и рабочие узлы.

Безопасные кластеры

Данные HBase можно также запрашивать из Hive с помощью HBase с поддержкой протокола ESP:

  1. При использовании шаблона с несколькими кластерами оба кластера должны включать протокол ESP.
  2. Чтобы разрешить Hive запрашивать данные HBase, убедитесь, что пользователю hive предоставлены разрешения на доступ к данным HBase через подключаемый модуль HBase Apache Ranger.
  3. При использовании отдельных кластеров с поддержкой ESP содержимое головного /etc/hosts кластера HBase должно быть добавлено к /etc/hosts головным узлам кластера Hive и рабочим узлам.

Примечание.

После масштабирования кластеров необходимо повторно добавить /etc/hosts.

Использование REST API HBase с Curl

REST API HBase защищен с помощью базовой аутентификации. Чтобы обеспечить безопасную отправку учетных данных на сервер, все запросы следует отправлять с помощью протокола HTTPS.

  1. Чтобы включить REST API HBase в кластере HDInsight, добавьте следующий пользовательский скрипт запуска в раздел Действие скрипта. Сценарий запуска можно добавить во время или после создания кластера. Для пункта Тип узла задайте значение Серверы региона, чтобы сценарий выполнялся только на серверах регионов HBase. Скрипт запускает прокси-сервер REST HBase на порте 8090 на серверах регионов.

    #! /bin/bash
    
    THIS_MACHINE=`hostname`
    
    if [[ $THIS_MACHINE != wn* ]]
    then
        printf 'Script to be executed only on worker nodes'
        exit 0
    fi
    
    RESULT=`pgrep -f RESTServer`
    if [[ -z $RESULT ]]
    then
        echo "Applying mitigation; starting REST Server"
        sudo python /usr/lib/python2.7/dist-packages/hdinsight_hbrest/HbaseRestAgent.py
    else
        echo "REST server already running"
        exit 0
    fi
    
  2. Задайте переменную среды для простоты использования. Измените следующие команды, заменив MYPASSWORD пароль для входа в кластер. Замените MYCLUSTERNAME именем кластера HBase. Затем введите указанные ниже команды.

    export PASSWORD='MYPASSWORD'
    export CLUSTER_NAME=MYCLUSTERNAME
    
  3. Для получения списка имеющихся таблиц HBase используйте следующую команду:

    curl -u admin:$PASSWORD \
    -G https://$CLUSTER_NAME.azurehdinsight.net/hbaserest/
    
  4. Для создания новой таблицы HBase с двумя семействами столбцов используйте следующую команду:

    curl -u admin:$PASSWORD \
    -X PUT "https://$CLUSTER_NAME.azurehdinsight.net/hbaserest/Contacts1/schema" \
    -H "Accept: application/json" \
    -H "Content-Type: application/json" \
    -d "{\"@name\":\"Contact1\",\"ColumnSchema\":[{\"name\":\"Personal\"},{\"name\":\"Office\"}]}" \
    -v
    

    Схема предоставляется в формате JSON.

  5. Чтобы вставить какие-либо данные, используйте следующую команду:

    curl -u admin:$PASSWORD \
    -X PUT "https://$CLUSTER_NAME.azurehdinsight.net/hbaserest/Contacts1/false-row-key" \
    -H "Accept: application/json" \
    -H "Content-Type: application/json" \
    -d "{\"Row\":[{\"key\":\"MTAwMA==\",\"Cell\": [{\"column\":\"UGVyc29uYWw6TmFtZQ==\", \"$\":\"Sm9obiBEb2xl\"}]}]}" \
    -v
    

    Для кодировки значений в параметре -d используется Base64. Ознакомьтесь со следующим примером:

    • MTAwMA==: 1000;

    • UGVyc29uYWw6TmFtZQ==: Personal: Name

    • Sm9obiBEb2xl: John Dole.

      false-row-key позволяет вставить несколько (пакетных) значений.

  6. Для получения строки используйте следующую команду:

    curl -u admin:$PASSWORD \
    GET "https://$CLUSTER_NAME.azurehdinsight.net/hbaserest/Contacts1/1000" \
    -H "Accept: application/json" \
    -v
    

Примечание.

Проверка конечной точки кластера пока не поддерживается.

Дополнительные сведения см. в справочнике по Apache HBase.

Примечание.

Thrift не поддерживается HBase в HDInsight.

При использовании Curl или любого другого взаимодействия REST с WebHCat необходимо пройти проверку подлинности запросов, указав имя пользователя и пароль администратора кластера HDInsight. Имя кластера необходимо также использовать в составе универсального кода ресурса (URI), используемого для отправки запросов на сервер.

curl -u <UserName>:<Password> \

-G https://<ClusterName>.azurehdinsight.net/templeton/v1/status

Вы должны получить ответ, аналогичный приведенному ниже.

{"status":"ok","version":"v1"}

Проверка состояния кластера

HBase на HDInsight поставляется с веб-интерфейсом для наблюдения за кластерами. С помощью веб-интерфейса вы можете запросить статистику или сведения о регионах.

Доступ к основному интерфейсу HBase

  1. Войдите в веб-интерфейс Ambari по адресу https://CLUSTERNAME.azurehdinsight.net, где CLUSTERNAME — это имя кластера HBase.

  2. В меню слева выберите HBase.

  3. В верхней части страницы выберите Быстрые ссылки, выберите ссылку на активный узел Zookeeper, а затем щелкните HBase Master UI (Основной интерфейс HBase). Интерфейс откроется в новой вкладке браузера.

    Пользовательский интерфейс HDInsight Apache HBase HMaster.

    Основной интерфейс HBase состоит из таких разделов:

    • региональные серверы;
    • главные узлы резервного копирования;
    • В таблицах
    • задачи
    • атрибуты ПО.

Воссоздание кластера

После удаления кластера HBase можно создать другой кластер HBase с помощью того же контейнера BLOB-объектов по умолчанию. Новый кластер получит таблицы HBase, созданные в исходном кластере. Но чтобы избежать несогласованности, перед удалением кластера рекомендуется отключить таблицы HBase.

Вы можете использовать команду HBase disable 'Contacts'.

Очистка ресурсов

Если вы не собираетесь использовать это приложение в дальнейшем, удалите созданный кластер HBase, сделав следующее:

  1. Войдите на портал Azure.
  2. В поле Поиск в верхней части страницы введите HDInsight.
  3. Выберите Кластеры HDInsight в разделе Службы.
  4. В списке кластеров HDInsight, который отобразится, щелкните ... рядом с кластером, созданным при работе с этим руководством.
  5. Нажмите кнопку Удалить. Нажмите кнопку Да.

Следующие шаги

Из этого руководства вы узнали, как создать кластер Apache HBase. Вы также научились создавать таблицы и просматривать данные в них, используя оболочку HBase. Кроме того вы узнали, как использовать Hive для запроса данных из таблиц HBase И как использовать REST API HBase C# для создания таблицы HBase и получения данных из таблицы. Дополнительные сведения см. на следующих ресурсах: