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> [&ltcolumn; 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'