HBase - Краткое руководство
С 1970 года СУБД является решением проблем, связанных с хранением и обслуживанием данных. После появления больших данных компании осознали преимущества обработки больших данных и начали выбирать такие решения, как 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 - это column-oriented databaseи таблицы в нем отсортированы по строкам. Схема таблицы определяет только семейства столбцов, которые представляют собой пары ключ-значение. В таблице есть несколько семейств столбцов, и каждое семейство столбцов может иметь любое количество столбцов. Последующие значения столбцов хранятся на диске непрерывно. Каждое значение ячейки таблицы имеет отметку времени. Короче говоря, в HBase:
- Таблица - это набор строк.
- Строка - это набор семейств столбцов.
- Семейство столбцов - это набор столбцов.
- Столбец - это набор пар ключ-значение.
Ниже приведен пример схемы таблицы в HBase.
Ровид | Семейство столбцов | Семейство столбцов | Семейство столбцов | Семейство столбцов | ||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|
col1 | col2 | col3 | col1 | col2 | col3 | col1 | col2 | col3 | col1 | col2 | col3 | |
1 | ||||||||||||
2 | ||||||||||||
3 |
Ориентировано по столбцам и по строкам
Базы данных, ориентированные на столбцы, - это базы данных, которые хранят таблицы данных как разделы столбцов данных, а не как строки данных. Вскоре у них появятся семейства столбцов.
Строковая база данных | Колонно-ориентированная база данных |
---|---|
Он подходит для онлайн-транзакций (OLTP). | Он подходит для онлайн-аналитической обработки (OLAP). |
Такие базы данных рассчитаны на небольшое количество строк и столбцов. | Колоночные базы данных предназначены для огромных таблиц. |
На следующем рисунке показаны семейства столбцов в базе данных, ориентированной на столбцы:
HBase и СУБД
HBase | СУБД |
---|---|
HBase не имеет схемы и концепции фиксированных столбцов; определяет только семейства столбцов. | РСУБД управляется своей схемой, которая описывает всю структуру таблиц. |
Он создан для широких столов. HBase масштабируется по горизонтали. | Он тонкий и предназначен для небольших столов. Трудно масштабировать. |
В HBase нет транзакций. | СУБД транзакционная. |
Это ненормализованные данные. | В нем будут нормализованные данные. |
Он хорош как для полуструктурированных, так и для структурированных данных. | Это хорошо для структурированных данных. |
Особенности HBase
- HBase линейно масштабируется.
- Имеет автоматическую поддержку отказа.
- Он обеспечивает согласованное чтение и запись.
- Он интегрируется с Hadoop как в качестве источника, так и в качестве пункта назначения.
- Он имеет простой Java API для клиента.
- Он обеспечивает репликацию данных между кластерами.
Где использовать HBase
Apache HBase используется для произвольного доступа для чтения / записи в реальном времени к большим данным.
Он размещает очень большие таблицы поверх кластеров стандартного оборудования.
Apache HBase - это нереляционная база данных, созданная по образцу Bigtable от Google. 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 таблицы разделены на регионы и обслуживаются региональными серверами. Регионы вертикально разделены по семействам столбцов на «Магазины». Магазины сохраняются как файлы в HDFS. Ниже показана архитектура HBase.
Note: Термин «магазин» используется для обозначения регионов для объяснения структуры хранения.
HBase состоит из трех основных компонентов: клиентской библиотеки, главного сервера и региональных серверов. Серверы регионов могут быть добавлены или удалены в соответствии с требованиями.
MasterServer
Мастер-сервер -
Назначает регионы региональным серверам и использует Apache ZooKeeper для этой задачи.
Выполняет балансировку нагрузки регионов по серверам регионов. Он разгружает загруженные серверы и перемещает регионы на менее занятые серверы.
Поддерживает состояние кластера, согласовывая балансировку нагрузки.
Отвечает за изменения схемы и другие операции с метаданными, такие как создание таблиц и семейств столбцов.
Регионы
Регионы - это не что иное, как таблицы, которые разделены и распределены по серверам регионов.
Сервер региона
Серверы регионов имеют регионы, которые -
- Общайтесь с клиентом и выполняйте операции, связанные с данными.
- Обрабатывать запросы на чтение и запись для всех регионов, находящихся под ним.
- Определите размер области, следуя пороговым значениям размера области.
Когда мы более подробно рассмотрим сервер регионов, он содержит регионы и магазины, как показано ниже:
Хранилище содержит хранилище памяти и HFiles. Memstore похож на кеш-память. Все, что вводится в HBase, изначально сохраняется здесь. Позже данные передаются и сохраняются в Hfiles в виде блоков, а хранилище памяти очищается.
Работник зоопарка
Zookeeper - это проект с открытым исходным кодом, который предоставляет такие услуги, как сохранение информации о конфигурации, присвоение имен, обеспечение распределенной синхронизации и т. Д.
Zookeeper имеет эфемерные узлы, представляющие серверы разных регионов. Главные серверы используют эти узлы для обнаружения доступных серверов.
Помимо доступности, узлы также используются для отслеживания отказов серверов или сетевых разделов.
Клиенты общаются с региональными серверами через zookeeper.
В псевдо и автономном режимах HBase сама позаботится о zookeeper.
В этой главе объясняется, как устанавливается и изначально настраивается HBase. Для продолжения работы с HBase требуются Java и Hadoop, поэтому вам необходимо загрузить и установить java и Hadoop в своей системе.
Подготовка к установке
Перед установкой Hadoop в среду Linux нам необходимо настроить Linux с помощью ssh(Безопасная оболочка). Следуйте инструкциям ниже, чтобы настроить среду 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 в authorized_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 находится в папке «Загрузки». Проверьте это и извлеките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», как показано ниже.
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 вам необходимо отредактировать следующие файлы.
core-site.xml
В core-site.xml Файл содержит такую информацию, как номер порта, используемый для экземпляра Hadoop, память, выделенная для файловой системы, ограничение памяти для хранения данных и размер буферов чтения / записи.
Откройте core-site.xml и добавьте следующие свойства между тегами <configuration> и </configuration>.
<configuration>
<property>
<name>fs.default.name</name>
<value>hdfs://localhost:9000</value>
</property>
</configuration>
hdfs-site.xml
В hdfs-site.xml Файл содержит такую информацию, как значение данных репликации, путь к узлу имени и путь к узлу данных в ваших локальных файловых системах, в которых вы хотите хранить инфраструктуру 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>, </configuration>.
<configuration>
<property>
<name>dfs.replication</name >
<value>1</value>
</property>
<property>
<name>dfs.name.dir</name>
<value>file:///home/hadoop/hadoopinfra/hdfs/namenode</value>
</property>
<property>
<name>dfs.data.dir</name>
<value>file:///home/hadoop/hadoopinfra/hdfs/datanode</value>
</property>
</configuration>
Note: В приведенном выше файле все значения свойств определяются пользователем, и вы можете вносить изменения в соответствии с вашей инфраструктурой Hadoop.
yarn-site.xml
Этот файл используется для настройки пряжи в Hadoop. Откройте файл yarn-site.xml и добавьте следующее свойство между <configuration $ gt ;, </ configuration $ gt; теги в этом файле.
<configuration>
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
</configuration>
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> и </configuration>.
<configuration>
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
</configuration>
Проверка установки 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 - Проверка файлов dfs Hadoop
Следующая команда используется для запуска 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> и </configuration>. В них установите каталог HBase под ключом свойства с именем «hbase.rootdir», как показано ниже.
<configuration>
//Here you have to set the path where you want HBase to store its files.
<property>
<name>hbase.rootdir</name>
<value>file:/home/hadoop/HBase/HFiles</value>
</property>
//Here you have to set the path where you want HBase to store its built in zookeeper files.
<property>
<name>hbase.zookeeper.property.dataDir</name>
<value>/home/hadoop/zookeeper</value>
</property>
</configuration>
На этом установка и настройка 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, чтобы добавить следующие свойства.
<property>
<name>hbase.cluster.distributed</name>
<value>true</value>
</property>
В нем будет указано, в каком режиме следует запускать HBase. В том же файле из локальной файловой системы измените hbase.rootdir, адрес вашего экземпляра HDFS, используя синтаксис hdfs: //// URI. Мы запускаем HDFS на локальном хосте на порту 8030.
<property>
<name>hbase.rootdir</name>
<value>hdfs://localhost:8030/hbase</value>
</property>
Запуск HBase
После завершения настройки перейдите в домашнюю папку HBase и запустите HBase, используя следующую команду.
$cd /usr/local/HBase
$bin/start-hbase.sh
Note: Перед запуском HBase убедитесь, что Hadoop запущен.
Проверка каталога HBase в HDFS
HBase создает свой каталог в HDFS. Чтобы увидеть созданный каталог, перейдите в корзину Hadoop и введите следующую команду.
$ ./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
Просмотрите домашнюю папку sbin Hadoop и запустите файловую систему 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, как показано ниже.
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<RETURN>' for list of supported commands.
Type "exit<RETURN>" 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 и мастера резервного копирования
Таблицы HBase
Настройка среды Java
Мы также можем взаимодействовать с HBase с помощью библиотек Java, но перед доступом к HBase с помощью Java API вам необходимо установить путь к классам для этих библиотек.
Установка пути к классам
Прежде чем продолжить программирование, установите путь к классам для библиотек HBase в .bashrcфайл. открыто.bashrc в любом из редакторов, как показано ниже.
$ gedit ~/.bashrc
Задайте в нем путь к классам для библиотек HBase (папка lib в HBase), как показано ниже.
export CLASSPATH = $CLASSPATH://home/hadoop/hbase/lib/*
Это сделано для предотвращения исключения «класс не найден» при доступе к HBase с использованием java API.
В этой главе объясняется, как запустить интерактивную оболочку HBase, поставляемую вместе с HBase.
HBase Shell
HBase содержит оболочку, с помощью которой вы можете общаться с HBase. HBase использует файловую систему Hadoop для хранения своих данных. У него будет главный сервер и региональные серверы. Хранилище данных будет в виде регионов (таблиц). Эти регионы будут разделены и сохранены на серверах регионов.
Главный сервер управляет этими региональными серверами, и все эти задачи выполняются в HDFS. Ниже приведены некоторые команды, поддерживаемые HBase Shell.
Общие команды
status - Предоставляет статус HBase, например, количество серверов.
version - Предоставляет версию используемого HBase.
table_help - Предоставляет справку по командам обращения к таблицам.
whoami - Предоставляет информацию о пользователе.
Язык определения данных
Это команды, которые работают с таблицами в HBase.
create - Создает таблицу.
list - Список всех таблиц в HBase.
disable - Отключает стол.
is_disabled - Проверяет, отключена ли таблица.
enable - Включает стол.
is_enabled - Проверяет, включена ли таблица.
describe - Предоставляет описание таблицы.
alter - Переделывает стол.
exists - Проверяет, существует ли таблица.
drop - Отбрасывает стол из HBase.
drop_all - Удаляет таблицы, соответствующие "регулярному выражению", заданному в команде.
Java Admin API- До всех вышеперечисленных команд Java предоставляет Admin API для достижения функциональных возможностей DDL посредством программирования. Подorg.apache.hadoop.hbase.client package, HBaseAdmin и HTableDescriptor - два важных класса в этом пакете, которые обеспечивают функции DDL.
Язык обработки данных
put - Помещает значение ячейки в указанный столбец в указанной строке в определенной таблице.
get - Извлекает содержимое строки или ячейки.
delete - Удаляет значение ячейки в таблице.
deleteall - Удаляет все ячейки в заданной строке.
scan - Сканирует и возвращает данные таблицы.
count - Подсчитывает и возвращает количество строк в таблице.
truncate - Отключает, отбрасывает и воссоздает указанную таблицу.
Java client API - До всех вышеперечисленных команд 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<RETURN>' for list of supported commands.
Type "exit<RETURN>" to leave the HBase Shell
Version 0.94.23, rf42302b28aceaab773b15f234aa8718fff7eea3c, Wed Aug 27
00:54:09 UTC 2014
hbase(main):001:0>
Чтобы выйти из интерактивной команды оболочки в любой момент, введите exit или используйте <ctrl + c>. Перед тем, как продолжить, проверьте функционирование оболочки. Использоватьlist команду для этого. Listэто команда, используемая для получения списка всех таблиц в HBase. Прежде всего, проверьте установку и конфигурацию HBase в вашей системе с помощью этой команды, как показано ниже.
hbase(main):001:0> list
Когда вы вводите эту команду, она дает следующий результат.
hbase(main):001:0> list
TABLE
Общие команды в 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 написан на java, поэтому предоставляет Java API для связи с HBase. Java API - это самый быстрый способ связи с HBase. Ниже приведен ссылочный API администратора Java, который охватывает задачи, используемые для управления таблицами.
Класс HBaseAdmin
HBaseAdmin- это класс, представляющий администратора. Этот класс принадлежит кorg.apache.hadoop.hbase.clientпакет. Используя этот класс, вы можете выполнять задачи администратора. Вы можете получить экземпляр Admin, используяConnection.getAdmin() метод.
Методы и описание
S.No. | Методы и описание |
---|---|
1 | void createTable(HTableDescriptor desc) Создает новую таблицу. |
2 | void createTable(HTableDescriptor desc, byte[][] splitKeys) Создает новую таблицу с начальным набором пустых областей, определенных указанными разделенными ключами. |
3 | void deleteColumn(byte[] tableName, String columnName) Удаляет столбец из таблицы. |
4 | void deleteColumn(String tableName, String columnName) Удалить столбец из таблицы. |
5 | void deleteTable(String tableName) Удаляет таблицу. |
Дескриптор класса
Этот класс содержит подробную информацию о таблице HBase, например:
- дескрипторы всех семейств столбцов,
- если таблица является таблицей каталога,
- если таблица предназначена только для чтения,
- максимальный размер хранилища памяти,
- когда должен произойти разделение региона,
- сопроцессоры, связанные с ним, и т. д.
Конструкторы
S.No. | Конструктор и резюме |
---|---|
1 | HTableDescriptor(TableName name) Создает дескриптор таблицы, определяющий объект TableName. |
Методы и описание
S.No. | Методы и описание |
---|---|
1 | HTableDescriptor addFamily(HColumnDescriptor family) Добавляет семейство столбцов к данному дескриптору |
Создание таблицы с использованием HBase Shell
Вы можете создать таблицу, используя create, здесь вы должны указать имя таблицы и имя семейства столбцов. Вsyntax для создания таблицы в оболочке HBase показано ниже.
create ‘<table name>’,’<column family>’
пример
Ниже приведен образец схемы таблицы с именем 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
Создание таблицы с использованием java API
Вы можете создать таблицу в HBase, используя createTable() метод HBaseAdminкласс. Этот класс принадлежит кorg.apache.hadoop.hbase.clientпакет. Ниже приведены шаги по созданию таблицы в HBase с использованием java API.
Шаг 1. Создание экземпляра HBaseAdmin
Для этого класса требуется объект Configuration в качестве параметра, поэтому сначала создайте экземпляр класса Configuration и передайте этот экземпляр в HBaseAdmin.
Configuration conf = HBaseConfiguration.create();
HBaseAdmin admin = new HBaseAdmin(conf);
Шаг 2. Создайте дескриптор таблицы
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. Выполните через администратора
Используя createTable() метод HBaseAdmin class, вы можете выполнить созданную таблицу в режиме администратора.
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 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<tableDescriptor.length;i++ ){
System.out.println(tableDescriptor[i].getNameAsString());
}
}
}
Скомпилируйте и выполните указанную выше программу, как показано ниже.
$javac ListTables.java
$java ListTables
На выходе должно получиться следующее:
User
emp
Отключение таблицы с помощью HBase Shell
Чтобы удалить таблицу или изменить ее настройки, вам необходимо сначала отключить таблицу с помощью команды disable. Вы можете снова включить его, используя команду enable.
Ниже приведен синтаксис отключения таблицы:
disable ‘emp’
пример
Ниже приведен пример, показывающий, как отключить таблицу.
hbase(main):025:0> disable 'emp'
0 row(s) in 1.2760 seconds
Проверка
После отключения таблицы вы все еще можете ощутить ее существование через list и existsкоманды. Вы не можете его сканировать. Это даст вам следующую ошибку.
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
Если таблица не отключена, отключите ее, как показано ниже.
if(!b){
admin.disableTable("emp");
System.out.println("Table disabled");
}
Ниже приведена полная программа для проверки, отключена ли таблица; если нет, то как отключить.
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 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){
admin.enableTable("emp");
System.out.println("Table enabled");
}
Ниже приведена полная программа для проверки, включена ли таблица, а если нет, то как ее включить.
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> describe 'table name'
Ниже приведены выходные данные команды описать на emp стол.
hbase(main):006:0> describe 'emp'
DESCRIPTION
ENABLED
'emp', {NAME ⇒ 'READONLY', DATA_BLOCK_ENCODING ⇒ 'NONE', BLOOMFILTER
⇒ 'ROW', REPLICATION_SCOPE ⇒ '0', COMPRESSION ⇒ 'NONE', VERSIONS ⇒
'1', TTL true
⇒ 'FOREVER', MIN_VERSIONS ⇒ '0', KEEP_DELETED_CELLS ⇒ 'false',
BLOCKSIZE ⇒ '65536', IN_MEMORY ⇒ 'false', BLOCKCACHE ⇒ 'true'}, {NAME
⇒ 'personal
data', DATA_BLOCK_ENCODING ⇒ 'NONE', BLOOMFILTER ⇒ 'ROW',
REPLICATION_SCOPE ⇒ '0', VERSIONS ⇒ '5', COMPRESSION ⇒ 'NONE',
MIN_VERSIONS ⇒ '0', TTL
⇒ 'FOREVER', KEEP_DELETED_CELLS ⇒ 'false', BLOCKSIZE ⇒ '65536',
IN_MEMORY ⇒ 'false', BLOCKCACHE ⇒ 'true'}, {NAME ⇒ 'professional
data', DATA_BLO
CK_ENCODING ⇒ 'NONE', BLOOMFILTER ⇒ 'ROW', REPLICATION_SCOPE ⇒ '0',
VERSIONS ⇒ '1', COMPRESSION ⇒ 'NONE', MIN_VERSIONS ⇒ '0', TTL ⇒
'FOREVER', K
EEP_DELETED_CELLS ⇒ 'false', BLOCKSIZE ⇒ '65536', IN_MEMORY ⇒
'false', BLOCKCACHE ⇒ 'true'}, {NAME ⇒ 'table_att_unset',
DATA_BLOCK_ENCODING ⇒ 'NO
NE', BLOOMFILTER ⇒ 'ROW', REPLICATION_SCOPE ⇒ '0', COMPRESSION ⇒
'NONE', VERSIONS ⇒ '1', TTL ⇒ 'FOREVER', MIN_VERSIONS ⇒ '0',
KEEP_DELETED_CELLS
⇒ 'false', BLOCKSIZE ⇒ '6
изменить
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 deleted
Существование таблицы с использованием HBase Shell
Вы можете проверить наличие таблицы, используя existsкоманда. В следующем примере показано, как использовать эту команду.
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
На выходе должно получиться следующее:
true
Удаление таблицы с помощью 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
Убедитесь, что таблица удалена с помощью команды exists.
hbase(main):020:07gt; exists 'emp'
Table emp does not exist
0 row(s) in 0.0730 seconds
drop_all
Эта команда используется для удаления таблиц, соответствующих «регулярному выражению», заданному в команде. Его синтаксис следующий:
hbase> drop_all ‘t.*’
Note: Перед тем как отбросить стол, вы должны его отключить.
пример
Предположим, что существуют столы с именами раджа, раджани, раджендра, раджеш и раджу.
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класс. Следуйте инструкциям ниже, чтобы удалить таблицу с помощью java API.
Шаг 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 deleted
Выход
Вы выходите из оболочки, набрав exit команда.
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 hbase
В этой главе описывается API Java-клиента для HBase, который используется для выполнения CRUDоперации с таблицами HBase. HBase написан на Java и имеет собственный API Java. Таким образом, он обеспечивает программный доступ к языку манипулирования данными (DML).
Конфигурация класса HBase
Добавляет файлы конфигурации HBase в конфигурацию. Этот класс принадлежит кorg.apache.hadoop.hbase пакет.
Методы и описание
S.No. | Методы и описание |
---|---|
1 | static org.apache.hadoop.conf.Configuration create() Этот метод создает конфигурацию с ресурсами HBase. |
Класс HTable
HTable - это внутренний класс HBase, представляющий таблицу HBase. Это реализация таблицы, которая используется для связи с одной таблицей HBase. Этот класс принадлежит кorg.apache.hadoop.hbase.client класс.
Конструкторы
S.No. | Конструкторы и описание |
---|---|
1 | HTable() |
2 | HTable(TableName tableName, ClusterConnection connection, ExecutorService pool) Используя этот конструктор, вы можете создать объект для доступа к таблице HBase. |
Методы и описание
S.No. | Методы и описание |
---|---|
1 | void close() Освобождает все ресурсы HTable. |
2 | void delete(Delete delete) Удаляет указанные ячейки / строку. |
3 | boolean exists(Get get) Используя этот метод, вы можете проверить наличие столбцов в таблице, как указано Get. |
4 | Result get(Get get) Извлекает определенные ячейки из заданной строки. |
5 | org.apache.hadoop.conf.Configuration getConfiguration() Возвращает объект конфигурации, используемый этим экземпляром. |
6 | TableName getName() Возвращает экземпляр имени этой таблицы. |
7 | HTableDescriptor getTableDescriptor() Возвращает дескриптор таблицы для этой таблицы. |
8 | byte[] getTableName() Возвращает имя этой таблицы. |
9 | void put(Put put) Используя этот метод, вы можете вставить данные в таблицу. |
Класс Put
Этот класс используется для выполнения операций Put для одной строки. Он принадлежит кorg.apache.hadoop.hbase.client пакет.
Конструкторы
S.No. | Конструкторы и описание |
---|---|
1 | Put(byte[] row) Используя этот конструктор, вы можете создать операцию Put для указанной строки. |
2 | Put(byte[] rowArray, int rowOffset, int rowLength) Используя этот конструктор, вы можете сделать копию переданного ключа строки, чтобы она оставалась локальной. |
3 | Put(byte[] rowArray, int rowOffset, int rowLength, long ts) Используя этот конструктор, вы можете сделать копию переданного ключа строки, чтобы она оставалась локальной. |
4 | Put(byte[] row, long ts) Используя этот конструктор, мы можем создать операцию Put для указанной строки, используя заданную временную метку. |
Методы
S.No. | Методы и описание |
---|---|
1 | Put add(byte[] family, byte[] qualifier, byte[] value) Добавляет указанный столбец и значение в эту операцию Put. |
2 | Put add(byte[] family, byte[] qualifier, long ts, byte[] value) Добавляет указанный столбец и значение с указанной меткой времени в качестве версии к этой операции Put. |
3 | Put add(byte[] family, ByteBuffer qualifier, long ts, ByteBuffer value) Добавляет указанный столбец и значение с указанной меткой времени в качестве версии к этой операции Put. |
4 | Put add(byte[] family, ByteBuffer qualifier, long ts, ByteBuffer value) Добавляет указанный столбец и значение с указанной меткой времени в качестве версии к этой операции Put. |
Класс Get
Этот класс используется для выполнения операций Get с одной строкой. Этот класс принадлежит кorg.apache.hadoop.hbase.client пакет.
Конструктор
S.No. | Конструктор и описание |
---|---|
1 | Get(byte[] row) Используя этот конструктор, вы можете создать операцию Get для указанной строки. |
2 | Get(Get get) |
Методы
S.No. | Методы и описание |
---|---|
1 | Get addColumn(byte[] family, byte[] qualifier) Извлекает столбец из определенного семейства с указанным квалификатором. |
2 | Get addFamily(byte[] family) Извлекает все столбцы из указанного семейства. |
Класс Удалить
Этот класс используется для выполнения операций удаления в одной строке. Чтобы удалить всю строку, создайте экземпляр объекта Delete со строкой, которую нужно удалить. Этот класс принадлежит кorg.apache.hadoop.hbase.client пакет.
Конструктор
S.No. | Конструктор и описание |
---|---|
1 | Delete(byte[] row) Создает операцию удаления для указанной строки. |
2 | Delete(byte[] rowArray, int rowOffset, int rowLength) Создает операцию удаления для указанной строки и отметки времени. |
3 | Delete(byte[] rowArray, int rowOffset, int rowLength, long ts) Создает операцию удаления для указанной строки и отметки времени. |
4 | Delete(byte[] row, long timestamp) Создает операцию удаления для указанной строки и отметки времени. |
Методы
S.No. | Методы и описание |
---|---|
1 | Delete addColumn(byte[] family, byte[] qualifier) Удаляет последнюю версию указанного столбца. |
2 | Delete addColumns(byte[] family, byte[] qualifier, long timestamp) Удаляет все версии указанного столбца с отметкой времени, меньшей или равной указанной отметке времени. |
3 | Delete addFamily(byte[] family) Удаляет все версии всех столбцов указанного семейства. |
4 | Delete addFamily(byte[] family, long timestamp) Удаляет все столбцы указанного семейства с меткой времени, меньшей или равной указанной метке времени. |
Результат класса
Этот класс используется для получения единственной строки результата запроса Get или Scan.
Конструкторы
S.No. | Конструкторы |
---|---|
1 | Result() Используя этот конструктор, вы можете создать пустой Результат без полезной нагрузки KeyValue; возвращает null, если вы вызываете raw Cells (). |
Методы
S.No. | Методы и описание |
---|---|
1 | byte[] getValue(byte[] family, byte[] qualifier) Этот метод используется для получения последней версии указанного столбца. |
2 | byte[] getRow() Этот метод используется для получения ключа строки, соответствующего строке, из которой был создан этот Результат. |
Вставка данных с помощью HBase Shell
В этой главе показано, как создавать данные в таблице HBase. Для создания данных в таблице HBase используются следующие команды и методы:
put команда
add() метод Put класс и
put() метод HTable класс.
В качестве примера мы собираемся создать следующую таблицу в HBase.
С помощью putкоманда, вы можете вставлять строки в таблицу. Его синтаксис следующий:
put ’<table name>’,’row1’,’<colfamily:colname>’,’<value>’
Вставка первой строки
Давайте вставим значения первой строки в таблицу 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, реализация таблицы в HBase. Этот класс используется для связи с одной таблицей HBase. При создании экземпляра этого класса он принимает в качестве параметров объект конфигурации и имя таблицы. Вы можете создать экземпляр класса HTable, как показано ниже.
HTable hTable = new HTable(conf, tableName);
Шаг 3. Создайте экземпляр PutClass
Чтобы вставить данные в таблицу HBase, add()метод и его варианты. Этот метод принадлежитPut, поэтому создайте экземпляр класса put. Этому классу требуется имя строки, в которую вы хотите вставить данные, в строковом формате. Вы можете создать экземплярPut класс, как показано ниже.
Put p = new Put(Bytes.toBytes("row1"));
Шаг 4: InsertData
В 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.
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 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. Создайте экземпляр класса конфигурации
ConfigurationКласс добавляет к своему объекту файлы конфигурации HBase. Вы можете создать объект конфигурации, используяcreate() метод HbaseConfiguration класс, как показано ниже.
Configuration conf = HbaseConfiguration.create();
Шаг 2. Создайте экземпляр класса HTable
У вас есть класс под названием HTable, реализация таблицы в 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 закройте 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 Shell
В get команда и get() метод HTableclass используются для чтения данных из таблицы в HBase. С помощьюget, вы можете получить только одну строку данных за раз. Его синтаксис следующий:
get ’<table name>’,’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’, {COLUMN ⇒ ‘column family:column name ’}
пример
Ниже приведен пример чтения определенного столбца в таблице HBase.
hbase(main):015:0> get 'emp', 'row1', {COLUMN ⇒ 'personal:name'}
COLUMN CELL
personal:name timestamp = 1418035791555, value = raju
1 row(s) in 0.0080 seconds
Чтение данных с помощью Java API
Чтобы прочитать данные из таблицы HBase, используйте get()метод класса HTable. Для этого метода требуется экземплярGetкласс. Следуйте приведенным ниже инструкциям, чтобы получить данные из таблицы HBase.
Шаг 1. Создайте экземпляр класса конфигурации
ConfigurationКласс добавляет к своему объекту файлы конфигурации HBase. Вы можете создать объект конфигурации, используяcreate() метод HbaseConfiguration класс, как показано ниже.
Configuration conf = HbaseConfiguration.create();
Шаг 2. Создайте экземпляр класса HTable
У вас есть класс под названием HTable, реализация таблицы в HBase. Этот класс используется для связи с одной таблицей HBase. При создании экземпляра этого класса он принимает в качестве параметров объект конфигурации и имя таблицы. Вы можете создать экземпляр класса HTable, как показано ниже.
HTable hTable = new HTable(conf, tableName);
Шаг 3. Создайте экземпляр класса Get
Вы можете получить данные из таблицы HBase, используя get() метод HTableкласс. Этот метод извлекает ячейку из заданной строки. Это требуетGetобъект класса как параметр. Создайте его, как показано ниже.
Get get = new Get(toBytes("row1"));
Шаг 4: прочтите данные
При извлечении данных вы можете получить одну строку по идентификатору, или получить набор строк по набору идентификаторов строк, или просканировать всю таблицу или подмножество строк.
Вы можете получить данные таблицы HBase, используя варианты метода добавления в 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
Удаление определенной ячейки в таблице
Используя deleteкоманда, вы можете удалить определенную ячейку в таблице. Синтаксисdelete команда выглядит следующим образом:
delete ‘<table name>’, ‘<row>’, ‘<column name >’, ‘<time stamp>’
пример
Вот пример удаления определенной ячейки. Здесь мы удаляем зарплату.
hbase(main):006:0> delete 'emp', '1', 'personal data:city',
1417521848375
0 row(s) in 0.0060 seconds
Удаление всех ячеек в таблице
Используя команду «deleteall», вы можете удалить все ячейки подряд. Ниже приведен синтаксис команды deleteall.
deleteall ‘<table name>’, ‘<row>’,
пример
Вот пример команды «deleteall», где мы удаляем все ячейки row1 таблицы emp.
hbase(main):007:0> deleteall 'emp','1'
0 row(s) in 0.0240 seconds
Проверьте таблицу с помощью scanкоманда. Снимок таблицы после удаления таблицы приведен ниже.
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. Создайте экземпляр класса конфигурации
ConfigurationКласс добавляет к своему объекту файлы конфигурации HBase. Вы можете создать объект конфигурации, используяcreate() метод HbaseConfiguration класс, как показано ниже.
Configuration conf = HbaseConfiguration.create();
Шаг 2. Создайте экземпляр класса HTable
У вас есть класс под названием HTable, реализация таблицы в HBase. Этот класс используется для связи с одной таблицей HBase. При создании экземпляра этого класса он принимает в качестве параметров объект конфигурации и имя таблицы. Вы можете создать экземпляр класса HTable, как показано ниже.
HTable hTable = new HTable(conf, tableName);
Шаг 3. Создайте экземпляр класса удаления
Создайте экземпляр Deleteclass, передав rowid удаляемой строки в формате байтового массива. Вы также можете передать этому конструктору метку времени и строку 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 Shell
В scanКоманда используется для просмотра данных в HTable. Используя команду сканирования, вы можете получить данные таблицы. Его синтаксис следующий:
scan ‘<table name>’
пример
В следующем примере показано, как читать данные из таблицы с помощью команды сканирования. Здесь мы читаем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={row1/personal:city/1418275612888/Put/vlen=5/mvcc=0,
row1/personal:name/1418035791555/Put/vlen=4/mvcc=0}
считать
Вы можете подсчитать количество строк в таблице, используя countкоманда. Его синтаксис следующий:
count ‘<table name>’
После удаления первой строки таблица emp будет иметь две строки. Проверьте это, как показано ниже.
hbase(main):023:0> count 'emp'
2 row(s) in 0.090 seconds
⇒ 2
обрезать
Эта команда отключает отбрасывание и воссоздает таблицу. Синтаксисtruncate как следует:
hbase> truncate 'table name'
пример
Ниже приведен пример команды усечения. Здесь мы усекли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. В целях безопасности есть три команды: grant, revoke и user_permission.
даровать
В grantКоманда предоставляет определенные права, такие как чтение, запись, выполнение и администрирование таблицы, определенному пользователю. Синтаксис команды предоставления следующий:
hbase> grant <user> <permissions> [<table> [<column family> [<column; qualifier>]]
Мы можем предоставить ноль или более привилегий пользователю из набора RWXCA, где
- R - представляет право чтения.
- W - представляет право записи.
- X - представляет привилегию выполнения.
- C - представляет собой привилегию создания.
- A - представляет права администратора.
Ниже приведен пример, который предоставляет все привилегии пользователю с именем Tutorialspoint.
hbase(main):018:0> grant 'Tutorialspoint', 'RWXCA'
отозвать
В revokeКоманда используется для отмены прав доступа пользователя к таблице. Его синтаксис следующий:
hbase> revoke <user>
Следующий код отменяет все разрешения у пользователя с именем Tutorialspoint.
hbase(main):006:0> revoke 'Tutorialspoint'
user_permission
Эта команда используется для вывода списка всех разрешений для конкретной таблицы. Синтаксисuser_permission как следует:
hbase>user_permission ‘tablename’
В следующем коде перечислены все разрешения пользователей таблицы emp.
hbase(main):013:0> user_permission 'emp'