Руководство. Использование 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.
Выберите следующее изображение, чтобы открыть шаблон на портале Azure. Шаблон находится на странице Шаблоны быстрого запуска Azure.
В диалоговом окне Настраиваемое развертывание укажите следующие значения:
Свойство Описание Подписка Выберите подписку Azure, которая используется для создания этого кластера. Группа ресурсов Создайте группу управления ресурсами Azure или выберите существующую. Расположение Укажите расположение группы ресурсов. ClusterName Укажите имя кластера HBase. Имя для входа и пароль для кластера Имя входа по умолчанию — admin
.Имя пользователя SSH и пароль Имя пользователя по умолчанию — sshuser
.Остальные параметры являются необязательными.
У каждого кластера есть зависимость учетной записи хранения для службы хранилища Azure. После удаления кластера данные остаются в учетной записи хранения. Имя учетной записи хранения в кластере — это имя кластера, к которому добавлено слово store. Это прописано в разделе переменных в коде шаблона.
Установите флажок Я принимаю указанные выше условия и выберите Приобрести. Процесс создания кластера занимает около 20 минут.
После удаления кластера HBase можно создать другой кластер HBase, использовав тот же контейнер BLOB-объектов по умолчанию. Новый кластер получит таблицы HBase, созданные в исходном кластере. Перед удалением кластера рекомендуется отключить таблицы HBase, чтобы избежать несогласованности.
Создание таблиц и вставка данных
Для подключения к кластерам HBase можно использовать протокол SSH, а для создания таблиц HBase, вставки данных и создания запросов к данным — Apache HBase Shell.
Для большинства пользователей данные отображаются в табличном формате:
В HBase (реализация Cloud BigTable) те же данные выглядят следующим образом:
Использование оболочки HBase
С помощью команды
ssh
подключитесь к кластеру HBase. Измените приведенную ниже команду, заменивCLUSTERNAME
именем своего кластера, а затем введите команду:ssh sshuser@CLUSTERNAME-ssh.azurehdinsight.net
С помощью команды
hbase shell
запустите интерактивную оболочку HBase. В строку SSH-подключения введите следующую команду:hbase shell
С помощью команды
create
создайте таблицу HBase с двумя семействами столбцов. В именах таблиц и столбцов учитывается регистр. Введите следующую команду:create 'Contacts', 'Personal', 'Office'
С помощью команды
list
выведите список всех таблиц HBase. Введите следующую команду:list
С помощью команды
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.'
С помощью команды
scan
выполните сканирование данных таблицыContacts
и верните их. Введите следующую команду:scan 'Contacts'
С помощью команды
get
получите содержимое строки. Введите следующую команду:get 'Contacts', '1000'
Вы увидите те же результаты, что и при использовании команды
scan
, так как в таблице есть только одна строка.Дополнительные сведения о схеме таблицы HBase см. в этой статье. Дополнительные команды HBase см. в справочнике по Apache HBase.
С помощью команды
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, созданную в последней процедуре.
В открытом сеансе 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
Для передачи данных из
/example/data/storeDataFileOutput
в таблицу HBase выполните следующую команду:hbase org.apache.hadoop.hbase.mapreduce.LoadIncrementalHFiles /example/data/storeDataFileOutput Contacts
Откройте оболочку HBase и выполните команду
scan
для получения списка содержимого таблицы.
Использование Apache Hive для создания запросов к Apache HBase
Вы можете запрашивать данные в таблицах HBase с помощью Apache Hive. В этом разделе будет создана таблица Hive, которая сопоставляется с таблицей HBase и использует ее для формирования запросов к данным в таблице HBase.
В открытом сеансе SSH-подключения используйте следующую команду, чтобы запустить Beeline.
beeline -u 'jdbc:hive2://localhost:10001/;transportMode=http' -n admin
Дополнительные сведения о Beeline см. в статье Использование Hive с Hadoop в HDInsight с применением Beeline.
Выполните приведенный ниже скрипт 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');
Запустите приведенный ниже скрипт HiveQL, чтобы запросить данные в таблице HBase.
SELECT count(rowkey) AS rk_count FROM hbasecontacts;
Чтобы выйти из Beeline, используйте инструкцию
!exit
.Чтобы выйти из сеанса SSH-подключения, используйте
exit
.
Разделение кластеров Hive и HBase
Запрос Hive для доступа к данным HBase не следует выполнять из кластера HBase. Для запроса данных HBase можно использовать любой кластер, поставляемый с Hive (включая Spark, Hadoop, HBase или Interactive Query), при условии что выполнены следующие шаги:
- Оба кластера должны быть подключены к одной виртуальной сети и подсети.
- Скопируйте
/usr/hdp/$(hdp-select --version)/hbase/conf/hbase-site.xml
из головных узлов кластера HBase в головные и рабочие узлы кластера Hive.
Безопасные кластеры
Данные HBase можно также запрашивать из Hive с помощью HBase с поддержкой протокола ESP:
- При использовании шаблона с несколькими кластерами оба кластера должны включать протокол ESP.
- Чтобы разрешить Hive запрашивать данные HBase, убедитесь, что пользователю
hive
предоставлены разрешения на доступ к данным HBase через подключаемый модуль HBase Apache Ranger. - При использовании отдельных кластеров с поддержкой протокола ESP содержимое
/etc/hosts
из головных узлов кластера HBase нужно добавить в/etc/hosts
головных и рабочих узлов кластера Hive.
Примечание.
После масштабирования кластеров необходимо повторно добавить /etc/hosts
.
Использование REST API HBase с Curl
REST API HBase защищен с помощью базовой аутентификации. Чтобы обеспечить безопасную отправку учетных данных на сервер, все запросы следует отправлять с помощью протокола HTTPS.
Чтобы включить REST API HBase в кластере HDInsight, добавьте следующий пользовательский скрипт запуска в раздел Действие скрипта. Сценарий запуска можно добавить во время или после создания кластера. Для пункта Тип узла задайте значение Серверы региона, чтобы сценарий выполнялся только на серверах регионов HBase.
#! /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
Задайте переменную среды для простоты использования. Измените команды ниже, заменив
MYPASSWORD
паролем для входа в кластер. ЗаменитеMYCLUSTERNAME
именем кластера HBase. Затем введите указанные ниже команды.export PASSWORD='MYPASSWORD' export CLUSTER_NAME=MYCLUSTERNAME
Для получения списка имеющихся таблиц HBase используйте следующую команду:
curl -u admin:$PASSWORD \ -G https://$CLUSTER_NAME.azurehdinsight.net/hbaserest/
Для создания новой таблицы 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.
Чтобы вставить какие-либо данные, используйте следующую команду:
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 позволяет вставить несколько (пакетных) значений.
Для получения строки используйте следующую команду:
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
Войдите в веб-интерфейс Ambari по адресу
https://CLUSTERNAME.azurehdinsight.net
, гдеCLUSTERNAME
— это имя кластера HBase.В меню слева выберите HBase.
В верхней части страницы выберите Быстрые ссылки, выберите ссылку на активный узел Zookeeper, а затем щелкните HBase Master UI (Основной интерфейс HBase). Интерфейс откроется в новой вкладке браузера.
Основной интерфейс HBase состоит из таких разделов:
- региональные серверы;
- главные узлы резервного копирования;
- В таблицах
- задачи
- атрибуты ПО.
Воссоздание кластера
После удаления кластера HBase можно создать другой кластер HBase, использовав тот же контейнер BLOB-объектов по умолчанию. Новый кластер получит таблицы HBase, созданные в исходном кластере. Но чтобы избежать несогласованности, перед удалением кластера рекомендуется отключить таблицы HBase.
Вы можете использовать команду HBase disable 'Contacts'
.
Очистка ресурсов
Если вы не собираетесь использовать это приложение в дальнейшем, удалите созданный кластер HBase, сделав следующее:
- Войдите на портал Azure.
- В поле Поиск в верхней части страницы введите HDInsight.
- Выберите Кластеры HDInsight в разделе Службы.
- В списке кластеров HDInsight, который отобразится, щелкните ... рядом с кластером, созданным при работе с этим руководством.
- Нажмите кнопку Удалить. Нажмите кнопку Да.
Следующие шаги
Из этого руководства вы узнали, как создать кластер Apache HBase. Вы также научились создавать таблицы и просматривать данные в них, используя оболочку HBase. Кроме того вы узнали, как использовать Hive для запроса данных из таблиц HBase и как использовать REST API HBase на C# для создания таблицы HBase и извлечения данных из нее. Дополнительные сведения см. на следующих ресурсах: