Apache HBase в Amazon EMR
Apache HBase – это распределенное хранилище для больших объемов данных, принадлежащее к семейству инструментов Apache Hadoop, с огромными возможностями масштабирования. Эта нереляционная база данных с открытым исходным кодом и функцией контроля версий работает на базе файловой системы Hadoop Distributed Filesystem (HDFS). Она создана для обеспечения стабильного произвольного доступа к таблицам, состоящим из миллиардов строк и миллионов столбцов, в режиме реального времени. Apache Phoenix интегрирован с Apache HBase для SQL-доступа с низкими задержками к таблицам Apache HBase и вторичной индексации с целью повышения производительности. Кроме того, база данных Apache HBase тесно интегрирована с Apache Hadoop, Apache Hive и Apache Pig, что позволяет легко объединить массово-параллельную аналитику и быстрый доступ к данным. Благодаря своей модели данных, пропускной способности и отказоустойчивости Apache HBase отлично справляется с рабочими нагрузками рекламных технологий, интернет-аналитики, финансовых операций и приложений, использующих временные ряды данных, а также со многими другими задачами.
Сервис Amazon EMR обеспечивает нативную поддержку Apache HBase, что позволяет быстро и просто создавать управляемые кластеры Apache HBase через Консоль управления AWS, интерфейс командной строки AWS или API Amazon EMR. Кроме того, в сервисе Amazon EMR доступны дополнительные возможности, включая выбор аппаратного обеспечения кластера из множества инстансов Amazon EC2 и томов Amazon EBS, резервное копирование и восстановление в сервисе Amazon S3 с использованием файловой системы Amazon EMR File System (EMRFS), автоматическую замену узлов, а также простые команды добавления или удаления инстансов для изменения размера кластера. Можно также использовать интерфейс Hue для визуализации таблиц HBase и просмотра данных. Подробнее об Apache HBase в Amazon EMR.
HBase – Обзор
С 1970 года RDBMS является решением проблем хранения и обслуживания данных. После появления больших данных компании осознали преимущества обработки больших данных и стали выбирать такие решения, как Hadoop.
Hadoop использует распределенную файловую систему для хранения больших данных и MapReduce для их обработки. Hadoop отлично справляется с хранением и обработкой огромных данных различных форматов, таких как произвольные, полу- или даже неструктурированные.
Ограничения Hadoop
Hadoop может выполнять только пакетную обработку, а доступ к данным будет осуществляться только последовательно. Это означает, что нужно искать весь набор данных даже для самых простых заданий.
Огромный набор данных при обработке приводит к другому огромному набору данных, который также должен обрабатываться последовательно. На этом этапе требуется новое решение для доступа к любой точке данных за одну единицу времени (произвольный доступ).
Базы данных Hadoop с произвольным доступом
Такие приложения, как HBase, Cassandra, couchDB, Dynamo и MongoDB, являются одними из баз данных, которые хранят огромные объемы данных и осуществляют случайный доступ к данным.
Что такое HBase?
HBase – это распределенная столбцово-ориентированная база данных, построенная на основе файловой системы Hadoop. Это проект с открытым исходным кодом, который можно масштабировать по горизонтали.
HBase – это модель данных, похожая на большую таблицу Google, разработанную для обеспечения быстрого произвольного доступа к огромным объемам структурированных данных. Он использует отказоустойчивость, обеспечиваемую файловой системой Hadoop (HDFS).
Он является частью экосистемы Hadoop, которая обеспечивает случайный доступ в режиме реального времени для чтения / записи данных в файловой системе Hadoop.
Можно хранить данные в HDFS либо напрямую, либо через HBase. Потребитель данных читает / получает доступ к данным в HDFS случайным образом, используя HBase. HBase находится поверх файловой системы Hadoop и обеспечивает доступ для чтения и записи.

HBase и HDFS
| HDFS | HBase |
|---|---|
| HDFS – это распределенная файловая система, подходящая для хранения больших файлов. | HBase – это база данных, построенная на основе HDFS. |
| HDFS не поддерживает быстрый поиск отдельных записей. | HBase обеспечивает быстрый поиск для больших таблиц. |
| Это обеспечивает высокую задержку пакетной обработки; нет концепции пакетной обработки. | Он обеспечивает доступ с низкой задержкой к отдельным строкам из миллиардов записей (произвольный доступ). |
| Это обеспечивает только последовательный доступ к данным. | HBase внутренне использует хэш-таблицы и обеспечивает произвольный доступ, а также сохраняет данные в индексированных файлах HDFS для более быстрого поиска. |
Механизм хранения в HBase
HBase является базой данных, ориентированной на столбцы, и таблицы в ней сортируются по строкам. Схема таблицы определяет только семейства столбцов, которые являются парами ключ-значение. Таблица имеет несколько семейств столбцов, и каждое семейство столбцов может иметь любое количество столбцов. Последующие значения столбцов хранятся непрерывно на диске. Каждое значение ячейки таблицы имеет временную метку. Короче говоря, в HBase:
- Таблица представляет собой набор строк.
- Row – это коллекция семейств столбцов.
- Семейство столбцов – это коллекция столбцов.
- Столбец – это коллекция пар ключ-значение.
Ниже приведен пример схемы таблицы в HBase.
| RowId | Семейство колонн | Семейство колонн | Семейство колонн | Семейство колонн | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| col1 | col2 | col3 | col1 | col2 | col3 | col1 | col2 | col3 | col1 | col2 | col3 | |
| 1 | ||||||||||||
| 2 | ||||||||||||
| 3 | ||||||||||||
Ориентированные на столбцы и ориентированные на строки
Базы данных, ориентированные на столбцы, – это базы данных, которые хранят таблицы данных как разделы столбцов данных, а не как строки данных. Вскоре у них будут семейства столбцов.
| Рядно-ориентированная база данных | Колонно-ориентированная база данных |
|---|---|
| Подходит для процесса онлайн-транзакций (OLTP). | Подходит для онлайн аналитической обработки (OLAP). |
| Такие базы данных рассчитаны на небольшое количество строк и столбцов. | Колонно-ориентированные базы данных предназначены для огромных таблиц. |
На следующем рисунке показаны семейства столбцов в базе данных, ориентированной на столбцы:
Apache HBase используется для произвольного доступа в режиме реального времени для чтения / записи больших данных.
Он размещает очень большие таблицы поверх кластеров товарного оборудования.
Apache HBase – это нереляционная база данных, созданная по образцу Google Bigtable. Bigtable работает в файловой системе Google, также Apache HBase работает поверх Hadoop и HDFS.
HBase – Обзор
С 1970 года RDBMS является решением проблем хранения и обслуживания данных. После появления больших данных компании осознали преимущества обработки больших данных и стали выбирать такие решения, как Hadoop.
Hadoop использует распределенную файловую систему для хранения больших данных и MapReduce для их обработки. Hadoop отлично справляется с хранением и обработкой огромных данных различных форматов, таких как произвольные, полу- или даже неструктурированные.
Ограничения Hadoop
Hadoop может выполнять только пакетную обработку, а доступ к данным будет осуществляться только последовательно. Это означает, что нужно искать весь набор данных даже для самых простых заданий.
Огромный набор данных при обработке приводит к другому огромному набору данных, который также должен обрабатываться последовательно. На этом этапе требуется новое решение для доступа к любой точке данных за одну единицу времени (произвольный доступ).
Базы данных Hadoop с произвольным доступом
Такие приложения, как HBase, Cassandra, couchDB, Dynamo и MongoDB, являются одними из баз данных, которые хранят огромные объемы данных и осуществляют случайный доступ к данным.
Что такое HBase?
HBase – это распределенная столбцово-ориентированная база данных, построенная на основе файловой системы Hadoop. Это проект с открытым исходным кодом, который можно масштабировать по горизонтали.
HBase – это модель данных, похожая на большую таблицу Google, разработанную для обеспечения быстрого произвольного доступа к огромным объемам структурированных данных. Он использует отказоустойчивость, обеспечиваемую файловой системой Hadoop (HDFS).
Он является частью экосистемы Hadoop, которая обеспечивает случайный доступ в режиме реального времени для чтения / записи данных в файловой системе Hadoop.
Можно хранить данные в HDFS либо напрямую, либо через HBase. Потребитель данных читает / получает доступ к данным в HDFS случайным образом, используя HBase. HBase находится поверх файловой системы Hadoop и обеспечивает доступ для чтения и записи.

HBase и HDFS
| HDFS | HBase |
|---|---|
| HDFS – это распределенная файловая система, подходящая для хранения больших файлов. | HBase – это база данных, построенная на основе HDFS. |
| HDFS не поддерживает быстрый поиск отдельных записей. | HBase обеспечивает быстрый поиск для больших таблиц. |
| Это обеспечивает высокую задержку пакетной обработки; нет концепции пакетной обработки. | Он обеспечивает доступ с низкой задержкой к отдельным строкам из миллиардов записей (произвольный доступ). |
| Это обеспечивает только последовательный доступ к данным. | HBase внутренне использует хэш-таблицы и обеспечивает произвольный доступ, а также сохраняет данные в индексированных файлах HDFS для более быстрого поиска. |
Механизм хранения в HBase
HBase является базой данных, ориентированной на столбцы, и таблицы в ней сортируются по строкам. Схема таблицы определяет только семейства столбцов, которые являются парами ключ-значение. Таблица имеет несколько семейств столбцов, и каждое семейство столбцов может иметь любое количество столбцов. Последующие значения столбцов хранятся непрерывно на диске. Каждое значение ячейки таблицы имеет временную метку. Короче говоря, в HBase:
- Таблица представляет собой набор строк.
- Row – это коллекция семейств столбцов.
- Семейство столбцов – это коллекция столбцов.
- Столбец – это коллекция пар ключ-значение.
Ниже приведен пример схемы таблицы в HBase.
| RowId | Семейство колонн | Семейство колонн | Семейство колонн | Семейство колонн | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| col1 | col2 | col3 | col1 | col2 | col3 | col1 | col2 | col3 | col1 | col2 | col3 | |
| 1 | ||||||||||||
| 2 | ||||||||||||
| 3 | ||||||||||||
Ориентированные на столбцы и ориентированные на строки
Базы данных, ориентированные на столбцы, – это базы данных, которые хранят таблицы данных как разделы столбцов данных, а не как строки данных. Вскоре у них будут семейства столбцов.
| Рядно-ориентированная база данных | Колонно-ориентированная база данных |
|---|---|
| Подходит для процесса онлайн-транзакций (OLTP). | Подходит для онлайн аналитической обработки (OLAP). |
| Такие базы данных рассчитаны на небольшое количество строк и столбцов. | Колонно-ориентированные базы данных предназначены для огромных таблиц. |
На следующем рисунке показаны семейства столбцов в базе данных, ориентированной на столбцы:

HBase и RDBMS
| HBase | RDBMS |
|---|---|
| HBase не содержит схемы, не имеет понятия схемы с фиксированными столбцами; определяет только семейства столбцов. | СУБД регулируется своей схемой, которая описывает всю структуру таблиц. |
| Он построен для широких столов. HBase является горизонтально масштабируемым. | Это тонкий и построен для небольших столов. Трудно масштабировать. |
| В HBase нет транзакций. | СУБД является транзакционной. |
| Денормализованные данные. | Это будет иметь нормализованные данные. |
| Это хорошо для полуструктурированных, а также структурированных данных. | Это хорошо для структурированных данных. |
Особенности HBase
- HBase линейно масштабируется.
- Имеет автоматическую поддержку при сбоях.
- Это обеспечивает последовательное чтение и запись.
- Он интегрируется с Hadoop как в качестве источника, так и в качестве пункта назначения.
- У этого есть легкий API Java для клиента.
- Он обеспечивает репликацию данных по кластерам.
Где использовать HBase
- Apache HBase используется для произвольного доступа в режиме реального времени для чтения / записи больших данных.
- Он размещает очень большие таблицы поверх кластеров товарного оборудования.
- Apache HBase – это нереляционная база данных, созданная по образцу Google Bigtable. Bigtable работает в файловой системе Google, также Apache HBase работает поверх Hadoop и HDFS.
Apache HBase используется для произвольного доступа в режиме реального времени для чтения / записи больших данных.
Он размещает очень большие таблицы поверх кластеров товарного оборудования.
Apache HBase – это нереляционная база данных, созданная по образцу Google Bigtable. Bigtable работает в файловой системе Google, также Apache HBase работает поверх Hadoop и HDFS.
Приложения HBase
- Он используется всякий раз, когда есть необходимость писать тяжелые приложения.
- HBase используется всякий раз, когда нам нужно обеспечить быстрый произвольный доступ к доступным данным.
- Такие компании, как Facebook, Twitter, Yahoo и Adobe, используют HBase для внутреннего использования.
История HBase
| Год | Событие |
|---|---|
| Ноя 2006 | Google выпустил статью на BigTable. |
| Февраль 2007 | Первоначальный прототип HBase был создан как вклад Hadoop. |
| Окт 2007 | Первый пригодный для использования HBase вместе с Hadoop 0.15.0 был выпущен. |
| Янв 2008 | HBase стал суб-проектом Hadoop. |
| Окт 2008 | HBase 0.18.1 был выпущен. |
| Янв 2009 | HBase 0.19.0 был выпущен. |
| Сентябрь 2009 | HBase 0.20.0 был выпущен. |
| Май 2010 | HBase стал проектом верхнего уровня Apache. |
HBase – Архитектура
В HBase таблицы разбиты на регионы и обслуживаются серверами регионов. Регионы разделены по столбцам по вертикали на «Магазины». Магазины сохраняются в виде файлов в HDFS. Ниже показана архитектура HBase.
Примечание . Термин «хранилище» используется для обозначения регионов для описания структуры хранилища.

HBase состоит из трех основных компонентов: клиентской библиотеки, главного сервера и серверов региона. Региональные серверы могут быть добавлены или удалены в соответствии с требованием.
MasterServer
- Назначает регионы на серверы регионов и использует Apache ZooKeeper для этой задачи.
- Управляет балансировкой нагрузки регионов на серверах регионов. Он выгружает занятые серверы и перемещает регионы на менее занятые серверы.
- Поддерживает состояние кластера путем согласования распределения нагрузки.
- Отвечает за изменения схемы и другие операции с метаданными, такие как создание таблиц и семейств столбцов.
Назначает регионы на серверы регионов и использует Apache ZooKeeper для этой задачи.
Управляет балансировкой нагрузки регионов на серверах регионов. Он выгружает занятые серверы и перемещает регионы на менее занятые серверы.
Поддерживает состояние кластера путем согласования распределения нагрузки.
Отвечает за изменения схемы и другие операции с метаданными, такие как создание таблиц и семейств столбцов.
районы
Регионы – это не что иное, как таблицы, которые разбиты и распределены по серверам регионов.
Региональный сервер
Региональные серверы имеют регионы, которые –
- Общайтесь с клиентом и выполняйте операции, связанные с данными.
- Обрабатывать запросы на чтение и запись для всех регионов, находящихся под ним.
- Определите размер региона, следуя пороговым значениям размера региона.
Когда мы более подробно рассмотрим сервер регионов, он содержит регионы и хранилища, как показано ниже:

Магазин содержит память и память HFiles. Memstore – это как кеш-память. Все, что введено в HBase, изначально хранится здесь. Позже данные передаются и сохраняются в Hfiles в виде блоков, а хранилище метаданных сбрасывается.
Работник зоопарка
- Zookeeper – это проект с открытым исходным кодом, который предоставляет такие услуги, как поддержка информации о конфигурации, присвоение имен, обеспечение распределенной синхронизации и т. Д.
- Zookeeper имеет эфемерные узлы, представляющие разные региональные серверы. Главные серверы используют эти узлы для обнаружения доступных серверов.
- В дополнение к доступности, узлы также используются для отслеживания сбоев сервера или сетевых разделов.
- Клиенты общаются с региональными серверами через zookeeper.
- В псевдо и автономных режимах HBase сам позаботится о зоопарке.
Zookeeper – это проект с открытым исходным кодом, который предоставляет такие услуги, как поддержка информации о конфигурации, присвоение имен, обеспечение распределенной синхронизации и т. Д.
Zookeeper имеет эфемерные узлы, представляющие разные региональные серверы. Главные серверы используют эти узлы для обнаружения доступных серверов.
В дополнение к доступности, узлы также используются для отслеживания сбоев сервера или сетевых разделов.
Клиенты общаются с региональными серверами через zookeeper.
В псевдо и автономных режимах HBase сам позаботится о зоопарке.
HBase – Установка
Эта глава объясняет, как HBase установлен и изначально настроен. Java и Hadoop необходимы для продолжения работы с HBase, поэтому вам необходимо загрузить и установить java и Hadoop в вашей системе.
Настройка перед установкой
Перед установкой Hadoop в среду Linux нам нужно настроить Linux с помощью ssh (Secure Shell). Следуйте приведенным ниже инструкциям для настройки среды Linux.
Создание пользователя
Прежде всего, рекомендуется создать отдельного пользователя для Hadoop, чтобы изолировать файловую систему Hadoop от файловой системы Unix. Следуйте инструкциям ниже, чтобы создать пользователя.
- Откройте корень с помощью команды «su».
- Создайте пользователя из учетной записи root с помощью команды «useradd username».
- Теперь вы можете открыть существующую учетную запись пользователя с помощью команды «su username».
Откройте терминал Linux и введите следующие команды, чтобы создать пользователя.
$ su password: # useradd hadoop # passwd hadoop New passwd: Retype new passwd
Настройка SSH и генерация ключей
Настройка SSH требуется для выполнения различных операций в кластере, таких как запуск, остановка и операции распределенной оболочки демона. Для аутентификации разных пользователей Hadoop требуется предоставить пару открытого / закрытого ключа для пользователя Hadoop и поделиться ею с разными пользователями.
Следующие команды используются для генерации пары ключ-значение с использованием SSH. Скопируйте открытые ключи из формы id_rsa.pub в author_keys и предоставьте владелец, права на чтение и запись в файл authorized_keys соответственно.
$ ssh-keygen -t rsa $ cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys $ chmod 0600 ~/.ssh/authorized_keys
Проверьте SSH
ssh localhost
Установка Java
Java является основной предпосылкой для Hadoop и HBase. Прежде всего, вы должны проверить существование java в вашей системе, используя «java -version». Синтаксис команды версии Java приведен ниже.
$ java -version
Если все работает нормально, вы получите следующий вывод.
java version "1.7.0_71" Java(TM) SE Runtime Environment (build 1.7.0_71-b13) Java HotSpot(TM) Client VM (build 25.0-b02, mixed mode)
Если java не установлен в вашей системе, следуйте приведенным ниже инструкциям для установки java.
Шаг 1
Загрузите Java (JDK – X64.tar.gz), перейдя по следующей ссылке Oracle Java .
Затем jdk-7u71-linux-x64.tar.gz будет загружен в вашу систему.
Шаг 2
Обычно вы найдете загруженный файл Java в папке Downloads. Проверьте его и извлеките файл jdk-7u71-linux-x64.gz, используя следующие команды.
$ cd Downloads/ $ ls jdk-7u71-linux-x64.gz $ tar zxf jdk-7u71-linux-x64.gz $ ls jdk1.7.0_71 jdk-7u71-linux-x64.gz
Шаг 3
Чтобы сделать Java доступным для всех пользователей, вы должны переместить его в папку «/ usr / local /». Откройте root и введите следующие команды.
$ su password: # mv jdk1.7.0_71 /usr/local/ # exit
Шаг 4
Для настройки переменных PATH и JAVA_HOME добавьте следующие команды в файл ~ / .bashrc .
export JAVA_HOME=/usr/local/jdk1.7.0_71 export PATH= $PATH:$JAVA_HOME/bin
Теперь примените все изменения в текущей работающей системе.
$ source ~/.bashrc
Шаг 5
Используйте следующие команды для настройки альтернатив Java:
# alternatives --install /usr/bin/java java usr/local/java/bin/java 2 # alternatives --install /usr/bin/javac javac usr/local/java/bin/javac 2 # alternatives --install /usr/bin/jar jar usr/local/java/bin/jar 2 # alternatives --set java usr/local/java/bin/java # alternatives --set javac usr/local/java/bin/javac # alternatives --set jar usr/local/java/bin/jar
Теперь проверьте команду java -version из терминала, как описано выше.
Загрузка Hadoop
После установки Java вы должны установить Hadoop. Прежде всего, проверьте наличие Hadoop с помощью команды «Hadoop version», как показано ниже.
hadoop version
Если все работает нормально, вы получите следующий вывод.
Hadoop 2.6.0 Compiled by jenkins on 2014-11-13T21:10Z Compiled with protoc 2.5.0 From source with checksum 18e43357c8f927c0695f1e9522859d6a This command was run using /home/hadoop/hadoop/share/hadoop/common/hadoop-common-2.6.0.jar
Если ваша система не может найти Hadoop, загрузите Hadoop в свою систему. Следуйте приведенным ниже командам, чтобы сделать это.
Загрузите и извлеките hadoop-2.6.0 из Apache Software Foundation, используя следующие команды.
$ su password: # cd /usr/local # wget http://mirrors.advancedhosters.com/apache/hadoop/common/hadoop- 2.6.0/hadoop-2.6.0-src.tar.gz # tar xzf hadoop-2.6.0-src.tar.gz # mv hadoop-2.6.0/* hadoop/ # exit
Установка Hadoop
Установите Hadoop в любом необходимом режиме. Здесь мы демонстрируем функциональность HBase в псевдораспределенном режиме, поэтому установите Hadoop в псевдораспределенном режиме.
Следующие шаги используются для установки Hadoop 2.4.1 .
Шаг 1 – Настройка Hadoop
Вы можете установить переменные среды Hadoop, добавив следующие команды в файл ~ / .bashrc .
export HADOOP_HOME=/usr/local/hadoop export HADOOP_MAPRED_HOME=$HADOOP_HOME export HADOOP_COMMON_HOME=$HADOOP_HOME export HADOOP_HDFS_HOME=$HADOOP_HOME export YARN_HOME=$HADOOP_HOME export HADOOP_COMMON_LIB_NATIVE_DIR=$HADOOP_HOME/lib/native export PATH=$PATH:$HADOOP_HOME/sbin:$HADOOP_HOME/bin export HADOOP_INSTALL=$HADOOP_HOME
Теперь примените все изменения в текущей работающей системе.
$ source ~/.bashrc
Шаг 2 – Настройка Hadoop
Вы можете найти все файлы конфигурации Hadoop в папке «$ HADOOP_HOME / etc / hadoop». Вам необходимо внести изменения в эти файлы конфигурации в соответствии с вашей инфраструктурой Hadoop.
$ cd $HADOOP_HOME/etc/hadoop
Чтобы разрабатывать программы Hadoop на языке java, необходимо сбросить переменную среды java в файле hadoop-env.sh , заменив значение JAVA_HOME местоположением java в вашей системе.
export JAVA_HOME=/usr/local/jdk1.7.0_71
Вам нужно будет отредактировать следующие файлы для настройки Hadoop.
ядро-site.xml
Файл core-site.xml содержит такую информацию, как номер порта, используемый для экземпляра Hadoop, память, выделенная для файловой системы, лимит памяти для хранения данных и размер буферов чтения / записи.
Откройте core-site.xml и добавьте следующие свойства между тегами и configuration> .
fs.default.name hdfs://localhost:9000
HDFS-site.xml
Файл hdfs-site.xml содержит такую информацию, как значение данных репликации, путь namenode и путь datanode ваших локальных файловых систем, где вы хотите хранить инфраструктуру Hadoop.
Допустим, следующие данные.
dfs.replication (data replication value) = 1 (In the below given path /hadoop/ is the user name. hadoopinfra/hdfs/namenode is the directory created by hdfs file system.) namenode path = //home/hadoop/hadoopinfra/hdfs/namenode (hadoopinfra/hdfs/datanode is the directory created by hdfs file system.) datanode path = //home/hadoop/hadoopinfra/hdfs/datanode
Откройте этот файл и добавьте следующие свойства между тегами , configuration> .
dfs.replication > 1 dfs.name.dir file:///home/hadoop/hadoopinfra/hdfs/namenode dfs.data.dir file:///home/hadoop/hadoopinfra/hdfs/datanode
Примечание. В приведенном выше файле все значения свойств определяются пользователем, и вы можете вносить изменения в соответствии с инфраструктурой Hadoop.
Пряжа-site.xml
Этот файл используется для настройки пряжи в Hadoop. Откройте файл yarn-site.xml и добавьте следующее свойство между
yarn.nodemanager.aux-services mapreduce_shuffle
mapred-site.xml
Этот файл используется, чтобы указать, какую платформу MapReduce мы используем. По умолчанию Hadoop содержит шаблон yarn-site.xml. Прежде всего, необходимо скопировать файл из mapred-site.xml.template в файл mapred-site.xml с помощью следующей команды.
$ cp mapred-site.xml.template mapred-site.xml
Откройте файл mapred-site.xml и добавьте следующие свойства между тегами и configuration> .
mapreduce.framework.name yarn
Проверка правильности установки Hadoop
Следующие шаги используются для проверки установки Hadoop.
Шаг 1 – Настройка узла имени
Настройте namenode с помощью команды «hdfs namenode -format» следующим образом.
$ cd ~ $ hdfs namenode -format
Ожидаемый результат заключается в следующем.
10/24/14 21:30:55 INFO namenode.NameNode: STARTUP_MSG: /************************************************************ STARTUP_MSG: Starting NameNode STARTUP_MSG: host = localhost/192.168.1.11 STARTUP_MSG: args = [-format] STARTUP_MSG: version = 2.4.1 . . 10/24/14 21:30:56 INFO common.Storage: Storage directory /home/hadoop/hadoopinfra/hdfs/namenode has been successfully formatted. 10/24/14 21:30:56 INFO namenode.NNStorageRetentionManager: Going to retain 1 images with txid >= 0 10/24/14 21:30:56 INFO util.ExitUtil: Exiting with status 0 10/24/14 21:30:56 INFO namenode.NameNode: SHUTDOWN_MSG: /************************************************************ SHUTDOWN_MSG: Shutting down NameNode at localhost/192.168.1.11 ************************************************************/
Шаг 2 – Проверка Hadoop dfs
Следующая команда используется для запуска dfs. Выполнение этой команды запустит вашу файловую систему Hadoop.
$ start-dfs.sh
Ожидаемый результат следующий.
10/24/14 21:37:56 Starting namenodes on [localhost] localhost: starting namenode, logging to /home/hadoop/hadoop- 2.4.1/logs/hadoop-hadoop-namenode-localhost.out localhost: starting datanode, logging to /home/hadoop/hadoop- 2.4.1/logs/hadoop-hadoop-datanode-localhost.out Starting secondary namenodes [0.0.0.0]
Шаг 3 – Проверка скрипта пряжи
Следующая команда используется для запуска скрипта пряжи. Выполнение этой команды запустит ваши демоны пряжи.
$ start-yarn.sh
Ожидаемый результат следующий.
starting yarn daemons starting resourcemanager, logging to /home/hadoop/hadoop- 2.4.1/logs/yarn-hadoop-resourcemanager-localhost.out localhost: starting nodemanager, logging to /home/hadoop/hadoop- 2.4.1/logs/yarn-hadoop-nodemanager-localhost.out
Шаг 4 – Доступ к Hadoop в браузере
Номер порта по умолчанию для доступа к Hadoop – 50070. Используйте следующий URL-адрес, чтобы получить службы Hadoop в вашем браузере.
http://localhost:50070

Шаг 5 – Проверьте все приложения кластера
Номер порта по умолчанию для доступа ко всем приложениям кластера – 8088. Используйте следующий URL для посещения этой службы.
http://localhost:8088/

Установка HBase
Мы можем установить HBase в любом из трех режимов: автономный режим, псевдораспределенный режим и полностью распределенный режим.
Установка HBase в автономном режиме
Загрузите последнюю стабильную версию формы HBase http://www.interior-dsgn.com/apache/hbase/stable/ с помощью команды «wget» и извлеките ее с помощью команды tar «zxvf». Смотрите следующую команду.
$cd usr/local/ $wget http://www.interior-dsgn.com/apache/hbase/stable/hbase-0.98.8- hadoop2-bin.tar.gz $tar -zxvf hbase-0.98.8-hadoop2-bin.tar.gz
Перейдите в режим суперпользователя и переместите папку HBase в / usr / local, как показано ниже.
$su $password: enter your password here mv hbase-0.99.1/* Hbase/
Настройка HBase в автономном режиме
Прежде чем продолжить работу с HBase, вы должны отредактировать следующие файлы и настроить HBase.
hbase-env.sh
Установите java Home для HBase и откройте файл hbase-env.sh из папки conf. Отредактируйте переменную среды JAVA_HOME и измените существующий путь на текущую переменную JAVA_HOME, как показано ниже.
cd /usr/local/Hbase/conf gedit hbase-env.sh
Это откроет файл env.sh HBase. Теперь замените существующее значение JAVA_HOME текущим значением, как показано ниже.
export JAVA_HOME=/usr/lib/jvm/java-1.7.0
HBase-site.xml
Это основной файл конфигурации HBase. Установите каталог данных в соответствующем месте, открыв домашнюю папку HBase в / usr / local / HBase. Внутри папки conf вы найдете несколько файлов, откройте файл hbase-site.xml, как показано ниже.
#cd /usr/local/HBase/ #cd conf # gedit hbase-site.xml
Внутри файла hbase-site.xml вы найдете теги и configuration> . Внутри них установите каталог HBase под ключом свойства с именем «hbase.rootdir», как показано ниже.
//Here you have to set the path where you want HBase to store its files. hbase.rootdir file:/home/hadoop/HBase/HFiles //Here you have to set the path where you want HBase to store its built in zookeeper files. hbase.zookeeper.property.dataDir /home/hadoop/zookeeper
На этом установка и настройка HBase успешно завершена. Мы можем запустить HBase, используя скрипт start-hbase.sh, который находится в папке bin HBase. Для этого откройте домашнюю папку HBase и запустите скрипт запуска HBase, как показано ниже.
$cd /usr/local/HBase/bin $./start-hbase.sh
Если все идет хорошо, при попытке запустить скрипт запуска HBase вам будет выдано сообщение о том, что HBase запущен.
starting master, logging to /usr/local/HBase/bin/../logs/hbase-tpmaster-localhost.localdomain.out
Установка HBase в псевдораспределенном режиме
Давайте теперь проверим, как HBase установлен в псевдораспределенном режиме.
Конфигурирование HBase
Прежде чем продолжить работу с HBase, настройте Hadoop и HDFS в локальной или удаленной системе и убедитесь, что они работают. Остановите HBase, если он работает.
HBase-site.xml
Отредактируйте файл hbase-site.xml, чтобы добавить следующие свойства.
hbase.cluster.distributed true
Там будет указано, в каком режиме должен работать HBase. В том же файле из локальной файловой системы измените hbase.rootdir, ваш адрес экземпляра HDFS, используя синтаксис hdfs: //// URI. Мы запускаем HDFS на локальном хосте через порт 8030.
hbase.rootdir hdfs://localhost:8030/hbase
Запуск HBase
После завершения настройки перейдите в домашнюю папку HBase и запустите HBase с помощью следующей команды.
$cd /usr/local/HBase $bin/start-hbase.sh
Примечание. Перед запуском HBase убедитесь, что Hadoop запущен.
Проверка каталога HBase в HDFS
HBase создает свой каталог в HDFS. Чтобы увидеть созданный каталог, перейдите к Hadoop bin и введите следующую команду.
$ ./bin/hadoop fs -ls /hbase
Если все пойдет хорошо, вы получите следующий результат.
Found 7 items drwxr-xr-x - hbase users 0 2014-06-25 18:58 /hbase/.tmp drwxr-xr-x - hbase users 0 2014-06-25 21:49 /hbase/WALs drwxr-xr-x - hbase users 0 2014-06-25 18:48 /hbase/corrupt drwxr-xr-x - hbase users 0 2014-06-25 18:58 /hbase/data -rw-r--r-- 3 hbase users 42 2014-06-25 18:41 /hbase/hbase.id -rw-r--r-- 3 hbase users 7 2014-06-25 18:41 /hbase/hbase.version drwxr-xr-x - hbase users 0 2014-06-25 21:49 /hbase/oldWALs
Запуск и остановка мастера
Используя «local-master-backup.sh», вы можете запустить до 10 серверов. Откройте домашнюю папку HBase, master и выполните следующую команду, чтобы запустить ее.
$ ./bin/local-master-backup.sh 2 4
Чтобы уничтожить мастер резервного копирования, вам нужен его идентификатор процесса, который будет храниться в файле с именем «/tmp/hbase-USER-X-master.pid». Вы можете уничтожить мастер резервного копирования с помощью следующей команды.
$ cat /tmp/hbase-user-1-master.pid |xargs kill -9
Запуск и остановка RegionServers
Вы можете запустить несколько серверов региона из одной системы, используя следующую команду.
$ .bin/local-regionservers.sh start 2 3
Чтобы остановить сервер региона, используйте следующую команду.
$ .bin/local-regionservers.sh stop 3
Запуск HBaseShell
После успешной установки HBase вы можете запустить HBase Shell. Ниже приведена последовательность шагов, которые необходимо выполнить для запуска оболочки HBase. Откройте терминал и войдите в систему как суперпользователь.
Запустить файловую систему Hadoop
Просмотрите домашнюю папку Hadoop sbin и запустите файловую систему Hadoop, как показано ниже.
$cd $HADOOP_HOME/sbin $start-all.sh
Запустить HBase
Просмотрите папку bin корневого каталога HBase и запустите HBase.
$cd /usr/local/HBase $./bin/start-hbase.sh
Запустите главный сервер HBase
Это будет тот же каталог. Запустите его, как показано ниже.
$./bin/local-master-backup.sh start 2 (number signifies specific server.)
Начальный регион
Запустите сервер региона, как показано ниже.
$./bin/./local-regionservers.sh start 3
Запустите HBase Shell
Вы можете запустить оболочку HBase, используя следующую команду.
$cd bin $./hbase shell
Это даст вам подсказку HBase Shell, как показано ниже.
2014-12-09 14:24:27,526 INFO [main] Configuration.deprecation: hadoop.native.lib is deprecated. Instead, use io.native.lib.available HBase Shell; enter 'help' for list of supported commands. Type "exit" to leave the HBase Shell Version 0.98.8-hadoop2, r6cfc8d064754251365e070a10a82eb169956d5fe, Fri Nov 14 18:26:29 PST 2014 hbase(main):001:0>
Веб-интерфейс HBase
Чтобы получить доступ к веб-интерфейсу HBase, введите следующий URL-адрес в браузере.
http://localhost:60010
В этом интерфейсе отображаются текущие запущенные серверы регионов, мастера резервного копирования и таблицы HBase.
Серверы HBase Region и мастера резервного копирования

Таблицы HBase

Настройка среды Java
Мы также можем связываться с HBase с помощью библиотек Java, но перед тем, как обращаться к HBase с помощью Java API, вам нужно установить classpath для этих библиотек.
Установка пути к классам
Прежде чем приступить к программированию, установите для classpath библиотеки HBase в файле .bashrc . Откройте .bashrc в любом из редакторов, как показано ниже.
$ gedit ~/.bashrc
Установите classpath для библиотек HBase (папка lib в HBase), как показано ниже.
export CLASSPATH = $CLASSPATH://home/hadoop/hbase/lib/*
Это сделано для предотвращения исключения «класс не найден» при доступе к HBase с использованием API Java.
HBase – Shell
В этой главе объясняется, как запустить интерактивную оболочку HBase, которая поставляется вместе с HBase.
HBase Shell
HBase содержит оболочку, с помощью которой вы можете общаться с HBase. HBase использует файловую систему Hadoop для хранения своих данных. Он будет иметь главный сервер и региональные серверы. Хранение данных будет в виде регионов (таблиц). Эти регионы будут разделены и сохранены на региональных серверах.
Главный сервер управляет этими серверами региона, и все эти задачи выполняются в HDFS. Ниже приведены некоторые команды, поддерживаемые HBase Shell.
Общие команды
- status – Предоставляет статус HBase, например, количество серверов.
- версия – Предоставляет версию используемого HBase.
- table_help – Предоставляет справку для команд ссылки на таблицу.
- whoami – предоставляет информацию о пользователе.
status – Предоставляет статус HBase, например, количество серверов.
версия – Предоставляет версию используемого HBase.
table_help – Предоставляет справку для команд ссылки на таблицу.
whoami – предоставляет информацию о пользователе.
Язык определения данных
Это команды, которые работают с таблицами в HBase.
- создать – создает таблицу.
- list – перечисляет все таблицы в HBase.
- отключить – отключение таблицы.
- is_disabled – проверяет, отключена ли таблица.
- enable – включает таблицу.
- is_enabled – проверяет, включена ли таблица.
- Описание – Предоставляет описание таблицы.
- alter – изменяет таблицу.
- существующие – проверяет, существует ли таблица.
- drop – Удаляет стол из HBase.
- drop_all – удаляет таблицы, соответствующие ‘regex’, указанному в команде.
- Java Admin API – Прежде чем все вышеперечисленные команды, Java предоставляет Admin API для достижения функциональных возможностей DDL посредством программирования. В пакете org.apache.hadoop.hbase.client HBaseAdmin и HTableDescriptor являются двумя важными классами в этом пакете, которые предоставляют функциональные возможности DDL.
создать – создает таблицу.
list – перечисляет все таблицы в HBase.
отключить – отключение таблицы.
is_disabled – проверяет, отключена ли таблица.
enable – включает таблицу.
is_enabled – проверяет, включена ли таблица.
Описание – Предоставляет описание таблицы.
alter – изменяет таблицу.
существующие – проверяет, существует ли таблица.
drop – Удаляет стол из HBase.
drop_all – удаляет таблицы, соответствующие ‘regex’, указанному в команде.
Java Admin API – Прежде чем все вышеперечисленные команды, Java предоставляет Admin API для достижения функциональных возможностей DDL посредством программирования. В пакете org.apache.hadoop.hbase.client HBaseAdmin и HTableDescriptor являются двумя важными классами в этом пакете, которые предоставляют функциональные возможности DDL.
Язык манипулирования данными
- put – помещает значение ячейки в указанный столбец в указанной строке в определенной таблице.
- get – извлекает содержимое строки или ячейки
- delete – удаляет значение ячейки в таблице.
- deleteall – удаляет все ячейки в данной строке.
- scan – сканирует и возвращает данные таблицы.
- count – считает и возвращает количество строк в таблице.
- truncate – отключает, удаляет и воссоздает указанную таблицу.
- Клиентский API-интерфейс Java. Перед всеми вышеупомянутыми командами Java предоставляет клиентский API-интерфейс для реализации функций DML, операций CRUD (Create Retrieve Update Delete) и многого другого посредством программирования в пакете org.apache.hadoop.hbase.client. HTable Put и Get являются важными классами в этом пакете.
put – помещает значение ячейки в указанный столбец в указанной строке в определенной таблице.
get – извлекает содержимое строки или ячейки
delete – удаляет значение ячейки в таблице.
deleteall – удаляет все ячейки в данной строке.
scan – сканирует и возвращает данные таблицы.
count – считает и возвращает количество строк в таблице.
truncate – отключает, удаляет и воссоздает указанную таблицу.
Клиентский API-интерфейс Java. Перед всеми вышеупомянутыми командами Java предоставляет клиентский API-интерфейс для реализации функций DML, операций CRUD (Create Retrieve Update Delete) и многого другого посредством программирования в пакете org.apache.hadoop.hbase.client. HTable Put и Get являются важными классами в этом пакете.
Запуск HBase Shell
Чтобы получить доступ к оболочке HBase, вы должны перейти в домашнюю папку HBase.
cd /usr/localhost/ cd Hbase
Вы можете запустить интерактивную оболочку HBase, используя команду «hbase shell», как показано ниже.
./bin/hbase shell
Если вы успешно установили HBase в своей системе, он выдаст подсказку оболочки HBase, как показано ниже.
HBase Shell; enter 'help' for list of supported commands. Type "exit" to leave the HBase Shell Version 0.94.23, rf42302b28aceaab773b15f234aa8718fff7eea3c, Wed Aug 27 00:54:09 UTC 2014 hbase(main):001:0>
Чтобы выйти из интерактивной команды оболочки в любой момент, введите exit или используйте . Проверьте работу оболочки, прежде чем продолжить. Используйте команду list для этой цели. Список – это команда, используемая для получения списка всех таблиц в HBase. Прежде всего, проверьте установку и настройку HBase в вашей системе, используя эту команду, как показано ниже.
hbase(main):001:0> list
Когда вы вводите эту команду, она дает вам следующий вывод.
hbase(main):001:0> list TABLE
HBase – Общие команды
Основными командами в HBase являются status, version, table_help и whoami. Эта глава объясняет эти команды.
статус
Эта команда возвращает состояние системы, включая сведения о серверах, работающих в системе. Его синтаксис выглядит следующим образом:
hbase(main):009:0> status
Если вы выполните эту команду, она вернет следующий вывод.
hbase(main):009:0> status 3 servers, 0 dead, 1.3333 average load
версия
Эта команда возвращает версию HBase, используемую в вашей системе. Его синтаксис выглядит следующим образом:
hbase(main):010:0> version
Если вы выполните эту команду, она вернет следующий вывод.
hbase(main):009:0> version 0.98.8-hadoop2, r6cfc8d064754251365e070a10a82eb169956d5fe, Fri Nov 14 18:26:29 PST 2014
table_help
Эта команда покажет вам, как и как использовать команды, на которые ссылаются таблицы. Ниже приведен синтаксис для использования этой команды.
hbase(main):02:0> table_help
При использовании этой команды отображаются разделы справки для команд, связанных с таблицами. Ниже приведен частичный вывод этой команды.
hbase(main):002:0> table_help Help for table-reference commands. You can either create a table via 'create' and then manipulate the table via commands like 'put', 'get', etc. See the standard help information for how to use each of these commands. However, as of 0.96, you can also get a reference to a table, on which you can invoke commands. For instance, you can get create a table and keep around a reference to it via: hbase> t = create 't', 'cf'….
кто я
Эта команда возвращает пользовательские данные HBase. Если вы выполните эту команду, возвращает текущего пользователя HBase, как показано ниже.
hbase(main):008:0> whoami hadoop (auth:SIMPLE) groups: hadoop
HBase – Admin API
HBase написан на Java, поэтому он предоставляет API Java для связи с HBase. Java API – это самый быстрый способ связи с HBase. Ниже приведен API-интерфейс Java, на который ссылаются, который охватывает задачи, используемые для управления таблицами.
Класс HBaseAdmin
HBaseAdmin – это класс, представляющий администратора. Этот класс принадлежит пакету org.apache.hadoop.hbase.client . Используя этот класс, вы можете выполнять задачи администратора. Вы можете получить экземпляр Admin, используя метод Connection.getAdmin () .
Методы и описание
void createTable (HTableDescriptor desc)
Создает новую таблицу.
void createTable (HTableDescriptor desc, byte [] [] splitKeys)
Создает новую таблицу с начальным набором пустых областей, определенных указанными разделенными ключами.
void deleteColumn (byte [] tableName, String columnName)
Удаляет столбец из таблицы.
void deleteColumn (String tableName, String columnName)
Удалить столбец из таблицы.
void deleteTable (String tableName)
void createTable (HTableDescriptor desc)
Создает новую таблицу.
void createTable (HTableDescriptor desc, byte [] [] splitKeys)
Создает новую таблицу с начальным набором пустых областей, определенных указанными разделенными ключами.
void deleteColumn (byte [] tableName, String columnName)
Удаляет столбец из таблицы.
void deleteColumn (String tableName, String columnName)
Удалить столбец из таблицы.
void deleteTable (String tableName)
Дескриптор класса
Этот класс содержит сведения о таблице HBase, такие как:
- дескрипторы всех семейств столбцов,
- если таблица является каталожной таблицей,
- если таблица только для чтения,
- максимальный размер магазина mem,
- когда должен произойти раскол региона,
- сопроцессоры, связанные с ним и т. д.
Конструкторы
HTableDescriptor (имя таблицы)
Создает дескриптор таблицы, определяющий объект TableName.
HTableDescriptor (имя таблицы)
Методы и описание
HTableDescriptor addFamily (семейство HColumnDescriptor)
Добавляет семейство столбцов к данному дескриптору
HTableDescriptor addFamily (семейство HColumnDescriptor)
Добавляет семейство столбцов к данному дескриптору
HBase – Создать таблицу
Создание таблицы с использованием HBase Shell
Вы можете создать таблицу с помощью команды create , здесь вы должны указать имя таблицы и имя семейства столбцов. Синтаксис для создания таблицы в оболочке HBase показан ниже.
create ‘’,’’
пример
Ниже приведен пример схемы таблицы с именем emp. Он имеет два семейства столбцов: «персональные данные» и «профессиональные данные».
Вы можете создать эту таблицу в оболочке HBase, как показано ниже.
hbase(main):002:0> create 'emp', 'personal data', 'professional data'
И это даст вам следующий вывод.
0 row(s) in 1.1300 seconds => Hbase::Table - emp
верификация
Вы можете проверить, создана ли таблица, используя команду list, как показано ниже. Здесь вы можете увидеть созданную таблицу emp.
hbase(main):002:0> list TABLE emp 2 row(s) in 0.0340 seconds
Создание таблицы с использованием API Java
Вы можете создать таблицу в HBase, используя метод createTable () класса HBaseAdmin . Этот класс принадлежит пакету org.apache.hadoop.hbase.client . Ниже приведены шаги по созданию таблицы в HBase с использованием API Java.
Шаг 1: создание HBaseAdmin
Этот класс требует объект конфигурации в качестве параметра, поэтому сначала создайте экземпляр класса конфигурации и передайте этот экземпляр HBaseAdmin.
Configuration conf = HBaseConfiguration.create(); HBaseAdmin admin = new HBaseAdmin(conf);
Шаг 2: Создать TableDescriptor
HTableDescriptor – это класс, который принадлежит классу org.apache.hadoop.hbase . Этот класс похож на контейнер имен таблиц и семейств столбцов.
//creating table descriptor HTableDescriptor table = new HTableDescriptor(toBytes("Table name")); //creating column family descriptor HColumnDescriptor family = new HColumnDescriptor(toBytes("column family")); //adding coloumn family to HTable table.addFamily(family);
Шаг 3: Выполнить через Admin
Используя метод createTable () класса HBaseAdmin , вы можете выполнить созданную таблицу в режиме администратора.
admin.createTable(table);
Ниже приведена полная программа для создания таблицы через администратора.
import java.io.IOException; import org.apache.hadoop.hbase.HBaseConfiguration; import org.apache.hadoop.hbase.HColumnDescriptor; import org.apache.hadoop.hbase.HTableDescriptor; import org.apache.hadoop.hbase.client.HBaseAdmin; import org.apache.hadoop.hbase.TableName; import org.apache.hadoop.conf.Configuration; public class CreateTable public static void main(String[] args) throws IOException // Instantiating configuration class Configuration con = HBaseConfiguration.create(); // Instantiating HbaseAdmin class HBaseAdmin admin = new HBaseAdmin(con); // Instantiating table descriptor class HTableDescriptor tableDescriptor = new HTableDescriptor(TableName.valueOf("emp")); // Adding column families to table descriptor tableDescriptor.addFamily(new HColumnDescriptor("personal")); tableDescriptor.addFamily(new HColumnDescriptor("professional")); // Execute the table through admin admin.createTable(tableDescriptor); System.out.println(" Table created "); > >
Скомпилируйте и выполните вышеуказанную программу, как показано ниже.
$javac CreateTable.java $java CreateTable
Следующее должно быть выводом:
Table created
HBase – Листинг Таблица
Отображение таблицы с использованием HBase Shell
list – это команда, которая используется для вывода списка всех таблиц в HBase. Ниже приведен синтаксис команды list.
hbase(main):001:0 > list
Когда вы набираете эту команду и выполняете ее в приглашении HBase, она отобразит список всех таблиц в HBase, как показано ниже.
hbase(main):001:0> list TABLE emp
Здесь вы можете увидеть таблицу с именем emp.
Список таблиц с использованием Java API
Следуйте приведенным ниже инструкциям, чтобы получить список таблиц из HBase с использованием Java-API.
Шаг 1
У вас есть метод listTables () в классе HBaseAdmin, чтобы получить список всех таблиц в HBase. Этот метод возвращает массив объектов HTableDescriptor .
//creating a configuration object Configuration conf = HBaseConfiguration.create(); //Creating HBaseAdmin object HBaseAdmin admin = new HBaseAdmin(conf); //Getting all the list of tables using HBaseAdmin object HTableDescriptor[] tableDescriptor = admin.listTables();
Шаг 2
Вы можете получить длину массива HTableDescriptor [], используя переменную длины класса HTableDescriptor . Получить имя таблицы из этого объекта, используя метод getNameAsString () . Запустите цикл ‘for’, используя их, и получите список таблиц в HBase.
Ниже приведена программа для вывода списка всех таблиц в HBase с использованием Java API.
import java.io.IOException; import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.hbase.HBaseConfiguration; import org.apache.hadoop.hbase.HTableDescriptor; import org.apache.hadoop.hbase.MasterNotRunningException; import org.apache.hadoop.hbase.client.HBaseAdmin; public class ListTables < public static void main(String args[])throws MasterNotRunningException, IOException< // Instantiating a configuration class Configuration conf = HBaseConfiguration.create(); // Instantiating HBaseAdmin class HBaseAdmin admin = new HBaseAdmin(conf); // Getting all the list of tables using HBaseAdmin object HTableDescriptor[] tableDescriptor = admin.listTables(); // printing all the table names. for (int i=0; i> >
Скомпилируйте и выполните вышеуказанную программу, как показано ниже.
$javac ListTables.java $java ListTables
Следующее должно быть выводом:
User emp
HBase – отключение таблицы
Отключение таблицы с помощью HBase Shell
Чтобы удалить таблицу или изменить ее настройки, необходимо сначала отключить таблицу с помощью команды отключения. Вы можете включить его, используя команду enable.
Ниже приведен синтаксис для отключения таблицы:
disable ‘emp’
пример
Ниже приведен пример, который показывает, как отключить таблицу.
hbase(main):025:0> disable 'emp' 0 row(s) in 1.2760 seconds
верификация
После отключения таблицы вы все еще можете ощутить ее существование с помощью команд list и существующие . Вы не можете отсканировать это. Это даст вам следующую ошибку.
hbase(main):028:0> scan 'emp' ROW COLUMN + CELL ERROR: emp is disabled.
выключен
Эта команда используется для определения, отключена ли таблица. Его синтаксис выглядит следующим образом.
hbase> is_disabled 'table name'
В следующем примере проверяется, отключена ли таблица с именем emp. Если он отключен, он вернет true, а если нет, то вернет false.
hbase(main):031:0> is_disabled 'emp' true 0 row(s) in 0.0440 seconds
отключить все
Эта команда используется для отключения всех таблиц, соответствующих данному регулярному выражению. Синтаксис команды disable_all приведен ниже.
hbase> disable_all 'r.*'
Предположим, что в HBase есть 5 таблиц, а именно: раджа, раджани, раджендра, раджеш и раджу. Следующий код отключит все таблицы, начинающиеся с raj.
hbase(main):002:07> disable_all 'raj.*' raja rajani rajendra rajesh raju Disable the above 5 tables (y/n)? y 5 tables successfully disabled
Отключить таблицу с помощью Java API
Чтобы проверить, отключена ли таблица, используется метод isTableDisabled (), а для отключения таблицы – метод disableTable () . Эти методы принадлежат классу HBaseAdmin . Следуйте приведенным ниже инструкциям, чтобы отключить таблицу.
Шаг 1
Создайте класс HBaseAdmin, как показано ниже.
// Creating configuration object Configuration conf = HBaseConfiguration.create(); // Creating HBaseAdmin object HBaseAdmin admin = new HBaseAdmin(conf);
Шаг 2
Убедитесь, что таблица отключена, используя метод isTableDisabled (), как показано ниже.
Boolean b = admin.isTableDisabled("emp");
Шаг 3
Если таблица не отключена, отключите ее, как показано ниже.
Ниже приведена полная программа для проверки, отключена ли таблица; если нет, то как это отключить.
import java.io.IOException; import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.hbase.HBaseConfiguration; import org.apache.hadoop.hbase.MasterNotRunningException; import org.apache.hadoop.hbase.client.HBaseAdmin; public class DisableTable < public static void main(String args[]) throws MasterNotRunningException, IOException< // Instantiating configuration class Configuration conf = HBaseConfiguration.create(); // Instantiating HBaseAdmin class HBaseAdmin admin = new HBaseAdmin(conf); // Verifying weather the table is disabled Boolean bool = admin.isTableDisabled("emp"); System.out.println(bool); // Disabling the table using HBaseAdmin object if(!bool)< admin.disableTable("emp"); System.out.println("Table disabled"); >> >
Скомпилируйте и выполните вышеуказанную программу, как показано ниже.
$javac DisableTable.java $java DsiableTable
Следующее должно быть выводом:
false Table disabled
HBase – Включение таблицы
Включение таблицы с помощью HBase Shell
Синтаксис для включения таблицы:
enable ‘emp’
пример
Ниже приведен пример включения таблицы.
hbase(main):005:0> enable 'emp' 0 row(s) in 0.4580 seconds
верификация
После включения таблицы отсканируйте ее. Если вы видите схему, ваша таблица успешно включена.
hbase(main):006:0> scan 'emp' ROW COLUMN + CELL 1 column = personal data:city, timestamp = 1417516501, value = hyderabad 1 column = personal data:name, timestamp = 1417525058, value = ramu 1 column = professional data:designation, timestamp = 1417532601, value = manager 1 column = professional data:salary, timestamp = 1417524244109, value = 50000 2 column = personal data:city, timestamp = 1417524574905, value = chennai 2 column = personal data:name, timestamp = 1417524556125, value = ravi 2 column = professional data:designation, timestamp = 14175292204, value = sr:engg 2 column = professional data:salary, timestamp = 1417524604221, value = 30000 3 column = personal data:city, timestamp = 1417524681780, value = delhi 3 column = personal data:name, timestamp = 1417524672067, value = rajesh 3 column = professional data:designation, timestamp = 14175246987, value = jr:engg 3 column = professional data:salary, timestamp = 1417524702514, value = 25000 3 row(s) in 0.0400 seconds
включен
Эта команда используется для определения, включена ли таблица. Его синтаксис выглядит следующим образом:
hbase> is_enabled 'table name'
Следующий код проверяет, включена ли таблица с именем emp . Если он включен, он вернет true, а если нет, то вернет false.
hbase(main):031:0> is_enabled 'emp' true 0 row(s) in 0.0440 seconds
Включить таблицу с помощью Java API
Чтобы проверить, включена ли таблица, используется метод isTableEnabled () ; и для включения таблицы используется метод enableTable () . Эти методы принадлежат классу HBaseAdmin . Следуйте инструкциям ниже, чтобы включить таблицу.
Шаг 1
Создайте класс HBaseAdmin, как показано ниже.
// Creating configuration object Configuration conf = HBaseConfiguration.create(); // Creating HBaseAdmin object HBaseAdmin admin = new HBaseAdmin(conf);
Шаг 2
Проверьте, включена ли таблица с помощью метода isTableEnabled (), как показано ниже.
Boolean bool = admin.isTableEnabled("emp");
Шаг 3
Если таблица не отключена, отключите ее, как показано ниже.
if(!bool)
Ниже приведена полная программа для проверки того, включена ли таблица, а если нет, то как ее включить.
import java.io.IOException; import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.hbase.HBaseConfiguration; import org.apache.hadoop.hbase.MasterNotRunningException; import org.apache.hadoop.hbase.client.HBaseAdmin; public class EnableTable < public static void main(String args[]) throws MasterNotRunningException, IOException< // Instantiating configuration class Configuration conf = HBaseConfiguration.create(); // Instantiating HBaseAdmin class HBaseAdmin admin = new HBaseAdmin(conf); // Verifying whether the table is disabled Boolean bool = admin.isTableEnabled("emp"); System.out.println(bool); // Enabling the table using HBaseAdmin object if(!bool)< admin.enableTable("emp"); System.out.println("Table Enabled"); >> >
Скомпилируйте и выполните вышеуказанную программу, как показано ниже.
$javac EnableTable.java $java EnableTable
Следующее должно быть выводом:
false Table Enabled
HBase – Опишите и измените
описывать
Эта команда возвращает описание таблицы. Его синтаксис выглядит следующим образом:
hbase> describe 'table name'
Ниже приведен вывод команды description в таблицу emp .
hbase(main):006:0> describe 'emp' DESCRIPTION ENABLED 'emp', , , ,изменять
Alter – команда, используемая для внесения изменений в существующую таблицу. С помощью этой команды вы можете изменить максимальное количество ячеек семейства столбцов, установить и удалить операторы области действия таблицы и удалить семейство столбцов из таблицы.
Изменение максимального количества ячеек семейства столбцов
Ниже приведен синтаксис для изменения максимального количества ячеек семейства столбцов.
hbase> alter 't1', NAME ⇒ 'f1', VERSIONS ⇒ 5В следующем примере максимальное количество ячеек установлено на 5.
hbase(main):003:0> alter 'emp', NAME ⇒ 'personal data', VERSIONS ⇒ 5 Updating all regions with the new schema. 0/1 regions updated. 1/1 regions updated. Done. 0 row(s) in 2.3050 secondsОператоры таблицы
Используя alter, вы можете устанавливать и удалять операторы области таблицы, такие как MAX_FILESIZE, READONLY, MEMSTORE_FLUSHSIZE, DEFERRED_LOG_FLUSH и т. Д.
Настройка только для чтения
Ниже приведен синтаксис, чтобы сделать таблицу только для чтения.
hbase>alter 't1', READONLY(option)В следующем примере мы сделали таблицу emp доступной только для чтения.
hbase(main):006:0> alter 'emp', READONLY Updating all regions with the new schema. 0/1 regions updated. 1/1 regions updated. Done. 0 row(s) in 2.2140 secondsУдаление Операторов Области Таблицы
Мы также можем удалить операторы области таблицы. Ниже приведен синтаксис для удаления «MAX_FILESIZE» из таблицы emp.
hbase> alter 't1', METHOD ⇒ 'table_att_unset', NAME ⇒ 'MAX_FILESIZE'Удаление семейства столбцов
Используя alter, вы также можете удалить семейство столбцов. Ниже приведен синтаксис для удаления семейства столбцов с помощью alter.
hbase> alter ‘ table name ’, ‘delete’ ⇒ ‘ column family ’Ниже приведен пример удаления семейства столбцов из таблицы emp.
Предположим, в HBase есть таблица с именем employee. Он содержит следующие данные:
hbase(main):006:0> scan 'employee' ROW COLUMN+CELL row1 column = personal:city, timestamp = 1418193767, value = hyderabad row1 column = personal:name, timestamp = 1418193806767, value = raju row1 column = professional:designation, timestamp = 1418193767, value = manager row1 column = professional:salary, timestamp = 1418193806767, value = 50000 1 row(s) in 0.0160 secondsТеперь давайте удалим семейство столбцов с именем professional с помощью команды alter.
hbase(main):007:0> alter 'employee','delete'⇒'professional' Updating all regions with the new schema. 0/1 regions updated. 1/1 regions updated. Done. 0 row(s) in 2.2380 secondsТеперь проверьте данные в таблице после внесения изменений. Обратите внимание, что столбец семейства «профессиональный» больше не существует, поскольку мы его удалили.
hbase(main):003:0> scan 'employee' ROW COLUMN + CELL row1 column = personal:city, timestamp = 14181936767, value = hyderabad row1 column = personal:name, timestamp = 1418193806767, value = raju 1 row(s) in 0.0830 secondsДобавление семейства столбцов с использованием Java API
Вы можете добавить семейство столбцов в таблицу, используя метод addColumn () класса HBAseAdmin . Следуйте приведенным ниже инструкциям, чтобы добавить семейство столбцов в таблицу.
Шаг 1
Создайте класс HBaseAdmin .
// Instantiating configuration object Configuration conf = HBaseConfiguration.create(); // Instantiating HBaseAdmin class HBaseAdmin admin = new HBaseAdmin(conf);Шаг 2
Метод addColumn () требует имя таблицы и объект класса HColumnDescriptor . Поэтому создайте экземпляр класса HColumnDescriptor . В свою очередь, конструктор HColumnDescriptor требует добавления имени семейства столбцов. Здесь мы добавляем семейство столбцов с именем «contactDetails» в существующую таблицу «employee».
// Instantiating columnDescriptor object HColumnDescriptor columnDescriptor = new HColumnDescriptor("contactDetails");Шаг 3
Добавьте семейство столбцов, используя метод addColumn . Передайте имя таблицы и объект класса HColumnDescriptor в качестве параметров этому методу.
// Adding column family admin.addColumn("employee", new HColumnDescriptor("columnDescriptor"));Ниже приведена полная программа для добавления семейства столбцов к существующей таблице.
import java.io.IOException; import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.hbase.HBaseConfiguration; import org.apache.hadoop.hbase.HColumnDescriptor; import org.apache.hadoop.hbase.MasterNotRunningException; import org.apache.hadoop.hbase.client.HBaseAdmin; public class AddColoumn < public static void main(String args[]) throws MasterNotRunningException, IOException< // Instantiating configuration class. Configuration conf = HBaseConfiguration.create(); // Instantiating HBaseAdmin class. HBaseAdmin admin = new HBaseAdmin(conf); // Instantiating columnDescriptor class HColumnDescriptor columnDescriptor = new HColumnDescriptor("contactDetails"); // Adding column family admin.addColumn("employee", columnDescriptor); System.out.println("coloumn added"); >>Скомпилируйте и выполните вышеуказанную программу, как показано ниже.
$javac AddColumn.java $java AddColumnПриведенная выше компиляция работает, только если вы указали путь к классу в « .bashrc ». Если вы этого не сделали, следуйте приведенной ниже процедуре, чтобы скомпилировать файл .java.
//if "/home/home/hadoop/hbase " is your Hbase home folder then. $javac -cp /home/hadoop/hbase/lib/*: Demo.javaЕсли все пойдет хорошо, он выдаст следующий вывод:
column addedУдаление семейства столбцов с помощью Java API
Вы можете удалить семейство столбцов из таблицы, используя метод deleteColumn () класса HBAseAdmin . Следуйте приведенным ниже инструкциям, чтобы добавить семейство столбцов в таблицу.
Шаг 1
Создайте класс HBaseAdmin .
// Instantiating configuration object Configuration conf = HBaseConfiguration.create(); // Instantiating HBaseAdmin class HBaseAdmin admin = new HBaseAdmin(conf);Шаг 2
Добавьте семейство столбцов, используя метод deleteColumn () . Передайте имя таблицы и имя семейства столбцов в качестве параметров этому методу.
// Deleting column family admin.deleteColumn("employee", "contactDetails");Ниже приведена полная программа для удаления семейства столбцов из существующей таблицы.
import java.io.IOException; import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.hbase.HBaseConfiguration; import org.apache.hadoop.hbase.MasterNotRunningException; import org.apache.hadoop.hbase.client.HBaseAdmin; public class DeleteColoumn < public static void main(String args[]) throws MasterNotRunningException, IOException< // Instantiating configuration class. Configuration conf = HBaseConfiguration.create(); // Instantiating HBaseAdmin class. HBaseAdmin admin = new HBaseAdmin(conf); // Deleting a column family admin.deleteColumn("employee","contactDetails"); System.out.println("coloumn deleted"); >>Скомпилируйте и выполните вышеуказанную программу, как показано ниже.
$javac DeleteColumn.java $java DeleteColumnСледующее должно быть выводом:
column deletedHBase – существует
Наличие таблицы с использованием HBase Shell
Вы можете проверить существование таблицы, используя команду существующие . В следующем примере показано, как использовать эту команду.
hbase(main):024:0> exists 'emp' Table emp does exist 0 row(s) in 0.0750 seconds ================================================================== hbase(main):015:0> exists 'student' Table student does not exist 0 row(s) in 0.0480 secondsПроверка существования таблицы с помощью Java API
Вы можете проверить существование таблицы в HBase, используя метод tableExists () класса HBaseAdmin . Выполните шаги, приведенные ниже, чтобы проверить существование таблицы в HBase.
Шаг 1
Instantiate the HBaseAdimn class // Instantiating configuration object Configuration conf = HBaseConfiguration.create(); // Instantiating HBaseAdmin class HBaseAdmin admin = new HBaseAdmin(conf);Шаг 2
Проверьте существование таблицы с помощью метода tableExists () .
Ниже приведена Java-программа для проверки существования таблицы в HBase с использованием Java-API.
import java.io.IOException; import org.apache.hadoop.hbase.HBaseConfiguration; import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.hbase.client.HBaseAdmin; public class TableExists < public static void main(String args[])throws IOException< // Instantiating configuration class Configuration conf = HBaseConfiguration.create(); // Instantiating HBaseAdmin class HBaseAdmin admin = new HBaseAdmin(conf); // Verifying the existance of the table boolean bool = admin.tableExists("emp"); System.out.println( bool); >>Скомпилируйте и выполните вышеуказанную программу, как показано ниже.
$javac TableExists.java $java TableExistsСледующее должно быть выводом:
trueHBase – сбросить таблицу
Отбрасывание таблицы с помощью HBase Shell
Используя команду drop , вы можете удалить таблицу. Прежде чем бросить стол, вы должны отключить его.
hbase(main):018:0> disable 'emp' 0 row(s) in 1.4580 seconds hbase(main):019:0> drop 'emp' 0 row(s) in 0.3060 secondsУбедитесь, что таблица удалена с помощью команды Существует.
hbase(main):020:07gt; exists 'emp' Table emp does not exist 0 row(s) in 0.0730 secondsdrop_all
Эта команда используется для удаления таблиц, соответствующих «регулярному выражению», данному в команде. Его синтаксис выглядит следующим образом:
hbase> drop_all ‘t.*’Примечание: перед тем, как бросить стол, вы должны отключить его.
пример
Предположим, есть таблицы с именами раджа, раджани, раджендра, раджеш и раджу.
hbase(main):017:0> list TABLE raja rajani rajendra rajesh raju 9 row(s) in 0.0270 secondsВсе эти таблицы начинаются с букв raj . Прежде всего, давайте отключим все эти таблицы с помощью команды disable_all, как показано ниже.
hbase(main):002:0> disable_all 'raj.*' raja rajani rajendra rajesh raju Disable the above 5 tables (y/n)? y 5 tables successfully disabledТеперь вы можете удалить их все с помощью команды drop_all, как указано ниже.
hbase(main):018:0> drop_all 'raj.*' raja rajani rajendra rajesh raju Drop the above 5 tables (y/n)? y 5 tables successfully droppedУдаление таблицы с использованием Java API
Вы можете удалить таблицу с помощью метода deleteTable () в классе HBaseAdmin . Следуйте приведенным ниже инструкциям, чтобы удалить таблицу с помощью API Java.
Шаг 1
Создайте класс HBaseAdmin.
// creating a configuration object Configuration conf = HBaseConfiguration.create(); // Creating HBaseAdmin object HBaseAdmin admin = new HBaseAdmin(conf);Шаг 2
Отключите таблицу с помощью метода disableTable () класса HBaseAdmin .
admin.disableTable("emp1");Шаг 3
Теперь удалите таблицу, используя метод deleteTable () класса HBaseAdmin .
admin.deleteTable("emp12");Ниже приведена полная Java-программа для удаления таблицы в HBase.
import java.io.IOException; import org.apache.hadoop.hbase.HBaseConfiguration; import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.hbase.client.HBaseAdmin; public class DeleteTable < public static void main(String[] args) throws IOException < // Instantiating configuration class Configuration conf = HBaseConfiguration.create(); // Instantiating HBaseAdmin class HBaseAdmin admin = new HBaseAdmin(conf); // disabling table named emp admin.disableTable("emp12"); // Deleting emp admin.deleteTable("emp12"); System.out.println("Table deleted"); >>Скомпилируйте и выполните вышеуказанную программу, как показано ниже.
$javac DeleteTable.java $java DeleteTableСледующее должно быть выводом:
Table deletedHBase – выключение
выход
Вы выходите из оболочки, набирая команду выхода .
hbase(main):021:0> exitОстановка HBase
Чтобы остановить HBase, перейдите в домашнюю папку HBase и введите следующую команду.
./bin/stop-hbase.shОстановка HBase с использованием Java API
Вы можете выключить HBase, используя метод shutdown () класса HBaseAdmin . Следуйте инструкциям ниже, чтобы выключить HBase:
Шаг 1
Создайте экземпляр класса HbaseAdmin.
// Instantiating configuration object Configuration conf = HBaseConfiguration.create(); // Instantiating HBaseAdmin object HBaseAdmin admin = new HBaseAdmin(conf);Шаг 2
Завершите работу HBase с помощью метода shutdown () класса HBaseAdmin .
admin.shutdown();Ниже приведена программа для остановки HBase.
import java.io.IOException; import org.apache.hadoop.hbase.HBaseConfiguration; import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.hbase.client.HBaseAdmin; public class ShutDownHbase < public static void main(String args[])throws IOException < // Instantiating configuration class Configuration conf = HBaseConfiguration.create(); // Instantiating HBaseAdmin class HBaseAdmin admin = new HBaseAdmin(conf); // Shutting down HBase System.out.println("Shutting down hbase"); admin.shutdown(); >>Скомпилируйте и выполните вышеуказанную программу, как показано ниже.
$javac ShutDownHbase.java $java ShutDownHbaseСледующее должно быть выводом:
Shutting down hbaseHBase – клиентский API
В этой главе описывается клиентский API Java для HBase, который используется для выполнения операций CRUD над таблицами HBase. HBase написан на Java и имеет собственный API Java. Поэтому он обеспечивает программный доступ к языку манипулирования данными (DML).
Конфигурация класса HBase
Добавляет файлы конфигурации HBase в конфигурацию. Этот класс принадлежит пакету org.apache.hadoop.hbase .
Методы и описание
статический org.apache.hadoop.conf.Configuration create ()
Этот метод создает конфигурацию с ресурсами HBase.
статический org.apache.hadoop.conf.Configuration create ()
Этот метод создает конфигурацию с ресурсами HBase.
Класс HTable
HTable – это внутренний класс HBase, представляющий таблицу HBase. Это реализация таблицы, которая используется для связи с одной таблицей HBase. Этот класс принадлежит классу org.apache.hadoop.hbase.client .
Конструкторы
HTable (TableName tableName, соединение ClusterConnection, пул ExecutorService)
Используя этот конструктор, вы можете создать объект для доступа к таблице HBase.
HTable (TableName tableName, соединение ClusterConnection, пул ExecutorService)
Используя этот конструктор, вы можете создать объект для доступа к таблице HBase.
Методы и описание
void close ()
Освобождает все ресурсы HTable.
аннулировать удаление (Delete delete)
Удаляет указанные ячейки / строки.
логическое существует (Get Get)
Используя этот метод, вы можете проверить наличие столбцов в таблице, как указано в Get.
Результат получить (Получить получить)
Извлекает определенные ячейки из данного ряда.
org.apache.hadoop.conf.Configuration getConfiguration ()
Возвращает объект конфигурации, используемый этим экземпляром.
TableName getName ()
Возвращает экземпляр имени таблицы этой таблицы.
HTableDescriptor getTableDescriptor ()
Возвращает дескриптор таблицы для этой таблицы.
byte [] getTableName ()
Возвращает имя этой таблицы.
Пустота положить (положить положить)
Используя этот метод, вы можете вставить данные в таблицу.
void close ()
Освобождает все ресурсы HTable.
аннулировать удаление (Delete delete)
Удаляет указанные ячейки / строки.
логическое существует (Get Get)
Используя этот метод, вы можете проверить наличие столбцов в таблице, как указано в Get.
Результат получить (Получить получить)
Извлекает определенные ячейки из данного ряда.
org.apache.hadoop.conf.Configuration getConfiguration ()
Возвращает объект конфигурации, используемый этим экземпляром.
TableName getName ()
Возвращает экземпляр имени таблицы этой таблицы.
HTableDescriptor getTableDescriptor ()
Возвращает дескриптор таблицы для этой таблицы.
byte [] getTableName ()
Возвращает имя этой таблицы.
Пустота положить (положить положить)
Используя этот метод, вы можете вставить данные в таблицу.
Класс Путь
Этот класс используется для выполнения операций Put для одной строки. Он принадлежит пакету org.apache.hadoop.hbase.client .
Конструкторы
Put (строка байта [])
Используя этот конструктор, вы можете создать операцию Put для указанной строки.
Put (byte [] rowArray, int rowOffset, int rowLength)
Используя этот конструктор, вы можете сделать копию переданного ключа строки, чтобы сохранить его локальным.
Put (byte [] rowArray, int rowOffset, int rowLength, long ts)
Используя этот конструктор, вы можете сделать копию переданного ключа строки, чтобы сохранить его локальным.
Put (byte [] row, long ts)
Используя этот конструктор, мы можем создать операцию Put для указанной строки, используя данную временную метку.
Put (строка байта [])
Используя этот конструктор, вы можете создать операцию Put для указанной строки.
Put (byte [] rowArray, int rowOffset, int rowLength)
Используя этот конструктор, вы можете сделать копию переданного ключа строки, чтобы сохранить его локальным.
Put (byte [] rowArray, int rowOffset, int rowLength, long ts)
Используя этот конструктор, вы можете сделать копию переданного ключа строки, чтобы сохранить его локальным.
Put (byte [] row, long ts)
Используя этот конструктор, мы можем создать операцию Put для указанной строки, используя данную временную метку.
методы
Положите add (семейство byte [], спецификатор byte [], значение byte [])
Добавляет указанный столбец и значение к этой операции Put.
Положите add (семейство byte [], спецификатор byte [], long ts, значение byte [])
Добавляет указанный столбец и значение с указанной меткой времени в качестве версии для этой операции Put.
Поместите add (семейство byte [], спецификатор ByteBuffer, long ts, значение ByteBuffer)
Добавляет указанный столбец и значение с указанной меткой времени в качестве версии для этой операции Put.
Поместите add (семейство byte [], спецификатор ByteBuffer, long ts, значение ByteBuffer)
Добавляет указанный столбец и значение с указанной меткой времени в качестве версии для этой операции Put.
Положите add (семейство byte [], спецификатор byte [], значение byte [])
Добавляет указанный столбец и значение к этой операции Put.
Положите add (семейство byte [], спецификатор byte [], long ts, значение byte [])
Добавляет указанный столбец и значение с указанной меткой времени в качестве версии для этой операции Put.
Поместите add (семейство byte [], спецификатор ByteBuffer, long ts, значение ByteBuffer)
Добавляет указанный столбец и значение с указанной меткой времени в качестве версии для этой операции Put.
Поместите add (семейство byte [], спецификатор ByteBuffer, long ts, значение ByteBuffer)
Добавляет указанный столбец и значение с указанной меткой времени в качестве версии для этой операции Put.
Класс Получить
Этот класс используется для выполнения операций Get в одной строке. Этот класс принадлежит пакету org.apache.hadoop.hbase.client .
Конструктор
Получить (строка байта [])
Используя этот конструктор, вы можете создать операцию Get для указанной строки.
Получить (строка байта [])
Используя этот конструктор, вы можете создать операцию Get для указанной строки.
методы
Получить addColumn (семейство byte [], спецификатор byte [])
Извлекает столбец из определенного семейства с указанным квалификатором.
Получить addFamily (семейство byte [])
Извлекает все столбцы из указанного семейства.
Получить addColumn (семейство byte [], спецификатор byte [])
Извлекает столбец из определенного семейства с указанным квалификатором.
Получить addFamily (семейство byte [])
Извлекает все столбцы из указанного семейства.
Класс Удалить
Этот класс используется для выполнения операций удаления в одной строке. Чтобы удалить всю строку, создайте экземпляр объекта Delete с удаляемой строкой. Этот класс принадлежит пакету org.apache.hadoop.hbase.client .
Конструктор
Удалить (строка байта [])
Создает операцию удаления для указанной строки.
Удалить (byte [] rowArray, int rowOffset, int rowLength)
Создает операцию удаления для указанной строки и метки времени.
Удалить (byte [] rowArray, int rowOffset, int rowLength, long ts)
Создает операцию удаления для указанной строки и метки времени.
Удалить (строка байта [], длинная метка времени)
Создает операцию удаления для указанной строки и метки времени.
Удалить (строка байта [])
Создает операцию удаления для указанной строки.
Удалить (byte [] rowArray, int rowOffset, int rowLength)
Создает операцию удаления для указанной строки и метки времени.
Удалить (byte [] rowArray, int rowOffset, int rowLength, long ts)
Создает операцию удаления для указанной строки и метки времени.
Удалить (строка байта [], длинная метка времени)
Создает операцию удаления для указанной строки и метки времени.
методы
Удалить addColumn (семейство byte [], спецификатор byte [])
Удаляет последнюю версию указанного столбца.
Удалить addColumns (семейство byte [], спецификатор byte [], длинная метка времени)
Удаляет все версии указанного столбца с отметкой времени, меньшей или равной указанной отметке времени.
Удалить addFamily (семейство byte [])
Удаляет все версии всех столбцов указанного семейства.
Удалить addFamily (семейство byte [], длинная метка времени)
Удаляет все столбцы указанного семейства с отметкой времени, меньшей или равной указанной отметке времени.
Удалить addColumn (семейство byte [], спецификатор byte [])
Удаляет последнюю версию указанного столбца.
Удалить addColumns (семейство byte [], спецификатор byte [], длинная метка времени)
Удаляет все версии указанного столбца с отметкой времени, меньшей или равной указанной отметке времени.
Удалить addFamily (семейство byte [])
Удаляет все версии всех столбцов указанного семейства.
Удалить addFamily (семейство byte [], длинная метка времени)
Удаляет все столбцы указанного семейства с отметкой времени, меньшей или равной указанной отметке времени.
Результат класса
Этот класс используется для получения результата одной строки запроса Get или Scan.
Конструкторы
Используя этот конструктор, вы можете создать пустой результат без полезной нагрузки KeyValue; возвращает ноль, если вы вызываете raw Cells ().
Используя этот конструктор, вы можете создать пустой результат без полезной нагрузки KeyValue; возвращает ноль, если вы вызываете raw Cells ().
методы
byte [] getValue (семейство byte [], спецификатор byte [])
Этот метод используется для получения последней версии указанного столбца.
byte [] getRow ()
Этот метод используется для получения ключа строки, соответствующего строке, из которой был создан этот результат.
byte [] getValue (семейство byte [], спецификатор byte [])
Этот метод используется для получения последней версии указанного столбца.
byte [] getRow ()
Этот метод используется для получения ключа строки, соответствующего строке, из которой был создан этот результат.
HBase – Создание данных
Вставка данных с помощью HBase Shell
Эта глава демонстрирует, как создавать данные в таблице HBase. Для создания данных в таблице HBase используются следующие команды и методы:
- поставить команду,
- метод add () класса Put и
- Метод put () класса HTable .
поставить команду,
метод add () класса Put и
Метод put () класса HTable .
В качестве примера, мы собираемся создать следующую таблицу в HBase.

Используя команду put , вы можете вставить строки в таблицу. Его синтаксис выглядит следующим образом:
put ’’,’row1’,’’,’’
Вставка первой строки
Давайте вставим значения первой строки в таблицу emp, как показано ниже.
hbase(main):005:0> put 'emp','1','personal data:name','raju' 0 row(s) in 0.6600 seconds hbase(main):006:0> put 'emp','1','personal data:city','hyderabad' 0 row(s) in 0.0410 seconds hbase(main):007:0> put 'emp','1','professional data:designation','manager' 0 row(s) in 0.0240 seconds hbase(main):007:0> put 'emp','1','professional data:salary','50000' 0 row(s) in 0.0240 seconds
Вставьте оставшиеся строки, используя команду put таким же образом. Если вы вставите всю таблицу, вы получите следующий результат.
hbase(main):022:0> scan 'emp' ROW COLUMN+CELL 1 column=personal data:city, timestamp=1417524216501, value=hyderabad 1 column=personal data:name, timestamp=1417524185058, value=ramu 1 column=professional data:designation, timestamp=1417524232601, value=manager 1 column=professional data:salary, timestamp=1417524244109, value=50000 2 column=personal data:city, timestamp=1417524574905, value=chennai 2 column=personal data:name, timestamp=1417524556125, value=ravi 2 column=professional data:designation, timestamp=1417524592204, value=sr:engg 2 column=professional data:salary, timestamp=1417524604221, value=30000 3 column=personal data:city, timestamp=1417524681780, value=delhi 3 column=personal data:name, timestamp=1417524672067, value=rajesh 3 column=professional data:designation, timestamp=1417524693187, value=jr:engg 3 column=professional data:salary, timestamp=1417524702514, value=25000
Вставка данных с использованием Java API
Вы можете вставить данные в Hbase, используя метод add () класса Put . Вы можете сохранить его, используя метод put () класса HTable . Эти классы принадлежат пакету org.apache.hadoop.hbase.client . Ниже приведены шаги для создания данных в таблице HBase.
Шаг 1: Создание класса конфигурации
Класс Configuration добавляет файлы конфигурации HBase к своему объекту. Вы можете создать объект конфигурации с помощью метода create () класса HbaseConfiguration, как показано ниже.
Configuration conf = HbaseConfiguration.create();
Шаг 2: Создание класса HTable
У вас есть класс HTable , реализация Table в HBase. Этот класс используется для связи с одной таблицей HBase. При создании экземпляра этого класса он принимает объект конфигурации и имя таблицы в качестве параметров. Вы можете создать экземпляр класса HTable, как показано ниже.
HTable hTable = new HTable(conf, tableName);
Шаг 3: Создание PutClass
Для вставки данных в таблицу HBase используется метод add () и его варианты. Этот метод принадлежит Put , поэтому создайте экземпляр класса put. Этот класс требует имя строки, в которую вы хотите вставить данные, в строковом формате. Вы можете создать экземпляр класса Put, как показано ниже.
Put p = new Put(Bytes.toBytes("row1"));
Шаг 4: Вставить данные
Метод add () класса Put используется для вставки данных. Требуются 3-байтовые массивы, представляющие семейство столбцов, квалификатор столбца (имя столбца) и значение для вставки, соответственно. Вставьте данные в таблицу HBase, используя метод add (), как показано ниже.
p.add(Bytes.toBytes("coloumn family "), Bytes.toBytes("column name"),Bytes.toBytes("value"));
Шаг 5: сохранить данные в таблице
После вставки необходимых строк сохраните изменения, добавив экземпляр put в метод put () класса HTable, как показано ниже.
hTable.put(p);
Шаг 6: Закройте экземпляр HTable
После создания данных в таблице HBase закройте экземпляр HTable с помощью метода close (), как показано ниже.
hTable.close();
Ниже приведена полная программа для создания данных в HBase Table.
import java.io.IOException; import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.hbase.HBaseConfiguration; import org.apache.hadoop.hbase.client.HTable; import org.apache.hadoop.hbase.client.Put; import org.apache.hadoop.hbase.util.Bytes; public class InsertData < public static void main(String[] args) throws IOException < // Instantiating Configuration class Configuration config = HBaseConfiguration.create(); // Instantiating HTable class HTable hTable = new HTable(config, "emp"); // Instantiating Put class // accepts a row name. Put p = new Put(Bytes.toBytes("row1")); // adding values using add() method // accepts column family name, qualifier/row name ,value p.add(Bytes.toBytes("personal"), Bytes.toBytes("name"),Bytes.toBytes("raju")); p.add(Bytes.toBytes("personal"), Bytes.toBytes("city"),Bytes.toBytes("hyderabad")); p.add(Bytes.toBytes("professional"),Bytes.toBytes("designation"), Bytes.toBytes("manager")); p.add(Bytes.toBytes("professional"),Bytes.toBytes("salary"), Bytes.toBytes("50000")); // Saving the put Instance to the HTable. hTable.put(p); System.out.println("data inserted"); // closing HTable hTable.close(); >>
Скомпилируйте и выполните вышеуказанную программу, как показано ниже.
$javac InsertData.java $java InsertData
Следующее должно быть выводом:
data inserted
HBase – обновить данные
Обновление данных с помощью HBase Shell
Вы можете обновить существующее значение ячейки, используя команду put . Для этого просто следуйте тому же синтаксису и укажите новое значение, как показано ниже.
put ‘table name’,’row ’,'Column family:column name',’new value’
Вновь данное значение заменяет существующее значение, обновляя строку.
пример
Предположим, что в HBase есть таблица emp со следующими данными.
hbase(main):003:0> scan 'emp' ROW COLUMN + CELL row1 column = personal:name, timestamp = 1418051555, value = raju row1 column = personal:city, timestamp = 1418275907, value = Hyderabad row1 column = professional:designation, timestamp = 14180555,value = manager row1 column = professional:salary, timestamp = 1418035791555,value = 50000 1 row(s) in 0.0100 seconds
Следующая команда обновит значение города сотрудника по имени Раджу до Дели.
hbase(main):002:0> put 'emp','row1','personal:city','Delhi' 0 row(s) in 0.0400 seconds
Обновленная таблица выглядит следующим образом: вы можете увидеть, что город Раджу был изменен на «Дели».
hbase(main):003:0> scan 'emp' ROW COLUMN + CELL row1 column = personal:name, timestamp = 1418035791555, value = raju row1 column = personal:city, timestamp = 1418274645907, value = Delhi row1 column = professional:designation, timestamp = 141857555,value = manager row1 column = professional:salary, timestamp = 1418039555, value = 50000 1 row(s) in 0.0100 seconds
Обновление данных с использованием Java API
Вы можете обновить данные в определенной ячейке, используя метод put () . Следуйте приведенным ниже инструкциям, чтобы обновить существующее значение ячейки таблицы.
Шаг 1: Создание класса конфигурации
Класс конфигурации добавляет файлы конфигурации HBase к своему объекту. Вы можете создать объект конфигурации с помощью метода create () класса HbaseConfiguration, как показано ниже.
Configuration conf = HbaseConfiguration.create();
Шаг 2: Создание класса HTable
У вас есть класс HTable , реализация Table в HBase. Этот класс используется для связи с одной таблицей HBase. При создании экземпляра этого класса он принимает объект конфигурации и имя таблицы в качестве параметров. Вы можете создать экземпляр класса HTable, как показано ниже.
HTable hTable = new HTable(conf, tableName);
Шаг 3: Создание класса Put
Для вставки данных в таблицу HBase используется метод add () и его варианты. Этот метод принадлежит Put , поэтому создайте экземпляр класса put . Этот класс требует имя строки, в которую вы хотите вставить данные, в строковом формате. Вы можете создать экземпляр класса Put, как показано ниже.
Put p = new Put(Bytes.toBytes("row1"));
Шаг 4: Обновите существующую ячейку
Метод add () класса Put используется для вставки данных. Требуются 3-байтовые массивы, представляющие семейство столбцов, квалификатор столбца (имя столбца) и значение для вставки, соответственно. Вставьте данные в таблицу HBase, используя метод add (), как показано ниже.
p.add(Bytes.toBytes("coloumn family "), Bytes.toBytes("column name"),Bytes.toBytes("value")); p.add(Bytes.toBytes("personal"), Bytes.toBytes("city"),Bytes.toBytes("Delih"));
Шаг 5: сохранить данные в таблице
После вставки необходимых строк сохраните изменения, добавив экземпляр put в метод put () класса HTable, как показано ниже.
hTable.put(p);
Шаг 6: Закройте экземпляр HTable
После создания данных в HBase Table закройте экземпляр HTable с помощью метода close (), как показано ниже.
hTable.close();
Ниже приведена полная программа для обновления данных в конкретной таблице.
import java.io.IOException; import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.hbase.HBaseConfiguration; import org.apache.hadoop.hbase.client.HTable; import org.apache.hadoop.hbase.client.Put; import org.apache.hadoop.hbase.util.Bytes; public class UpdateData < public static void main(String[] args) throws IOException < // Instantiating Configuration class Configuration config = HBaseConfiguration.create(); // Instantiating HTable class HTable hTable = new HTable(config, "emp"); // Instantiating Put class //accepts a row name Put p = new Put(Bytes.toBytes("row1")); // Updating a cell value p.add(Bytes.toBytes("personal"), Bytes.toBytes("city"),Bytes.toBytes("Delih")); // Saving the put Instance to the HTable. hTable.put(p); System.out.println("data Updated"); // closing HTable hTable.close(); >>
Скомпилируйте и выполните вышеуказанную программу, как показано ниже.
$javac UpdateData.java $java UpdateData
Следующее должно быть выводом:
data Updated
HBase – чтение данных
Чтение данных с использованием HBase Shell
Команда get и метод get () класса HTable используются для чтения данных из таблицы в HBase. Используя команду get , вы можете получить одну строку данных за раз. Его синтаксис выглядит следующим образом:
get ’’,’row1’
пример
В следующем примере показано, как использовать команду get. Давайте просканируем первую строку таблицы emp .
hbase(main):012:0> get 'emp', '1' COLUMN CELL personal : city timestamp = 1417521848375, value = hyderabad personal : name timestamp = 1417521785385, value = ramu professional: designation timestamp = 1417521885277, value = manager professional: salary timestamp = 1417521903862, value = 50000 4 row(s) in 0.0270 seconds
Чтение определенной колонки
Ниже приведен синтаксис для чтения определенного столбца с использованием метода get .
hbase> get 'table name', ‘rowid’,
пример
Ниже приведен пример для чтения определенного столбца в таблице HBase.
hbase(main):015:0> get 'emp', 'row1', COLUMN CELL personal:name timestamp = 1418035791555, value = raju 1 row(s) in 0.0080 seconds
Чтение данных с использованием Java API
Чтобы прочитать данные из таблицы HBase, используйте метод get () класса HTable. Этот метод требует экземпляр класса Get . Следуйте приведенным ниже инструкциям, чтобы получить данные из таблицы HBase.
Шаг 1: Создание класса конфигурации
Класс конфигурации добавляет файлы конфигурации HBase к своему объекту. Вы можете создать объект конфигурации с помощью метода create () класса HbaseConfiguration, как показано ниже.
Configuration conf = HbaseConfiguration.create();
Шаг 2: Создание класса HTable
У вас есть класс HTable , реализация Table в HBase. Этот класс используется для связи с одной таблицей HBase. При создании экземпляра этого класса он принимает объект конфигурации и имя таблицы в качестве параметров. Вы можете создать экземпляр класса HTable, как показано ниже.
HTable hTable = new HTable(conf, tableName);
Шаг 3: Создание класса Get
Вы можете извлечь данные из таблицы HBase, используя метод get () класса HTable . Этот метод извлекает ячейку из данной строки. Требуется объект класса Get в качестве параметра. Создайте его, как показано ниже.
Get get = new Get(toBytes("row1"));
Шаг 4: Чтение данных
При получении данных вы можете получить одну строку по идентификатору, или получить набор строк по набору идентификаторов строк, или отсканировать всю таблицу или подмножество строк.
Вы можете получить данные таблицы HBase, используя варианты метода add в классе Get .
Чтобы получить определенный столбец из определенного семейства столбцов, используйте следующий метод.
get.addFamily(personal)
Чтобы получить все столбцы из определенного семейства столбцов, используйте следующий метод.
get.addColumn(personal, name)
Шаг 5: Получите результат
Получите результат, передав свой экземпляр класса Get методу get класса HTable . Этот метод возвращает объект класса Result , который содержит запрошенный результат. Ниже приведено использование метода get () .
Result result = table.get(g);
Шаг 6: чтение значений из экземпляра результата
Класс Result предоставляет метод getValue () для чтения значений из своего экземпляра. Используйте его, как показано ниже, чтобы прочитать значения из экземпляра Result .
byte [] value = result.getValue(Bytes.toBytes("personal"),Bytes.toBytes("name")); byte [] value1 = result.getValue(Bytes.toBytes("personal"),Bytes.toBytes("city"));
Ниже приведена полная программа для чтения значений из таблицы HBase.
import java.io.IOException; import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.hbase.HBaseConfiguration; import org.apache.hadoop.hbase.client.Get; import org.apache.hadoop.hbase.client.HTable; import org.apache.hadoop.hbase.client.Result; import org.apache.hadoop.hbase.util.Bytes; public class RetriveData < public static void main(String[] args) throws IOException, Exception< // Instantiating Configuration class Configuration config = HBaseConfiguration.create(); // Instantiating HTable class HTable table = new HTable(config, "emp"); // Instantiating Get class Get g = new Get(Bytes.toBytes("row1")); // Reading the data Result result = table.get(g); // Reading values from Result class object byte [] value = result.getValue(Bytes.toBytes("personal"),Bytes.toBytes("name")); byte [] value1 = result.getValue(Bytes.toBytes("personal"),Bytes.toBytes("city")); // Printing the values String name = Bytes.toString(value); String city = Bytes.toString(value1); System.out.println("name: " + name + " city: " + city); >>
Скомпилируйте и выполните вышеуказанную программу, как показано ниже.
$javac RetriveData.java $java RetriveData
Следующее должно быть выводом:
name: Raju city: Delhi
HBase – Удалить данные
Удаление определенной ячейки в таблице
Используя команду удаления , вы можете удалить определенную ячейку в таблице. Синтаксис команды удаления выглядит следующим образом:
delete ‘’, ‘’, ‘’, ‘’
пример
Вот пример для удаления определенной ячейки. Здесь мы удаляем зарплату.
hbase(main):006:0> delete 'emp', '1', 'personal data:city', 1417521848375 0 row(s) in 0.0060 seconds
Удаление всех ячеек в таблице
Используя команду «deleteall», вы можете удалить все ячейки подряд. Ниже приведен синтаксис команды deleteall.
deleteall ‘’, ‘’,
пример
Вот пример команды «deleteall», где мы удаляем все ячейки строки 1 таблицы emp.
hbase(main):007:0> deleteall 'emp','1' 0 row(s) in 0.0240 seconds
Проверьте таблицу с помощью команды сканирования . Снимок таблицы после удаления таблицы приведен ниже.
hbase(main):022:0> scan 'emp' ROW COLUMN + CELL 2 column = personal data:city, timestamp = 1417524574905, value = chennai 2 column = personal data:name, timestamp = 1417524556125, value = ravi 2 column = professional data:designation, timestamp = 1417524204, value = sr:engg 2 column = professional data:salary, timestamp = 1417524604221, value = 30000 3 column = personal data:city, timestamp = 1417524681780, value = delhi 3 column = personal data:name, timestamp = 1417524672067, value = rajesh 3 column = professional data:designation, timestamp = 1417523187, value = jr:engg 3 column = professional data:salary, timestamp = 1417524702514, value = 25000
Удаление данных с использованием Java API
Вы можете удалить данные из таблицы HBase, используя метод delete () класса HTable . Следуйте приведенным ниже инструкциям, чтобы удалить данные из таблицы.
Шаг 1: Создание класса конфигурации
Класс конфигурации добавляет файлы конфигурации HBase к своему объекту. Вы можете создать объект конфигурации с помощью метода create () класса HbaseConfiguration, как показано ниже.
Configuration conf = HbaseConfiguration.create();
Шаг 2: Создание класса HTable
У вас есть класс HTable , реализация Table в HBase. Этот класс используется для связи с одной таблицей HBase. При создании экземпляра этого класса он принимает объект конфигурации и имя таблицы в качестве параметров. Вы можете создать экземпляр класса HTable, как показано ниже.
HTable hTable = new HTable(conf, tableName);
Шаг 3: Создание класса удаления
Создайте класс Delete , передав идентификатор строки, которая должна быть удалена, в формате байтового массива. Вы также можете передать метку времени и Rowlock этому конструктору.
Delete delete = new Delete(toBytes("row1"));
Шаг 4. Выберите данные для удаления
Вы можете удалить данные, используя методы удаления класса Delete . Этот класс имеет различные методы удаления. Выберите столбцы или семейства столбцов, которые будут удалены с помощью этих методов. Посмотрите на следующие примеры, которые показывают использование методов класса Delete.
delete.deleteColumn(Bytes.toBytes("personal"), Bytes.toBytes("name")); delete.deleteFamily(Bytes.toBytes("professional"));
Шаг 5: Удалить данные
Удалите выбранные данные, передав экземпляр delete методу delete () класса HTable, как показано ниже.
table.delete(delete);
Шаг 6: Закройте HTableInstance
После удаления данных закройте экземпляр HTable .
table.close();
Ниже приведена полная программа для удаления данных из таблицы HBase.
import java.io.IOException; import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.hbase.HBaseConfiguration; import org.apache.hadoop.hbase.client.Delete; import org.apache.hadoop.hbase.client.HTable; import org.apache.hadoop.hbase.util.Bytes; public class DeleteData < public static void main(String[] args) throws IOException < // Instantiating Configuration class Configuration conf = HBaseConfiguration.create(); // Instantiating HTable class HTable table = new HTable(conf, "employee"); // Instantiating Delete class Delete delete = new Delete(Bytes.toBytes("row1")); delete.deleteColumn(Bytes.toBytes("personal"), Bytes.toBytes("name")); delete.deleteFamily(Bytes.toBytes("professional")); // deleting the data table.delete(delete); // closing the HTable object table.close(); System.out.println("data deleted. "); >>
Скомпилируйте и выполните вышеуказанную программу, как показано ниже.
$javac Deletedata.java $java DeleteData
Следующее должно быть выводом:
data deleted
HBase – Сканирование
Сканирование с использованием HBase Shell
Команда сканирования используется для просмотра данных в HTable. Используя команду сканирования, вы можете получить данные таблицы. Его синтаксис выглядит следующим образом:
scan ‘’
пример
В следующем примере показано, как читать данные из таблицы с помощью команды сканирования. Здесь мы читаем таблицу emp .
hbase(main):010:0> scan 'emp' ROW COLUMN + CELL 1 column = personal data:city, timestamp = 1417521848375, value = hyderabad 1 column = personal data:name, timestamp = 1417521785385, value = ramu 1 column = professional data:designation, timestamp = 1417585277,value = manager 1 column = professional data:salary, timestamp = 1417521903862, value = 50000 1 row(s) in 0.0370 seconds
Сканирование с использованием Java API
Полная программа для сканирования всей таблицы данных с использованием Java API выглядит следующим образом.
import java.io.IOException; import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.hbase.HBaseConfiguration; import org.apache.hadoop.hbase.util.Bytes; import org.apache.hadoop.hbase.client.HTable; import org.apache.hadoop.hbase.client.Result; import org.apache.hadoop.hbase.client.ResultScanner; import org.apache.hadoop.hbase.client.Scan; public class ScanTable < public static void main(String args[]) throws IOException< // Instantiating Configuration class Configuration config = HBaseConfiguration.create(); // Instantiating HTable class HTable table = new HTable(config, "emp"); // Instantiating the Scan class Scan scan = new Scan(); // Scanning the required columns scan.addColumn(Bytes.toBytes("personal"), Bytes.toBytes("name")); scan.addColumn(Bytes.toBytes("personal"), Bytes.toBytes("city")); // Getting the scan result ResultScanner scanner = table.getScanner(scan); // Reading values from scan result for (Result result = scanner.next(); result != null; result = Scanner.next()) System.out.println("Found row : " + result); //closing the scanner scanner.close(); >>
Скомпилируйте и выполните вышеуказанную программу, как показано ниже.
$javac ScanTable.java $java ScanTable
Следующее должно быть выводом:
Found row : keyvalues=
HBase – считать и усекать
подсчитывать
Вы можете посчитать количество строк в таблице, используя команду count . Его синтаксис выглядит следующим образом:
count ‘’
После удаления первой строки таблица emp будет иметь две строки. Проверьте это, как показано ниже.
hbase(main):023:0> count 'emp' 2 row(s) in 0.090 seconds ⇒ 2
усекать
Эта команда отключает отбрасывание и воссоздает таблицу. Синтаксис усечения выглядит следующим образом:
hbase> truncate 'table name'
пример
Ниже приведен пример команды truncate. Здесь мы усекли таблицу emp .
hbase(main):011:0> truncate 'emp' Truncating 'one' table (it may take a while): - Disabling table. - Truncating table. 0 row(s) in 1.5950 seconds
После усечения таблицы используйте команду сканирования для проверки. Вы получите таблицу с нулевыми строками.
hbase(main):017:0> scan ‘emp’ ROW COLUMN + CELL 0 row(s) in 0.3110 seconds
HBase – Безопасность
Мы можем предоставлять и отзывать разрешения для пользователей в HBase. В целях безопасности существует три команды: grant, revoke и user_permission.
даровать
Команда grant предоставляет определенные права, такие как чтение, запись, выполнение и администратор таблицы, определенному пользователю. Синтаксис команды предоставления выглядит следующим образом:
hbase> grant [ [ []]
Мы можем предоставить пользователю ноль или более привилегий из набора RWXCA, где
- R – представляет привилегию чтения.
- W – представляет привилегию записи.
- X – представляет привилегию выполнения.
- C – представляет привилегию создания.
- A – представляет привилегию администратора.
Ниже приведен пример, который предоставляет все привилегии пользователю с именем «Tutorialspoint».
hbase(main):018:0> grant 'Tutorialspoint', 'RWXCA'
отзывать
Команда revoke используется для отзыва прав доступа пользователя к таблице. Его синтаксис выглядит следующим образом:
hbase> revoke
Следующий код отменяет все разрешения от пользователя с именем «Tutorialspoint».
hbase(main):006:0> revoke 'Tutorialspoint'
user_permission
Эта команда используется для получения списка всех разрешений для конкретной таблицы. Синтаксис user_permission выглядит следующим образом:
hbase>user_permission ‘tablename’
В следующем коде перечислены все права пользователя таблицы emp.
Big Data от А до Я. Часть 4: Hbase
Привет, Хабр! Наконец-то долгожданная четвёртая статья нашего цикла о больших данных. В этой статье мы поговорим про такой замечательный инструмент как Hbase, который в последнее время завоевал большую популярность: например Facebook использует его в качестве основы своей системы обмена сообщений, а мы в data-centric alliance используем hbase в качестве основного хранилища сырых данных для нашей платформы управления данными Facetz.DCA
В статье будет рассказано про концепцию Big Table и её свободную реализацию, особенности работы и отличие как от классических реляционных баз данных (таких как MySQL и Oracle), так и key-value хранилищ, таких как Redis, Aerospike и memcached.
Заинтересовало? Добро пожаловать под кат.

Кто и зачем придумал Hbase
Как обычно — начнём с истории вопроса. Как и многие другие проекты из области BigData, Hbase зародилась из концепции которая была разработана в компании Google. Принципы лежащие в основе Hbase, были описаны в статье «Bigtable: A Distributed Storage System for Structured Data».
Как мы рассматривали в прошлых статьях — обычные файлы довольно неплохо подходят для пакетной обработки данных, с использованием парадигмы MapReduce.
С другой стороны информацию хранящуюся в файлах довольно неудобно обновлять; Файлы также лишены возможности произвольного доступа. Для быстрой и удобной работы с произвольным доступом есть класс nosql-систем типа key-value storage, таких как Aerospike, Redis, Couchbase, Memcached. Однако в обычно в этих системах очень неудобна пакетная обработка данных. Hbase представляет из себя попытку объединения удобства пакетной обработки и удобства обновления и произвольного доступа.

Модель данных
Hbase — это распределенная, колоночно-ориентированная, мультиверсионная база типа «ключ-значение».
Данные организованы в таблицы , проиндексированные первичным ключом, который в Hbase называется RowKey .
Для каждого RowKey ключа может храниться неограниченны набор атрибутов (или колонок) .
Колонки организованны в группы колонок , называемые Column Family . Как правило в одну Column Family объединяют колонки, для которых одинаковы паттерн использования и хранения.
Для каждого аттрибута может храниться несколько различных версий . Разные версии имеют разный timestamp .
Записи физически хранятся в отсортированном по RowKey порядке. При этом данные соответствующие разным Column Family хранятся отдельно, что позволяет при необходимости читать данные только из нужного семейства колонок.
При удалении определённого атрибута физически он сразу не удаляется, а лишь маркируется специальным флажком tombstone . Физическое удаление данных произойдет позже, при выполнении операции Major Compaction.
Атрибуты , принадлежащие одной группе колонок и соответствующие одному ключу физически хранятся как отсортированный список. Любой атрибут может отсутствовать или присутствовать для каждого ключа, при этом если атрибут отсутствует — это не вызывает накладных расходов на хранение пустых значений.
Список и названия групп колонок фиксирован и имеет четкую схему. На уровне группы колонок задаются такие параметры как time to live (TTL) и максимальное количество хранимых версий . Если разница между timestamp для определенно версии и текущим временем больше TTL — запись помечается к удалению . Если количество версий для определённого атрибута превысило максимальное количество версий — запись также помечается к удалению .

Модель данных Hbase можно запомнить как соответствие ключ значение:
Поддерживаемые операции
Список поддерживаемых операций в hbase весьма прост. Поддерживаются 4 основные операции:
— Put: добавить новую запись в hbase. Timestamp этой записи может быть задан руками, в противном случае он будет установлен автоматически как текущее время.
— Get: получить данные по определенному RowKey. Можно указать Column Family, из которой будем брать данные и количество версий которые хотим прочитать.
— Scan: читать записи по очереди. Можно указать запись с которой начинаем читать, запись до которой читать, количество записей которые необходимо считать, Column Family из которой будет производиться чтение и максимальное количество версий для каждой записи.
— Delete: пометить определенную версию к удалению. Физического удаления при этом не произойдет, оно будет отложено до следующего Major Compaction (см. ниже).
Архитектура

Hbase является распределенной базой данных, которая может работать на десятках и сотнях физических серверов, обеспечивая бесперебойную работу даже при выходе из строя некоторых из них. Поэтому архитектура hbase довольна сложна по сравнению с классическими реляционными базами данных.
Hbase для своей работы использует два основных процесса:
1. Region Server — обслуживает один или несколько регионов. Регион — это диапазон записей соответствующих определенному диапазону подряд идущих RowKey. Каждый регион содержит:
-
Persistent Storage — основное хранилище данных в Hbase. Данные физически хранятся на HDFS, в специальном формате HFile. Данные в HFile хранятся в отсортированном по RowKey порядке. Одной паре (регион, column family) соответствует как минимум один HFIle.
Для координации действий между сервисами Hbase использует Apache ZooKeeper, специальный сервис предназначенный для управления конфигурациями и синхронизацией сервисов.
При увеличении количества данных в регионе и достижении им определенного размера Hbase запускает split, операцию разбивающую регион на 2. Для того чтобы избежать постоянных делений регионов — можно заранее задать границы регионов и увеличить их максимальный размер.
Так как данные по одному региону могут храниться в нескольких HFile, для ускорения работы Hbase периодически их сливает воедино. Эта операция в Hbase называется compaction. Compaction’ы бывают двух видов:
-
Minor Compaction. Запускается автоматически, выполняется в фоновом режиме. Имеет низкий приоритет по сравнению с другими операциями Hbase.
Способы работы с Hbase
Hbase Shell
Самый простой способ начать работу с Hbase — воспользоваться утилитой hbase shell. Она доступна сразу после установки hbase на любой ноде кластера hbase.

Hbase shell представляет из себя jruby-консоль c встроенной поддержкой всех основных операций по работе с Hbase. Ниже приведён пример создания таблицы users с двумя column family, выполнения некоторых манипуляций с ней и удаление таблицы в конце на языке hbase shell:
Простыня кода
create 'users', 'user_profile', VERSIONS => 5>, 'user_posts', VERSIONS => 1231231231> put 'users', 'id1', 'user_profile:name', 'alexander' put 'users', 'id1', 'user_profile:second_name', 'alexander' get 'users', 'id1' put 'users', 'id1', 'user_profile:second_name', 'kuznetsov' get 'users', 'id1' get 'users', 'id1', 'user_profile:second_name', VERSIONS => 5> put 'users', 'id2', 'user_profile:name', 'vasiliy' put 'users', 'id2', 'user_profile:second_name', 'ivanov' scan 'users', 'user_profile:second_name', VERSIONS => 5> delete 'users', 'id1', 'user_profile:second_name' get 'users', 'id1' disable 'users' drop 'users'
Native Api
Как и большинство других hadoop-related проектов hbase реализован на языке java, поэтому и нативный api доступен для языке java. Native API довольно неплохо задокументирован на официальном сайте. Вот пример использования Hbase API взятый оттуда же:
Простыня кода
import java.io.IOException; import org.apache.hadoop.hbase.HBaseConfiguration; import org.apache.hadoop.hbase.TableName; import org.apache.hadoop.hbase.client.Connection; import org.apache.hadoop.hbase.client.ConnectionFactory; import org.apache.hadoop.hbase.client.Get; import org.apache.hadoop.hbase.client.Table; import org.apache.hadoop.hbase.client.Put; import org.apache.hadoop.hbase.client.Result; import org.apache.hadoop.hbase.client.ResultScanner; import org.apache.hadoop.hbase.client.Scan; import org.apache.hadoop.hbase.util.Bytes; // Class that has nothing but a main. // Does a Put, Get and a Scan against an hbase table. // The API described here is since HBase 1.0. public class MyLittleHBaseClient < public static void main(String[] args) throws IOException < // You need a configuration object to tell the client where to connect. // When you create a HBaseConfiguration, it reads in whatever you've set // into your hbase-site.xml and in hbase-default.xml, as long as these can // be found on the CLASSPATH Configuration config = HBaseConfiguration.create(); // Next you need a Connection to the cluster. Create one. When done with it, // close it. A try/finally is a good way to ensure it gets closed or use // the jdk7 idiom, try-with-resources: see // https://docs.oracle.com/javase/tutorial/essential/exceptions/tryResourceClose.html // // Connections are heavyweight. Create one once and keep it around. From a Connection // you get a Table instance to access Tables, an Admin instance to administer the cluster, // and RegionLocator to find where regions are out on the cluster. As opposed to Connections, // Table, Admin and RegionLocator instances are lightweight; create as you need them and then // close when done. // Connection connection = ConnectionFactory.createConnection(config); try < // The below instantiates a Table object that connects you to the "myLittleHBaseTable" table // (TableName.valueOf turns String into a TableName instance). // When done with it, close it (Should start a try/finally after this creation so it gets // closed for sure the jdk7 idiom, try-with-resources: see // https://docs.oracle.com/javase/tutorial/essential/exceptions/tryResourceClose.html) Table table = connection.getTable(TableName.valueOf("myLittleHBaseTable")); try < // To add to a row, use Put. A Put constructor takes the name of the row // you want to insert into as a byte array. In HBase, the Bytes class has // utility for converting all kinds of java types to byte arrays. In the // below, we are converting the String "myLittleRow" into a byte array to // use as a row key for our update. Once you have a Put instance, you can // adorn it by setting the names of columns you want to update on the row, // the timestamp to use in your update, etc. If no timestamp, the server // applies current time to the edits. Put p = new Put(Bytes.toBytes("myLittleRow")); // To set the value you'd like to update in the row 'myLittleRow', specify // the column family, column qualifier, and value of the table cell you'd // like to update. The column family must already exist in your table // schema. The qualifier can be anything. All must be specified as byte // arrays as hbase is all about byte arrays. Lets pretend the table // 'myLittleHBaseTable' was created with a family 'myLittleFamily'. p.add(Bytes.toBytes("myLittleFamily"), Bytes.toBytes("someQualifier"), Bytes.toBytes("Some Value")); // Once you've adorned your Put instance with all the updates you want to // make, to commit it do the following (The HTable#put method takes the // Put instance you've been building and pushes the changes you made into // hbase) table.put(p); // Now, to retrieve the data we just wrote. The values that come back are // Result instances. Generally, a Result is an object that will package up // the hbase return into the form you find most palatable. Get g = new Get(Bytes.toBytes("myLittleRow")); Result r = table.get(g); byte [] value = r.getValue(Bytes.toBytes("myLittleFamily"), Bytes.toBytes("someQualifier")); // If we convert the value bytes, we should get back 'Some Value', the // value we inserted at this location. String valueStr = Bytes.toString(value); System.out.println("GET: " + valueStr); // Sometimes, you won't know the row you're looking for. In this case, you // use a Scanner. This will give you cursor-like interface to the contents // of the table. To set up a Scanner, do like you did above making a Put // and a Get, create a Scan. Adorn it with column names, etc. Scan s = new Scan(); s.addColumn(Bytes.toBytes("myLittleFamily"), Bytes.toBytes("someQualifier")); ResultScanner scanner = table.getScanner(s); try < // Scanners return Result instances. // Now, for the actual iteration. One way is to use a while loop like so: for (Result rr = scanner.next(); rr != null; rr = scanner.next()) < // print out the row we found and the columns we were looking for System.out.println("Found row: " + rr); >// The other approach is to use a foreach loop. Scanners are iterable! // for (Result rr : scanner) < // System.out.println("Found row: " + rr); // >> finally < // Make sure you close your scanners when you are done! // Thats why we have it inside a try/finally clause scanner.close(); >// Close your table and cluster connection. > finally < if (table != null) table.close(); >> finally < connection.close(); >> >
Thrift, REST и поддержка других языков программирования.
Для работы из других языков программирования Hbase предоставляет Thrift API и Rest API. На базе них построены клиенты для всех основных языков программирования: python, PHP, Java Script и тд.
Некоторые особенности работы с HBase
1. Hbase «из коробки» интегрируется с MapReduce, и может быть использована в качестве входных и выходных данных с помощью специальных TableInputFormat и TableOutputFormat.
2. Очень важно правильно выбрать RowKey. RowKey должен обеспечивать хорошее равномерное распределение по регионам, в противном случае есть риск возникновения так называемых «горячих регионов» — регионов которые используются гораздо чаще остальных, что приводит к неэффективному использованию ресурсов системы.
3. Если данные заливаются не единично, а сразу большими пачками — Hbase поддерживает специальный механизм BulkLoad, который позволяет заливать данные намного быстрее чем используя единичные Put’ы. BulkLoad по сути представляет из себя двухшаговую операцию:
— Формирование HFile без участия put’ов при помощи специального MapReduce job’a
— Подкладывание этих файликов напрямую в Hbase.
4. Hbase поддерживает вывод своих метрик в сервер мониторинга Ganglia. Это может быть очень полезно при администрировании Hbase для понимания сути происходящих с hbase проблем.
Пример
В качестве примера можем рассмотреть основную таблицу с данными, которая у нас в Data-Centric Aliance используется для хранения информации о поведении пользователей в интернете.
RowKey
В качестве RowKey используется идентификатор пользователя, в качестве которого используется GUUID, строчка специально генерируемая таким образом, чтобы быть уникальной во всем мире. GUUID’ы распределены равномерно, что дает хорошее распределение данных по серверам.
Column Family
В нашем хранилище используются две column family:
— Data. В этой группе колонок хранятся данные, которые теряют свою актуальность для рекламных целей, такие как факты посещения пользователем определенных URL. TTL на эту Column Family установлен в размере 2 месяца, ограничение по количеству версий — 2000.
— LongData. В этой группе колонок хранятся данные, которые не теряют свою актуальность в течение долгого времени, такие как пол, дата рождения и другие «вечные» характеристики пользователя
Колонки
Каждый тип фактов о пользователе хранится в отдельной колонке. Например в колонке Data:_v хранятся URL, посещенные пользователем, а в колонке LongData:gender — пол пользователя.
В качестве timestamp хранится время регистрации этого факта. Например в колонке Data:_v — в качестве timestamp используется время захода пользователем на определенный URL.
Такая структура хранения пользовательских данных очень хорошо ложится на наш паттерн использования и позволяет быстро обновлять данные о пользователях, быстро доставать всю необходимую информацию о пользователях, и, используя MapReduce, быстро обрабатывать данные о всех пользователях сразу.
Альтернативы
Hbase довольно сложна в администрировании и использовании, поэтому прежде чем использовать hbase есть смысл обратить внимание на альтернативы:
-
Реляционные базы данных. Очень неплохая альтернатива, особенно в случае когда данные влезают на одну машину. Также в первую очередь о реляционных базах данных стоит подумать в случае когда важны транзакции индексы отличные от первичного.
Checklist по использованию Hbase
Использование Hbase оправдано когда:
— Данных много и они не влезают на один компьютер
— Данные часто обновляются и удаляются
— В данных присутствует явный «ключ» по к которому удобно привязывать все остальное
— Нужна пакетная обработка данных
— Нужен произвольный доступ к данным по определенным ключам
Заключение
В данной статье мы рассмотрели Hbase — мощное средство для хранения и обновления данных в экосистеме hadoop, показали модель данных Hbase, её архитектуру и особенности работы с ней.
В следующих статьях речь пойдет о средствах, упрощающих работу с MapReduce, таких как Apache Hive и Apache Pig.