HBase - Guia rápido

Desde 1970, o RDBMS é a solução para problemas relacionados ao armazenamento e manutenção de dados. Após o advento do big data, as empresas perceberam os benefícios do processamento de big data e começaram a optar por soluções como o Hadoop.

O Hadoop usa o sistema de arquivos distribuído para armazenar big data e MapReduce para processá-lo. O Hadoop se destaca no armazenamento e processamento de dados enormes em vários formatos, como arbitrário, semi-estruturado ou até mesmo não estruturado.

Limitações do Hadoop

O Hadoop pode executar apenas processamento em lote e os dados serão acessados ​​apenas de maneira sequencial. Isso significa que é necessário pesquisar todo o conjunto de dados, mesmo para os trabalhos mais simples.

Um enorme conjunto de dados quando processado resulta em outro enorme conjunto de dados, que também deve ser processado sequencialmente. Neste ponto, uma nova solução é necessária para acessar qualquer ponto de dados em uma única unidade de tempo (acesso aleatório).

Bancos de dados de acesso aleatório Hadoop

Aplicativos como HBase, Cassandra, couchDB, Dynamo e MongoDB são alguns dos bancos de dados que armazenam grandes quantidades de dados e acessam os dados de maneira aleatória.

O que é HBase?

HBase é um banco de dados orientado a coluna distribuído construído sobre o sistema de arquivos Hadoop. É um projeto de código aberto e escalonável horizontalmente.

HBase é um modelo de dados semelhante à grande mesa do Google, projetado para fornecer acesso aleatório rápido a grandes quantidades de dados estruturados. Ele aproveita a tolerância a falhas fornecida pelo Hadoop File System (HDFS).

É uma parte do ecossistema Hadoop que fornece acesso aleatório de leitura / gravação em tempo real aos dados no Hadoop File System.

É possível armazenar os dados no HDFS diretamente ou por meio do HBase. O consumidor de dados lê / acessa os dados no HDFS aleatoriamente usando o HBase. O HBase se baseia no Hadoop File System e fornece acesso de leitura e gravação.

HBase e HDFS

HDFS HBase
HDFS é um sistema de arquivos distribuído adequado para armazenar arquivos grandes. HBase é um banco de dados construído sobre o HDFS.
O HDFS não oferece suporte para pesquisas rápidas de registros individuais. O HBase fornece pesquisas rápidas para tabelas maiores.
Ele fornece processamento em lote de alta latência; nenhum conceito de processamento em lote. Ele fornece acesso de baixa latência a linhas únicas de bilhões de registros (acesso aleatório).
Ele fornece apenas acesso sequencial de dados. O HBase usa tabelas Hash internamente e fornece acesso aleatório, e armazena os dados em arquivos HDFS indexados para pesquisas mais rápidas.

Mecanismo de armazenamento em HBase

HBase é um column-oriented databasee as tabelas nele são classificadas por linha. O esquema da tabela define apenas famílias de colunas, que são os pares de valores-chave. Uma tabela possui vários grupos de colunas e cada grupo de colunas pode ter qualquer número de colunas. Os valores das colunas subsequentes são armazenados de forma contígua no disco. Cada valor de célula da tabela possui um carimbo de data / hora. Resumindo, em um HBase:

  • A tabela é uma coleção de linhas.
  • Linha é uma coleção de famílias de colunas.
  • A família de colunas é uma coleção de colunas.
  • A coluna é uma coleção de pares de valores-chave.

A seguir, é fornecido um exemplo de esquema de tabela no HBase.

Rowid Família de coluna Família de coluna Família de coluna Família de coluna
col1 col2 col3 col1 col2 col3 col1 col2 col3 col1 col2 col3
1
2
3

Orientado a coluna e orientado a linha

Bancos de dados orientados a colunas são aqueles que armazenam tabelas de dados como seções de colunas de dados, em vez de linhas de dados. Em breve, eles terão famílias de colunas.

Banco de dados orientado a linha Banco de dados orientado a coluna
É adequado para o Processo de Transação Online (OLTP). É adequado para processamento analítico online (OLAP).
Esses bancos de dados são projetados para um pequeno número de linhas e colunas. Bancos de dados orientados a colunas são projetados para tabelas enormes.

A imagem a seguir mostra famílias de colunas em um banco de dados orientado a colunas:

HBase e RDBMS

HBase RDBMS
O HBase não tem esquema, não tem o conceito de esquema de colunas fixas; define apenas famílias de colunas. Um RDBMS é governado por seu esquema, que descreve toda a estrutura das tabelas.
É construído para mesas largas. O HBase é escalonável horizontalmente. É fino e feito para pequenas mesas. Difícil de escalar.
Nenhuma transação existe no HBase. O RDBMS é transacional.
Possui dados desnormalizados. Ele terá dados normalizados.
É bom para dados semiestruturados e também estruturados. É bom para dados estruturados.

Características do HBase

  • O HBase é linearmente escalonável.
  • Possui suporte a falhas automáticas.
  • Ele fornece leitura e gravação consistentes.
  • Ele se integra ao Hadoop, tanto como origem quanto como destino.
  • Possui API Java fácil para cliente.
  • Ele fornece replicação de dados entre clusters.

Onde usar o HBase

  • O Apache HBase é usado para ter acesso aleatório de leitura / gravação em tempo real ao Big Data.

  • Ele hospeda tabelas muito grandes em cima de clusters de hardware comum.

  • Apache HBase é um banco de dados não relacional modelado de acordo com o Bigtable do Google. O Bigtable atua no Google File System, da mesma forma que o Apache HBase funciona no Hadoop e HDFS.

Aplicações de HBase

  • Ele é usado sempre que houver necessidade de escrever aplicativos pesados.
  • O HBase é usado sempre que precisamos fornecer acesso aleatório rápido aos dados disponíveis.
  • Empresas como Facebook, Twitter, Yahoo e Adobe usam o HBase internamente.

História HBase

Ano Evento
Novembro de 2006 O Google divulgou o artigo no BigTable.
Fevereiro de 2007 O protótipo inicial do HBase foi criado como uma contribuição do Hadoop.
Out 2007 O primeiro HBase utilizável junto com o Hadoop 0.15.0 foi lançado.
Janeiro de 2008 HBase se tornou o subprojeto do Hadoop.
Outubro de 2008 HBase 0.18.1 foi lançado.
Janeiro de 2009 HBase 0.19.0 foi lançado.
Setembro de 2009 O HBase 0.20.0 foi lançado.
Maio de 2010 HBase tornou-se o projeto de nível superior do Apache.

No HBase, as tabelas são divididas em regiões e atendidas pelos servidores da região. As regiões são divididas verticalmente por famílias de colunas em “Lojas”. As lojas são salvas como arquivos no HDFS. Abaixo é mostrada a arquitetura do HBase.

Note: O termo 'armazenamento' é usado para regiões para explicar a estrutura de armazenamento.

O HBase tem três componentes principais: a biblioteca cliente, um servidor mestre e servidores regionais. Os servidores de região podem ser adicionados ou removidos conforme a necessidade.

MasterServer

O servidor mestre -

  • Atribui regiões aos servidores de região e tem a ajuda do Apache ZooKeeper para essa tarefa.

  • Lida com o balanceamento de carga das regiões nos servidores regionais. Ele descarrega os servidores ocupados e muda as regiões para servidores menos ocupados.

  • Mantém o estado do cluster negociando o balanceamento de carga.

  • É responsável por mudanças de esquema e outras operações de metadados, como criação de tabelas e famílias de colunas.

Regiões

As regiões nada mais são do que tabelas que são divididas e distribuídas pelos servidores da região.

Servidor de região

Os servidores de região têm regiões que -

  • Comunique-se com o cliente e administre operações relacionadas a dados.
  • Lida com solicitações de leitura e gravação para todas as regiões sob ele.
  • Decida o tamanho da região seguindo os limites de tamanho da região.

Quando examinamos mais profundamente o servidor de região, ele contém regiões e armazenamentos conforme mostrado abaixo:

O armazenamento contém armazenamento de memória e HFiles. Memstore é como uma memória cache. Qualquer coisa inserida no HBase é armazenada aqui inicialmente. Posteriormente, os dados são transferidos e salvos em Hfiles como blocos e o armazenamento de memória é liberado.

Funcionário do zoológico

  • Zookeeper é um projeto de código aberto que fornece serviços como manutenção de informações de configuração, nomenclatura, fornecimento de sincronização distribuída, etc.

  • Zookeeper tem nós efêmeros que representam servidores de diferentes regiões. Os servidores principais usam esses nós para descobrir os servidores disponíveis.

  • Além da disponibilidade, os nós também são usados ​​para rastrear falhas de servidor ou partições de rede.

  • Os clientes se comunicam com os servidores da região por meio do zookeeper.

  • Nos modos pseudo e autônomo, o próprio HBase cuidará do zookeeper.

Este capítulo explica como o HBase é instalado e configurado inicialmente. Java e Hadoop são necessários para prosseguir com o HBase, portanto, você deve baixar e instalar java e Hadoop em seu sistema.

Configuração de pré-instalação

Antes de instalar o Hadoop no ambiente Linux, precisamos configurar o Linux usando ssh(Capsula segura). Siga as etapas fornecidas abaixo para configurar o ambiente Linux.

Criação de um usuário

Em primeiro lugar, é recomendável criar um usuário separado para o Hadoop para isolar o sistema de arquivos Hadoop do sistema de arquivos Unix. Siga as etapas abaixo para criar um usuário.

  • Abra a raiz usando o comando “su”.
  • Crie um usuário a partir da conta root usando o comando “useradd username”.
  • Agora você pode abrir uma conta de usuário existente usando o comando “su username”.

Abra o terminal Linux e digite os seguintes comandos para criar um usuário.

$ su
password:
# useradd hadoop
# passwd hadoop
New passwd:
Retype new passwd

Configuração e geração de chave SSH

A configuração do SSH é necessária para executar diferentes operações no cluster, como iniciar, parar e operações de shell daemon distribuído. Para autenticar diferentes usuários do Hadoop, é necessário fornecer um par de chaves pública / privada para um usuário do Hadoop e compartilhá-lo com diferentes usuários.

Os comandos a seguir são usados ​​para gerar um par de valores-chave usando SSH. Copie o formulário de chaves públicas id_rsa.pub para authorized_keys e forneça as permissões de proprietário, leitura e gravação para o arquivo authorized_keys respectivamente.

$ ssh-keygen -t rsa
$ cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys $ chmod 0600 ~/.ssh/authorized_keys

Verificar ssh

ssh localhost

Instalando Java

Java é o principal pré-requisito para Hadoop e HBase. Em primeiro lugar, você deve verificar a existência de java em seu sistema usando “java -version”. A sintaxe do comando da versão java é fornecida abaixo.

$ java -version

Se tudo funcionar bem, você receberá a seguinte saída.

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)

Se o java não estiver instalado em seu sistema, siga as etapas abaixo para instalar o java.

Passo 1

Baixe o java (JDK <versão mais recente> - X64.tar.gz) visitando o seguinte link Oracle Java .

Então jdk-7u71-linux-x64.tar.gz será baixado em seu sistema.

Passo 2

Geralmente, você encontrará o arquivo java baixado na pasta Downloads. Verifique e extraia ojdk-7u71-linux-x64.gz arquivo usando os seguintes comandos.

$ 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

etapa 3

Para disponibilizar o java a todos os usuários, você deve movê-lo para o local “/ usr / local /”. Abra o root e digite os seguintes comandos.

$ su
password:
# mv jdk1.7.0_71 /usr/local/
# exit

Passo 4

Para configurar PATH e JAVA_HOME variáveis, adicione os seguintes comandos para ~/.bashrc Arquivo.

export JAVA_HOME=/usr/local/jdk1.7.0_71
export PATH= $PATH:$JAVA_HOME/bin

Agora aplique todas as alterações no sistema em execução atual.

$ source ~/.bashrc

Etapa 5

Use os seguintes comandos para configurar alternativas 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

Agora verifique o java -version comando do terminal como explicado acima.

Baixando Hadoop

Depois de instalar o java, você deve instalar o Hadoop. Em primeiro lugar, verifique a existência do Hadoop usando o comando “versão do Hadoop” conforme mostrado abaixo.

hadoop version

Se tudo funcionar bem, você receberá a seguinte saída.

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

Se o seu sistema não conseguir localizar o Hadoop, faça download do Hadoop em seu sistema. Siga os comandos fornecidos abaixo para fazer isso.

Baixe e extraia o hadoop-2.6.0 da Apache Software Foundation usando os comandos a seguir.

$ 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

Instalando Hadoop

Instale o Hadoop em qualquer um dos modos necessários. Aqui, estamos demonstrando as funcionalidades do HBase no modo pseudo distribuído, portanto, instale o Hadoop no modo pseudo distribuído.

As etapas a seguir são usadas para instalar Hadoop 2.4.1.

Etapa 1 - Configurando o Hadoop

Você pode definir variáveis ​​de ambiente Hadoop anexando os seguintes comandos a ~/.bashrc Arquivo.

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

Agora aplique todas as alterações no sistema em execução atual.

$ source ~/.bashrc

Etapa 2 - Configuração do Hadoop

Você pode encontrar todos os arquivos de configuração do Hadoop no local “$ HADOOP_HOME / etc / hadoop”. Você precisa fazer alterações nesses arquivos de configuração de acordo com sua infraestrutura Hadoop.

$ cd $HADOOP_HOME/etc/hadoop

Para desenvolver programas Hadoop em java, você deve redefinir a variável de ambiente java em hadoop-env.sh arquivo substituindo JAVA_HOME valor com a localização de java em seu sistema.

export JAVA_HOME=/usr/local/jdk1.7.0_71

Você terá que editar os seguintes arquivos para configurar o Hadoop.

core-site.xml

o core-site.xml arquivo contém informações como o número da porta usado para a instância do Hadoop, memória alocada para o sistema de arquivos, limite de memória para armazenamento de dados e o tamanho dos buffers de leitura / gravação.

Abra core-site.xml e adicione as seguintes propriedades entre as tags <configuration> e </configuration>.

<configuration>
   <property>
      <name>fs.default.name</name>
      <value>hdfs://localhost:9000</value>
   </property>
</configuration>

hdfs-site.xml

o hdfs-site.xml arquivo contém informações como o valor dos dados de replicação, caminho do namenode e caminho do datanode de seus sistemas de arquivos locais, onde você deseja armazenar a infraestrutura do Hadoop.

Vamos supor os seguintes dados.

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

Abra este arquivo e adicione as seguintes propriedades entre as marcas <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: No arquivo acima, todos os valores de propriedade são definidos pelo usuário e você pode fazer alterações de acordo com sua infraestrutura Hadoop.

yarn-site.xml

Este arquivo é usado para configurar o yarn no Hadoop. Abra o arquivo yarn-site.xml e adicione a seguinte propriedade entre <configuration $ gt ;, </ configuration $ gt; tags neste arquivo.

<configuration>
   <property>
      <name>yarn.nodemanager.aux-services</name>
      <value>mapreduce_shuffle</value>
   </property>
</configuration>

mapred-site.xml

Este arquivo é usado para especificar qual estrutura MapReduce estamos usando. Por padrão, o Hadoop contém um modelo de yarn-site.xml. Em primeiro lugar, é necessário copiar o arquivo demapred-site.xml.template para mapred-site.xml arquivo usando o seguinte comando.

$ cp mapred-site.xml.template mapred-site.xml

Abrir mapred-site.xml arquivo e adicione as seguintes propriedades entre as marcas <configuration> e </configuration>.

<configuration>
   <property>
      <name>mapreduce.framework.name</name>
      <value>yarn</value>
   </property>
</configuration>

Verificando a instalação do Hadoop

As etapas a seguir são usadas para verificar a instalação do Hadoop.

Etapa 1 - Configuração do Nó de Nome

Configure o namenode usando o comando “hdfs namenode -format” como segue.

$ cd ~ $ hdfs namenode -format

O resultado esperado é o seguinte.

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
************************************************************/

Etapa 2 - Verificar Hadoop dfs

O seguinte comando é usado para iniciar o dfs. Executar este comando iniciará seu sistema de arquivos Hadoop.

$ start-dfs.sh

A saída esperada é a seguinte.

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]

Etapa 3 - Verificação do script do Yarn

O seguinte comando é usado para iniciar o script yarn. Executar este comando iniciará seus daemons de yarn.

$ start-yarn.sh

A saída esperada é a seguinte.

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

Etapa 4 - Acessando o Hadoop no navegador

O número da porta padrão para acessar o Hadoop é 50070. Use o seguinte url para obter os serviços do Hadoop em seu navegador.

http://localhost:50070

Etapa 5 - Verificar todos os aplicativos do cluster

O número da porta padrão para acessar todos os aplicativos do cluster é 8088. Use o seguinte url para visitar este serviço.

http://localhost:8088/

Instalando HBase

Podemos instalar o HBase em qualquer um dos três modos: modo autônomo, modo pseudo-distribuído e modo totalmente distribuído.

Instalando HBase em modo autônomo

Baixe a última versão estável do formulário HBase http://www.interior-dsgn.com/apache/hbase/stable/usando o comando “wget” e extraia-o usando o comando tar “zxvf”. Veja o seguinte comando.

$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

Mude para o modo de superusuário e mova a pasta HBase para / usr / local conforme mostrado abaixo.

$su
$password: enter your password here
mv hbase-0.99.1/* Hbase/

Configurando HBase no modo autônomo

Antes de prosseguir com o HBase, você deve editar os arquivos a seguir e configurar o HBase.

hbase-env.sh

Defina o java Home para HBase e abra hbase-env.sharquivo da pasta conf. Edite a variável de ambiente JAVA_HOME e altere o caminho existente para sua variável JAVA_HOME atual, conforme mostrado abaixo.

cd /usr/local/Hbase/conf
gedit hbase-env.sh

Isso abrirá o arquivo env.sh do HBase. Agora substitua o existenteJAVA_HOME valor com seu valor atual, conforme mostrado abaixo.

export JAVA_HOME=/usr/lib/jvm/java-1.7.0

hbase-site.xml

Este é o principal arquivo de configuração do HBase. Defina o diretório de dados em um local apropriado abrindo a pasta inicial do HBase em / usr / local / HBase. Dentro da pasta conf, você encontrará vários arquivos, abra ohbase-site.xml arquivo como mostrado abaixo.

#cd /usr/local/HBase/
#cd conf
# gedit hbase-site.xml

Dentro de hbase-site.xmlarquivo, você encontrará as marcas <configuration> e </configuration>. Dentro deles, defina o diretório HBase sob a chave de propriedade com o nome “hbase.rootdir” conforme mostrado abaixo.

<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>

Com isso, a parte de instalação e configuração do HBase foi concluída com sucesso. Podemos iniciar o HBase usandostart-hbase.shscript fornecido na pasta bin do HBase. Para isso, abra o HBase Home Folder e execute o script de início do HBase conforme mostrado abaixo.

$cd /usr/local/HBase/bin
$./start-hbase.sh

Se tudo correr bem, quando você tentar executar o script de início do HBase, aparecerá uma mensagem dizendo que o HBase foi iniciado.

starting master, logging to /usr/local/HBase/bin/../logs/hbase-tpmaster-localhost.localdomain.out

Instalando HBase em modo pseudo-distribuído

Vamos agora verificar como o HBase está instalado no modo pseudo-distribuído.

Configurando HBase

Antes de continuar com o HBase, configure o Hadoop e o HDFS em seu sistema local ou em um sistema remoto e certifique-se de que estejam em execução. Pare o HBase se ele estiver em execução.

hbase-site.xml

Edite o arquivo hbase-site.xml para adicionar as seguintes propriedades.

<property>
   <name>hbase.cluster.distributed</name>
   <value>true</value>
</property>

Ele mencionará em qual modo o HBase deve ser executado. No mesmo arquivo do sistema de arquivos local, altere o hbase.rootdir, o endereço da sua instância HDFS, usando a sintaxe hdfs: //// URI. Estamos executando o HDFS no localhost na porta 8030.

<property>
   <name>hbase.rootdir</name>
   <value>hdfs://localhost:8030/hbase</value>
</property>

Iniciando HBase

Após o término da configuração, navegue até a pasta inicial do HBase e inicie o HBase usando o seguinte comando.

$cd /usr/local/HBase
$bin/start-hbase.sh

Note: Antes de iniciar o HBase, verifique se o Hadoop está em execução.

Verificando o diretório HBase em HDFS

HBase cria seu diretório em HDFS. Para ver o diretório criado, navegue até Hadoop bin e digite o seguinte comando.

$ ./bin/hadoop fs -ls /hbase

Se tudo correr bem, você receberá a seguinte saída.

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

Iniciando e parando um mestre

Usando o “local-master-backup.sh” você pode iniciar até 10 servidores. Abra a pasta pessoal do HBase, masterize e execute o seguinte comando para iniciá-lo.

$ ./bin/local-master-backup.sh 2 4

Para matar um mestre de backup, você precisa de seu ID de processo, que será armazenado em um arquivo chamado “/tmp/hbase-USER-X-master.pid.” você pode matar o backup master usando o seguinte comando.

$ cat /tmp/hbase-user-1-master.pid |xargs kill -9

Iniciando e parando RegionServers

Você pode executar vários servidores de região de um único sistema usando o seguinte comando.

$ .bin/local-regionservers.sh start 2 3

Para parar um servidor de região, use o seguinte comando.

$ .bin/local-regionservers.sh stop 3

 

Iniciando HBaseShell

Depois de instalar o HBase com sucesso, você pode iniciar o HBase Shell. A seguir, está a sequência de etapas que devem ser seguidas para iniciar o shell do HBase. Abra o terminal e faça login como superusuário.

Inicie o sistema de arquivos Hadoop

Navegue pela pasta sbin inicial do Hadoop e inicie o sistema de arquivos Hadoop conforme mostrado abaixo.

$cd $HADOOP_HOME/sbin
$start-all.sh

Iniciar HBase

Navegue pela pasta bin do diretório raiz do HBase e inicie o HBase.

$cd /usr/local/HBase
$./bin/start-hbase.sh

Iniciar o servidor mestre HBase

Este será o mesmo diretório. Inicie como mostrado abaixo.

$./bin/local-master-backup.sh start 2 (number signifies specific
server.)

Iniciar região

Inicie o servidor da região conforme mostrado abaixo.

$./bin/./local-regionservers.sh start 3

Inicie o HBase Shell

Você pode iniciar o shell do HBase usando o seguinte comando.

$cd bin
$./hbase shell

Isso lhe dará o prompt do shell do HBase, conforme mostrado abaixo.

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>

Interface da Web HBase

Para acessar a interface web do HBase, digite a seguinte url no navegador.

http://localhost:60010

Esta interface lista seus servidores de região atualmente em execução, mestres de backup e tabelas HBase.

Servidores de região HBase e backup mestres

Tabelas HBase

Configurando o ambiente Java

Também podemos nos comunicar com o HBase usando bibliotecas Java, mas antes de acessar o HBase usando a API Java, você precisa definir o classpath para essas bibliotecas.

Configurando o Classpath

Antes de prosseguir com a programação, defina o classpath para bibliotecas HBase em .bashrcArquivo. Abrir.bashrc em qualquer um dos editores conforme mostrado abaixo.

$ gedit ~/.bashrc

Defina o classpath para bibliotecas HBase (pasta lib no HBase) nele conforme mostrado abaixo.

export CLASSPATH = $CLASSPATH://home/hadoop/hbase/lib/*

Isso evita a exceção “classe não encontrada” ao acessar o HBase usando a API Java.

Este capítulo explica como iniciar o shell interativo do HBase que vem junto com o HBase.

HBase Shell

O HBase contém um shell com o qual você pode se comunicar com o HBase. O HBase usa o Hadoop File System para armazenar seus dados. Ele terá um servidor mestre e servidores regionais. O armazenamento de dados será na forma de regiões (tabelas). Essas regiões serão divididas e armazenadas em servidores de região.

O servidor mestre gerencia esses servidores regionais e todas essas tarefas ocorrem no HDFS. Abaixo estão alguns dos comandos suportados pelo HBase Shell.

Comandos Gerais

  • status - Fornece o status do HBase, por exemplo, o número de servidores.

  • version - Fornece a versão do HBase em uso.

  • table_help - Fornece ajuda para comandos de referência de tabela.

  • whoami - Fornece informações sobre o usuário.

Linguagem de definição de dados

Esses são os comandos que operam nas tabelas no HBase.

  • create - Cria uma mesa.

  • list - Lista todas as tabelas no HBase.

  • disable - Desativa uma mesa.

  • is_disabled - Verifica se uma tabela está desabilitada.

  • enable - Ativa uma mesa.

  • is_enabled - Verifica se uma tabela está habilitada.

  • describe - Fornece a descrição de uma tabela.

  • alter - Altera uma mesa.

  • exists - Verifica se existe uma mesa.

  • drop - Descarta uma tabela do HBase.

  • drop_all - Descarta as tabelas que correspondem ao 'regex' fornecido no comando.

  • Java Admin API- Antes de todos os comandos acima, Java fornece uma API Admin para obter funcionalidades DDL por meio da programação. Debaixoorg.apache.hadoop.hbase.client pacote, HBaseAdmin e HTableDescriptor são as duas classes importantes neste pacote que fornecem funcionalidades DDL.

Linguagem de manipulação de dados

  • put - Coloca um valor de célula em uma coluna especificada em uma linha especificada em uma tabela particular.

  • get - Busca o conteúdo de uma linha ou célula.

  • delete - Exclui um valor de célula em uma tabela.

  • deleteall - Exclui todas as células em uma determinada linha.

  • scan - Faz a varredura e retorna os dados da tabela.

  • count - Conta e retorna o número de linhas em uma tabela.

  • truncate - Desativa, descarta e recria uma tabela especificada.

  • Java client API - Antes de todos os comandos acima, o Java fornece uma API de cliente para atingir as funcionalidades DML, CRUD (Create Retrieve Update Delete) e mais por meio da programação, no pacote org.apache.hadoop.hbase.client. HTable Put e Get são as classes importantes neste pacote.

Iniciando o HBase Shell

Para acessar o shell do HBase, você deve navegar até a pasta inicial do HBase.

cd /usr/localhost/
cd Hbase

Você pode iniciar o shell interativo do HBase usando “hbase shell” comando como mostrado abaixo.

./bin/hbase shell

Se você instalou com sucesso o HBase em seu sistema, ele lhe dará o prompt do shell do HBase conforme mostrado abaixo.

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>

Para sair do comando shell interativo a qualquer momento, digite exit ou use <ctrl + c>. Verifique o funcionamento do shell antes de prosseguir. Use olist comando para este propósito. Listé um comando usado para obter a lista de todas as tabelas no HBase. Em primeiro lugar, verifique a instalação e a configuração do HBase em seu sistema usando este comando conforme mostrado abaixo.

hbase(main):001:0> list

Quando você digita este comando, ele fornece a seguinte saída.

hbase(main):001:0> list
TABLE

Os comandos gerais no HBase são status, version, table_help e whoami. Este capítulo explica esses comandos.

status

Este comando retorna o status do sistema, incluindo os detalhes dos servidores em execução no sistema. Sua sintaxe é a seguinte:

hbase(main):009:0> status

Se você executar este comando, ele retornará a seguinte saída.

hbase(main):009:0> status
3 servers, 0 dead, 1.3333 average load

versão

Este comando retorna a versão do HBase usada em seu sistema. Sua sintaxe é a seguinte:

hbase(main):010:0> version

Se você executar este comando, ele retornará a seguinte saída.

hbase(main):009:0> version
0.98.8-hadoop2, r6cfc8d064754251365e070a10a82eb169956d5fe, Fri Nov 14
18:26:29 PST 2014

table_help

Este comando o orienta sobre o que e como usar comandos referenciados por tabela. A seguir está a sintaxe para usar este comando.

hbase(main):02:0> table_help

Quando você usa este comando, ele mostra tópicos de ajuda para comandos relacionados à tabela. A seguir, está a saída parcial deste comando.

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'…...

Quem sou eu

Este comando retorna os detalhes do usuário do HBase. Se você executar este comando, retorna o usuário HBase atual conforme mostrado abaixo.

hbase(main):008:0> whoami
hadoop (auth:SIMPLE)
groups: hadoop

O HBase é escrito em java, portanto, fornece uma API java para se comunicar com o HBase. A API Java é a maneira mais rápida de se comunicar com o HBase. A seguir está a API de administração java referenciada que cobre as tarefas usadas para gerenciar tabelas.

Classe HBaseAdmin

HBaseAdminé uma classe que representa o Admin. Esta classe pertence aoorg.apache.hadoop.hbase.clientpacote. Usando esta classe, você pode executar as tarefas de um administrador. Você pode obter a instância do Admin usandoConnection.getAdmin() método.

Métodos e Descrição

S.No. Métodos e Descrição
1

void createTable(HTableDescriptor desc)

Cria uma nova tabela.

2

void createTable(HTableDescriptor desc, byte[][] splitKeys)

Cria uma nova tabela com um conjunto inicial de regiões vazias definidas pelas chaves de divisão especificadas.

3

void deleteColumn(byte[] tableName, String columnName)

Exclui uma coluna de uma tabela.

4

void deleteColumn(String tableName, String columnName)

Exclua uma coluna de uma tabela.

5

void deleteTable(String tableName)

Exclui uma tabela.

Descritor de Classe

Esta classe contém os detalhes sobre uma tabela HBase, como:

  • os descritores de todas as famílias de colunas,
  • se a tabela é uma tabela de catálogo,
  • se a tabela for somente leitura,
  • o tamanho máximo do mem store,
  • quando a divisão da região deve ocorrer,
  • coprocessadores associados a ele, etc.

Construtores

S.No. Construtor e resumo
1

HTableDescriptor(TableName name)

Constrói um descritor de tabela especificando um objeto TableName.

Métodos e Descrição

S.No. Métodos e Descrição
1

HTableDescriptor addFamily(HColumnDescriptor family)

Adiciona um grupo de colunas ao descritor fornecido

Criação de uma tabela usando HBase Shell

Você pode criar uma tabela usando o createcomando, aqui você deve especificar o nome da tabela e o nome da família da coluna. osyntax para criar uma tabela no shell do HBase é mostrado abaixo.

create ‘<table name>’,’<column family>’

Exemplo

A seguir, é fornecido um esquema de amostra de uma tabela chamada emp. Possui duas famílias de colunas: “dados pessoais” e “dados profissionais”.

Chave de linha dados pessoais dados profissionais

Você pode criar esta tabela no shell do HBase conforme mostrado abaixo.

hbase(main):002:0> create 'emp', 'personal data', 'professional data'

E isso lhe dará a seguinte saída.

0 row(s) in 1.1300 seconds
=> Hbase::Table - emp

Verificação

Você pode verificar se a tabela é criada usando o listcomando como mostrado abaixo. Aqui você pode observar a tabela emp criada.

hbase(main):002:0> list
TABLE 
emp
2 row(s) in 0.0340 seconds

Criação de uma tabela usando a API Java

Você pode criar uma tabela no HBase usando o createTable() método de HBaseAdminclasse. Esta classe pertence aoorg.apache.hadoop.hbase.clientpacote. Abaixo estão as etapas para criar uma tabela no HBase usando a API Java.

Etapa 1: instanciar HBaseAdmin

Esta classe requer o objeto Configuration como um parâmetro, portanto, inicialmente instancie a classe Configuration e passe essa instância para HBaseAdmin.

Configuration conf = HBaseConfiguration.create();
HBaseAdmin admin = new HBaseAdmin(conf);

Etapa 2: Criar TableDescriptor

HTableDescriptor é uma classe que pertence ao org.apache.hadoop.hbaseclasse. Essa classe é como um contêiner de nomes de tabelas e famílias de colunas.

//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);

Etapa 3: Executar por meio de Admin

Usando o createTable() método de HBaseAdmin classe, você pode executar a tabela criada no modo Admin.

admin.createTable(table);

A seguir está o programa completo para criar uma tabela via admin.

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 ");
   }
}

Compile e execute o programa acima conforme mostrado abaixo.

$javac CreateTable.java
$java CreateTable

O seguinte deve ser o resultado:

Table created

Listando uma tabela usando o HBase Shell

list é o comando usado para listar todas as tabelas no HBase. A seguir está a sintaxe do comando list.

hbase(main):001:0 > list

Quando você digita este comando e executa no prompt do HBase, ele exibe a lista de todas as tabelas no HBase conforme mostrado abaixo.

hbase(main):001:0> list
TABLE
emp

Aqui você pode observar uma mesa chamada emp.

Listando tabelas usando a API Java

Siga as etapas fornecidas abaixo para obter a lista de tabelas do HBase usando a API Java.

Passo 1

Você tem um método chamado listTables() na aula HBaseAdminpara obter a lista de todas as tabelas no HBase. Este método retorna uma matriz deHTableDescriptor objetos.

//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();

Passo 2

Você pode obter o comprimento do HTableDescriptor[] array usando a variável de comprimento do HTableDescriptorclasse. Obtenha o nome das tabelas deste objeto usandogetNameAsString()método. Execute o loop 'for' usando-os e obtenha a lista das tabelas no HBase.

A seguir está o programa para listar todas as tabelas no HBase usando a API Java.

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());
      }
   
   }
}

Compile e execute o programa acima conforme mostrado abaixo.

$javac ListTables.java
$java ListTables

O seguinte deve ser o resultado:

User
emp

Desativando uma tabela usando o HBase Shell

Para excluir uma tabela ou alterar suas configurações, você precisa primeiro desabilitar a tabela usando o comando disable. Você pode reativá-lo usando o comando enable.

A seguir está a sintaxe para desabilitar uma tabela:

disable ‘emp’

Exemplo

Abaixo está um exemplo que mostra como desabilitar uma tabela.

hbase(main):025:0> disable 'emp'
0 row(s) in 1.2760 seconds

Verificação

Depois de desativar a tabela, você ainda pode sentir sua existência por meio de list e existscomandos. Você não pode escanear. Isso lhe dará o seguinte erro.

hbase(main):028:0> scan 'emp'
ROW         COLUMN + CELL
ERROR: emp is disabled.

está desabilitado

Este comando é usado para descobrir se uma tabela está desabilitada. Sua sintaxe é a seguinte.

hbase> is_disabled 'table name'

O exemplo a seguir verifica se a tabela chamada emp está desabilitada. Se estiver desabilitado, ele retornará verdadeiro e se não, retornará falso.

hbase(main):031:0> is_disabled 'emp'
true
0 row(s) in 0.0440 seconds

disable_all

Este comando é usado para desabilitar todas as tabelas que correspondem ao regex fornecido. A sintaxe paradisable_all comando é fornecido abaixo.

hbase> disable_all 'r.*'

Suponha que existam 5 tabelas no HBase, a saber raja, rajani, rajendra, rajesh e raju. O código a seguir irá desativar todas as tabelas começando comraj.

hbase(main):002:07> disable_all 'raj.*'
raja
rajani
rajendra
rajesh
raju
Disable the above 5 tables (y/n)?
y
5 tables successfully disabled

Desativar uma tabela usando a API Java

Para verificar se uma tabela está desabilitada, isTableDisabled() método é usado e para desabilitar uma tabela, disableTable()método é usado. Esses métodos pertencem aoHBaseAdminclasse. Siga as etapas abaixo para desabilitar uma tabela.

Passo 1

Instanciar HBaseAdmin classe como mostrado abaixo.

// Creating configuration object
Configuration conf = HBaseConfiguration.create();

// Creating HBaseAdmin object
HBaseAdmin admin = new HBaseAdmin(conf);

Passo 2

Verifique se a tabela está desabilitada usando isTableDisabled() método conforme mostrado abaixo.

Boolean b = admin.isTableDisabled("emp");

etapa 3

Se a tabela não estiver desabilitada, desabilite-a conforme mostrado abaixo.

if(!b){
   admin.disableTable("emp");
   System.out.println("Table disabled");
}

A seguir está o programa completo para verificar se a tabela está desabilitada; se não, como desativá-lo.

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");
      }
   }
}

Compile e execute o programa acima conforme mostrado abaixo.

$javac DisableTable.java
$java DsiableTable

O seguinte deve ser o resultado:

false
Table disabled

Habilitando uma tabela usando HBase Shell

Sintaxe para habilitar uma tabela:

enable ‘emp’

Exemplo

Dada a seguir é um exemplo para habilitar uma tabela.

hbase(main):005:0> enable 'emp'
0 row(s) in 0.4580 seconds

Verificação

Depois de habilitar a tabela, faça a varredura. Se você pode ver o esquema, sua tabela foi habilitada com sucesso.

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

está ativado

Este comando é usado para descobrir se uma tabela está habilitada. Sua sintaxe é a seguinte:

hbase> is_enabled 'table name'

O código a seguir verifica se a tabela chamada empestá ativado. Se estiver habilitado, ele retornará verdadeiro e se não, retornará falso.

hbase(main):031:0> is_enabled 'emp'
true
0 row(s) in 0.0440 seconds

Habilitar uma tabela usando a API Java

Para verificar se uma tabela está habilitada, isTableEnabled()método é usado; e para habilitar uma mesa,enableTable()método é usado. Esses métodos pertencem aHBaseAdminclasse. Siga as etapas fornecidas abaixo para habilitar uma tabela.

Passo 1

Instanciar HBaseAdmin classe como mostrado abaixo.

// Creating configuration object
Configuration conf = HBaseConfiguration.create();

// Creating HBaseAdmin object
HBaseAdmin admin = new HBaseAdmin(conf);

Passo 2

Verifique se a tabela está habilitada usando isTableEnabled() método conforme mostrado abaixo.

Boolean bool = admin.isTableEnabled("emp");

etapa 3

Se a tabela não estiver desabilitada, desabilite-a conforme mostrado abaixo.

if(!bool){
   admin.enableTable("emp");
   System.out.println("Table enabled");
}

A seguir está o programa completo para verificar se a tabela está habilitada e, se não estiver, como habilitá-la.

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");
      }
   }
}

Compile e execute o programa acima conforme mostrado abaixo.

$javac EnableTable.java
$java EnableTable

O seguinte deve ser o resultado:

false
Table Enabled

descrever

Este comando retorna a descrição da tabela. Sua sintaxe é a seguinte:

hbase> describe 'table name'

A seguir está a saída do comando describe no emp mesa.

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

alterar

Alter é o comando usado para fazer alterações em uma tabela existente. Usando este comando, você pode alterar o número máximo de células de um grupo de colunas, definir e excluir operadores de escopo de tabela e excluir um grupo de colunas de uma tabela.

Mudando o número máximo de células de uma família de colunas

A seguir está a sintaxe para alterar o número máximo de células de uma família de colunas.

hbase> alter 't1', NAME ⇒ 'f1', VERSIONS ⇒ 5

No exemplo a seguir, o número máximo de células é definido como 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

Operadores de escopo de tabela

Usando alter, você pode definir e remover operadores de escopo de tabela como MAX_FILESIZE, READONLY, MEMSTORE_FLUSHSIZE, DEFERRED_LOG_FLUSH, etc.

Configurando somente leitura

A seguir é fornecida a sintaxe para tornar uma tabela somente leitura.

hbase>alter 't1', READONLY(option)

No exemplo a seguir, fizemos o emp tabela somente leitura.

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

Removendo Operadores de Escopo de Tabela

Também podemos remover os operadores de escopo da tabela. A seguir está a sintaxe para remover 'MAX_FILESIZE' da tabela emp.

hbase> alter 't1', METHOD ⇒ 'table_att_unset', NAME ⇒ 'MAX_FILESIZE'

Excluindo uma Família de Colunas

Usando alter, você também pode excluir um grupo de colunas. A seguir está a sintaxe para excluir um grupo de colunas usando alter.

hbase> alter ‘ table name ’, ‘delete’ ⇒ ‘ column family ’

A seguir está um exemplo para excluir um grupo de colunas da tabela 'emp'.

Suponha que haja uma tabela chamada funcionário no HBase. Ele contém os seguintes dados:

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

Agora vamos deletar o grupo de colunas chamado professional usando o comando 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

Agora verifique os dados na tabela após a alteração. Observe que a família de colunas 'profissional' não existe mais, pois nós a deletamos.

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

Adicionando uma família de colunas usando a API Java

Você pode adicionar um grupo de colunas a uma tabela usando o método addColumn() do HBAseAdminclasse. Siga as etapas fornecidas abaixo para adicionar um grupo de colunas a uma tabela.

Passo 1

Instancie o HBaseAdmin classe.

// Instantiating configuration object
Configuration conf = HBaseConfiguration.create();

// Instantiating HBaseAdmin class
HBaseAdmin admin = new HBaseAdmin(conf);

Passo 2

o addColumn() método requer um nome de tabela e um objeto de HColumnDescriptorclasse. Portanto instancie oHColumnDescriptorclasse. O construtor deHColumnDescriptorpor sua vez, requer um nome de família de coluna que deve ser adicionado. Aqui, estamos adicionando um grupo de colunas denominado “contactDetails” à tabela “funcionário” existente.

// Instantiating columnDescriptor object

HColumnDescriptor columnDescriptor = new
HColumnDescriptor("contactDetails");

etapa 3

Adicione a família de colunas usando addColumnmétodo. Passe o nome da mesa e oHColumnDescriptor objeto de classe como parâmetros para este método.

// Adding column family
admin.addColumn("employee", new HColumnDescriptor("columnDescriptor"));

A seguir está o programa completo para adicionar um grupo de colunas a uma tabela existente.

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");
   }
}

Compile e execute o programa acima conforme mostrado abaixo.

$javac AddColumn.java
$java AddColumn

A compilação acima funciona apenas se você tiver definido o classpath em “ .bashrc”. Caso contrário, siga o procedimento fornecido abaixo para compilar seu arquivo .java.

//if "/home/home/hadoop/hbase " is your Hbase home folder then.

$javac -cp /home/hadoop/hbase/lib/*: Demo.java

Se tudo correr bem, ele produzirá o seguinte resultado:

column added

Excluindo uma família de colunas usando a API Java

Você pode excluir um grupo de colunas de uma tabela usando o método deleteColumn() do HBAseAdminclasse. Siga as etapas fornecidas abaixo para adicionar um grupo de colunas a uma tabela.

Passo 1

Instancie o HBaseAdmin classe.

// Instantiating configuration object
Configuration conf = HBaseConfiguration.create();

// Instantiating HBaseAdmin class
HBaseAdmin admin = new HBaseAdmin(conf);

Passo 2

Adicione a família de colunas usando deleteColumn()método. Passe o nome da tabela e o nome da família da coluna como parâmetros para este método.

// Deleting column family
admin.deleteColumn("employee", "contactDetails");

A seguir está o programa completo para excluir um grupo de colunas de uma tabela existente.

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"); 
   }
}

Compile e execute o programa acima conforme mostrado abaixo.

$javac DeleteColumn.java $java DeleteColumn

O seguinte deve ser o resultado:

column deleted

Existência de tabela usando HBase Shell

Você pode verificar a existência de uma mesa usando o existscomando. O exemplo a seguir mostra como usar este comando.

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

Verificando a existência de tabelas usando a API Java

Você pode verificar a existência de uma tabela no HBase usando o tableExists() método do HBaseAdmin classe. Siga as etapas fornecidas a seguir para verificar a existência de uma tabela no HBase.

Passo 1

Instantiate the HBaseAdimn class

// Instantiating configuration object
Configuration conf = HBaseConfiguration.create();

// Instantiating HBaseAdmin class
HBaseAdmin admin = new HBaseAdmin(conf);

Passo 2

Verifique a existência da tabela usando o tableExists( ) método.

A seguir está o programa java para testar a existência de uma tabela no HBase usando a API java.

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);
   }
}

Compile e execute o programa acima conforme mostrado abaixo.

$javac TableExists.java $java TableExists

O seguinte deve ser o resultado:

true

Descartando uma tabela usando o HBase Shell

Usando o dropcomando, você pode excluir uma tabela. Antes de derrubar uma mesa, você deve desabilitá-la.

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

Verifique se a tabela foi excluída usando o comando existing.

hbase(main):020:07gt; exists 'emp'
Table emp does not exist
0 row(s) in 0.0730 seconds

drop_all

Este comando é usado para eliminar as tabelas que correspondem ao “regex” fornecido no comando. Sua sintaxe é a seguinte:

hbase> drop_all ‘t.*’

Note: Antes de largar uma mesa, você deve desabilitá-la.

Exemplo

Suponha que haja tabelas chamadas raja, rajani, rajendra, rajesh e raju.

hbase(main):017:0> list
TABLE
raja
rajani
rajendra 
rajesh
raju
9 row(s) in 0.0270 seconds

Todas essas tabelas começam com as letras raj. Em primeiro lugar, vamos desabilitar todas essas tabelas usando odisable_all comando como mostrado abaixo.

hbase(main):002:0> disable_all 'raj.*'
raja
rajani
rajendra
rajesh
raju
Disable the above 5 tables (y/n)?
y
5 tables successfully disabled

Agora você pode excluir todos eles usando o drop_all comando conforme fornecido abaixo.

hbase(main):018:0> drop_all 'raj.*'
raja
rajani
rajendra
rajesh
raju
Drop the above 5 tables (y/n)?
y
5 tables successfully dropped

Excluindo uma tabela usando a API Java

Você pode excluir uma tabela usando o deleteTable() método no HBaseAdminclasse. Siga as etapas fornecidas a seguir para excluir uma tabela usando a API Java.

Passo 1

Instancie a classe HBaseAdmin.

// creating a configuration object
Configuration conf = HBaseConfiguration.create();

// Creating HBaseAdmin object
HBaseAdmin admin = new HBaseAdmin(conf);

Passo 2

Desative a tabela usando o disableTable() método do HBaseAdmin classe.

admin.disableTable("emp1");

etapa 3

Agora exclua a tabela usando o deleteTable() método do HBaseAdmin classe.

admin.deleteTable("emp12");

A seguir está o programa java completo para excluir uma tabela no 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");
   }
}

Compile e execute o programa acima conforme mostrado abaixo.

$javac DeleteTable.java $java DeleteTable

O seguinte deve ser o resultado:

Table deleted

Saída

Você sai do shell digitando o exit comando.

hbase(main):021:0> exit

Parando o HBase

Para parar o HBase, navegue até a pasta inicial do HBase e digite o seguinte comando.

./bin/stop-hbase.sh

Parando o HBase usando a API Java

Você pode desligar o HBase usando o shutdown() método do HBaseAdminclasse. Siga as etapas fornecidas abaixo para desligar o HBase:

Passo 1

Instancie a classe HbaseAdmin.

// Instantiating configuration object
Configuration conf = HBaseConfiguration.create();

// Instantiating HBaseAdmin object
HBaseAdmin admin = new HBaseAdmin(conf);

Passo 2

Desligue o HBase usando o shutdown() método do HBaseAdmin classe.

admin.shutdown();

A seguir está o programa para interromper o 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();
   }
}

Compile e execute o programa acima conforme mostrado abaixo.

$javac ShutDownHbase.java $java ShutDownHbase

O seguinte deve ser o resultado:

Shutting down hbase

Este capítulo descreve a API do cliente Java para HBase que é usada para executar CRUDoperações em tabelas HBase. HBase é escrito em Java e possui uma API Java Native. Portanto, ele fornece acesso programático à Linguagem de Manipulação de Dados (DML).

Configuração de classe HBase

Adiciona arquivos de configuração do HBase a uma configuração. Esta classe pertence aoorg.apache.hadoop.hbase pacote.

Métodos e descrição

S.No. Métodos e Descrição
1

static org.apache.hadoop.conf.Configuration create()

Este método cria uma configuração com recursos HBase.

Classe HTable

HTable é uma classe interna HBase que representa uma tabela HBase. É uma implementação de tabela usada para se comunicar com uma única tabela HBase. Esta classe pertence aoorg.apache.hadoop.hbase.client classe.

Construtores

S.No. Construtores e descrição
1

HTable()

2

HTable(TableName tableName, ClusterConnection connection, ExecutorService pool)

Usando este construtor, você pode criar um objeto para acessar uma tabela HBase.

Métodos e descrição

S.No. Métodos e Descrição
1

void close()

Libera todos os recursos do HTable.

2

void delete(Delete delete)

Exclui as células / linha especificadas.

3

boolean exists(Get get)

Usando este método, você pode testar a existência de colunas na tabela, conforme especificado por Get.

4

Result get(Get get)

Recupera certas células de uma determinada linha.

5

org.apache.hadoop.conf.Configuration getConfiguration()

Retorna o objeto Configuration usado por esta instância.

6

TableName getName()

Retorna a instância do nome da tabela desta tabela.

7

HTableDescriptor getTableDescriptor()

Retorna o descritor de tabela para esta tabela.

8

byte[] getTableName()

Retorna o nome desta tabela.

9

void put(Put put)

Usando este método, você pode inserir dados na tabela.

Class Put

Esta classe é usada para realizar operações Put para uma única linha. Pertence aoorg.apache.hadoop.hbase.client pacote.

Construtores

S.No. Construtores e descrição
1

Put(byte[] row)

Usando este construtor, você pode criar uma operação Put para a linha especificada.

2

Put(byte[] rowArray, int rowOffset, int rowLength)

Usando este construtor, você pode fazer uma cópia da chave de linha passada para mantê-la local.

3

Put(byte[] rowArray, int rowOffset, int rowLength, long ts)

Usando este construtor, você pode fazer uma cópia da chave de linha passada para mantê-la local.

4

Put(byte[] row, long ts)

Usando esse construtor, podemos criar uma operação Put para a linha especificada, usando um determinado carimbo de data / hora.

Métodos

S.No. Métodos e Descrição
1

Put add(byte[] family, byte[] qualifier, byte[] value)

Adiciona a coluna e o valor especificados a esta operação Put.

2

Put add(byte[] family, byte[] qualifier, long ts, byte[] value)

Adiciona a coluna e o valor especificados, com o carimbo de data / hora especificado como sua versão para esta operação Put.

3

Put add(byte[] family, ByteBuffer qualifier, long ts, ByteBuffer value)

Adiciona a coluna e o valor especificados, com o carimbo de data / hora especificado como sua versão para esta operação Put.

4

Put add(byte[] family, ByteBuffer qualifier, long ts, ByteBuffer value)

Adiciona a coluna e o valor especificados, com o carimbo de data / hora especificado como sua versão para esta operação Put.

Class Get

Esta classe é usada para realizar operações Get em uma única linha. Esta classe pertence aoorg.apache.hadoop.hbase.client pacote.

Construtor

S.No. Construtor e Descrição
1

Get(byte[] row)

Usando este construtor, você pode criar uma operação Get para a linha especificada.

2 Get(Get get)

Métodos

S.No. Métodos e Descrição
1

Get addColumn(byte[] family, byte[] qualifier)

Recupera a coluna da família específica com o qualificador especificado.

2

Get addFamily(byte[] family)

Recupera todas as colunas da família especificada.

Eliminar Classe

Esta classe é usada para realizar operações de exclusão em uma única linha. Para excluir uma linha inteira, instancie um objeto Delete com a linha a ser excluída. Esta classe pertence aoorg.apache.hadoop.hbase.client pacote.

Construtor

S.No. Construtor e Descrição
1

Delete(byte[] row)

Cria uma operação Delete para a linha especificada.

2

Delete(byte[] rowArray, int rowOffset, int rowLength)

Cria uma operação Delete para a linha e o carimbo de data / hora especificados.

3

Delete(byte[] rowArray, int rowOffset, int rowLength, long ts)

Cria uma operação Delete para a linha e o carimbo de data / hora especificados.

4

Delete(byte[] row, long timestamp)

Cria uma operação Delete para a linha e o carimbo de data / hora especificados.

Métodos

S.No. Métodos e Descrição
1

Delete addColumn(byte[] family, byte[] qualifier)

Exclui a versão mais recente da coluna especificada.

2

Delete addColumns(byte[] family, byte[] qualifier, long timestamp)

Exclui todas as versões da coluna especificada com um carimbo de data / hora menor ou igual ao carimbo de data / hora especificado.

3

Delete addFamily(byte[] family)

Exclui todas as versões de todas as colunas da família especificada.

4

Delete addFamily(byte[] family, long timestamp)

Exclui todas as colunas da família especificada com um carimbo de data / hora menor ou igual ao carimbo de data / hora especificado.

Resultado da Classe

Esta classe é usada para obter um resultado de linha única de uma consulta Get ou Scan.

Construtores

S.No. Construtores
1

Result()

Usando esse construtor, você pode criar um Result vazio sem carga útil KeyValue; retorna null se você chamar Cells () brutos.

Métodos

S.No. Métodos e Descrição
1

byte[] getValue(byte[] family, byte[] qualifier)

Este método é usado para obter a versão mais recente da coluna especificada.

2

byte[] getRow()

Este método é usado para recuperar a chave de linha que corresponde à linha a partir da qual este Resultado foi criado.

Inserindo dados usando HBase Shell

Este capítulo demonstra como criar dados em uma tabela HBase. Para criar dados em uma tabela HBase, os seguintes comandos e métodos são usados:

  • put comando,

  • add() método de Put classe, e

  • put() método de HTable classe.

Como exemplo, vamos criar a seguinte tabela no HBase.

Usando putcomando, você pode inserir linhas em uma tabela. Sua sintaxe é a seguinte:

put ’<table name>’,’row1’,’<colfamily:colname>’,’<value>’

Inserindo a primeira linha

Vamos inserir os valores da primeira linha na tabela emp como mostrado abaixo.

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

Insira as linhas restantes usando o comando put da mesma maneira. Se você inserir a tabela inteira, obterá a seguinte saída.

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

Inserindo dados usando a API Java

Você pode inserir dados em Hbase usando o add() método do Putclasse. Você pode salvá-lo usando oput() método do HTableclasse. Essas classes pertencem aoorg.apache.hadoop.hbase.clientpacote. Abaixo são fornecidas as etapas para criar dados em uma tabela de HBase.

Etapa 1: instanciar a classe de configuração

o Configurationclasse adiciona arquivos de configuração HBase a seu objeto. Você pode criar um objeto de configuração usando ocreate() método do HbaseConfiguration classe como mostrado abaixo.

Configuration conf = HbaseConfiguration.create();

Etapa 2: instanciar a classe HTable

Você tem uma classe chamada HTable, uma implementação da Tabela no HBase. Esta classe é usada para se comunicar com uma única tabela HBase. Ao instanciar essa classe, ele aceita o objeto de configuração e o nome da tabela como parâmetros. Você pode instanciar a classe HTable conforme mostrado abaixo.

HTable hTable = new HTable(conf, tableName);

Etapa 3: instancie o PutClass

Para inserir dados em uma tabela HBase, o add()método e suas variantes são usados. Este método pertence aPut, portanto, instancie a classe put. Esta classe requer o nome da linha em que você deseja inserir os dados, em formato de string. Você pode instanciar oPut classe como mostrado abaixo.

Put p = new Put(Bytes.toBytes("row1"));

Etapa 4: InsertData

o add() método de Putclasse é usada para inserir dados. Requer matrizes de 3 bytes que representam família de colunas, qualificador de coluna (nome da coluna) e o valor a ser inserido, respectivamente. Insira dados na tabela HBase usando o método add () conforme mostrado abaixo.

p.add(Bytes.toBytes("coloumn family "), Bytes.toBytes("column
name"),Bytes.toBytes("value"));

Etapa 5: salve os dados na tabela

Depois de inserir as linhas necessárias, salve as alterações adicionando a instância put ao put() método da classe HTable conforme mostrado abaixo.

hTable.put(p);

Etapa 6: feche a instância HTable

Após criar os dados na Tabela HBase, feche o HTable instância usando o close() método conforme mostrado abaixo.

hTable.close();

A seguir está o programa completo para criar dados na Tabela 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();
   }
}

Compile e execute o programa acima conforme mostrado abaixo.

$javac InsertData.java $java InsertData

O seguinte deve ser o resultado:

data inserted

Atualizando dados usando HBase Shell

Você pode atualizar um valor de célula existente usando o putcomando. Para fazer isso, basta seguir a mesma sintaxe e mencionar seu novo valor conforme mostrado abaixo.

put ‘table name’,’row ’,'Column family:column name',’new value’

O valor recém-fornecido substitui o valor existente, atualizando a linha.

Exemplo

Suponha que haja uma tabela no HBase chamada emp com os seguintes dados.

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

O comando a seguir atualizará o valor da cidade do funcionário chamado 'Raju' para Delhi.

hbase(main):002:0> put 'emp','row1','personal:city','Delhi'
0 row(s) in 0.0400 seconds

A tabela atualizada é a seguinte, onde você pode observar que a cidade de Raju foi alterada para 'Delhi'.

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

Atualizando dados usando a API Java

Você pode atualizar os dados em uma célula particular usando o put()método. Siga as etapas fornecidas abaixo para atualizar um valor de célula existente de uma tabela.

Etapa 1: instanciar a classe de configuração

Configurationclasse adiciona arquivos de configuração HBase a seu objeto. Você pode criar um objeto de configuração usando ocreate() método do HbaseConfiguration classe como mostrado abaixo.

Configuration conf = HbaseConfiguration.create();

Etapa 2: instanciar a classe HTable

Você tem uma classe chamada HTable, uma implementação da Tabela no HBase. Esta classe é usada para se comunicar com uma única tabela HBase. Ao instanciar essa classe, ele aceita o objeto de configuração e o nome da tabela como parâmetros. Você pode instanciar a classe HTable conforme mostrado abaixo.

HTable hTable = new HTable(conf, tableName);

Etapa 3: instanciar a classe Put

Para inserir dados na Tabela HBase, o add()método e suas variantes são usados. Este método pertence aPut, portanto instancie o putclasse. Esta classe requer o nome da linha em que você deseja inserir os dados, em formato de string. Você pode instanciar oPut classe como mostrado abaixo.

Put p = new Put(Bytes.toBytes("row1"));

Etapa 4: Atualizar uma célula existente

o add() método de Putclasse é usada para inserir dados. Requer matrizes de 3 bytes que representam família de colunas, qualificador de coluna (nome da coluna) e o valor a ser inserido, respectivamente. Insira os dados na tabela HBase usando oadd() método conforme mostrado abaixo.

p.add(Bytes.toBytes("coloumn family "), Bytes.toBytes("column
name"),Bytes.toBytes("value"));
p.add(Bytes.toBytes("personal"),
Bytes.toBytes("city"),Bytes.toBytes("Delih"));

Etapa 5: salve os dados na tabela

Depois de inserir as linhas necessárias, salve as alterações adicionando a instância put ao put() método da classe HTable conforme mostrado abaixo.

hTable.put(p);

Etapa 6: Fechar a instância HTable

Depois de criar dados na Tabela HBase, feche o HTable instância usando o método close () conforme mostrado abaixo.

hTable.close();

A seguir está o programa completo para atualizar os dados de uma determinada tabela.

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();
   }
}

Compile e execute o programa acima conforme mostrado abaixo.

$javac UpdateData.java $java UpdateData

O seguinte deve ser o resultado:

data Updated

Leitura de dados usando HBase Shell

o get comando e o get() método de HTableclasse são usados ​​para ler dados de uma tabela no HBase. Usandogetcomando, você pode obter uma única linha de dados por vez. Sua sintaxe é a seguinte:

get ’<table name>’,’row1’

Exemplo

O exemplo a seguir mostra como usar o comando get. Vamos examinar a primeira linha doemp mesa.

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

Lendo uma coluna específica

Dada a seguir está a sintaxe para ler uma coluna específica usando o get método.

hbase> get 'table name', ‘rowid’, {COLUMN ⇒ ‘column family:column name ’}

Exemplo

Dada a seguir é o exemplo para ler uma coluna específica na tabela 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

Lendo dados usando a API Java

Para ler os dados de uma tabela HBase, use o get()método da classe HTable. Este método requer uma instância doGetclasse. Siga as etapas fornecidas abaixo para recuperar os dados da tabela HBase.

Etapa 1: instanciar a classe de configuração

Configurationclasse adiciona arquivos de configuração HBase a seu objeto. Você pode criar um objeto de configuração usando ocreate() método do HbaseConfiguration classe como mostrado abaixo.

Configuration conf = HbaseConfiguration.create();

Etapa 2: instanciar a classe HTable

Você tem uma classe chamada HTable, uma implementação da Tabela no HBase. Esta classe é usada para se comunicar com uma única tabela HBase. Ao instanciar essa classe, ele aceita o objeto de configuração e o nome da tabela como parâmetros. Você pode instanciar a classe HTable conforme mostrado abaixo.

HTable hTable = new HTable(conf, tableName);

Etapa 3: instanciar a classe Get

Você pode recuperar dados da tabela HBase usando o get() método do HTableclasse. Este método extrai uma célula de uma determinada linha. Requer umGetobjeto de classe como parâmetro. Crie-o conforme mostrado abaixo.

Get get = new Get(toBytes("row1"));

Step 4: Read the Data

While retrieving data, you can get a single row by id, or get a set of rows by a set of row ids, or scan an entire table or a subset of rows.

You can retrieve an HBase table data using the add method variants in Get class.

To get a specific column from a specific column family, use the following method.

get.addFamily(personal)

To get all the columns from a specific column family, use the following method.

get.addColumn(personal, name)

Step 5: Get the Result

Get the result by passing your Get class instance to the get method of the HTable class. This method returns the Result class object, which holds the requested result. Given below is the usage of get() method.

Result result = table.get(g);

Step 6: Reading Values from the Result Instance

The Result class provides the getValue() method to read the values from its instance. Use it as shown below to read the values from the Result instance.

byte [] value = result.getValue(Bytes.toBytes("personal"),Bytes.toBytes("name"));
byte [] value1 = result.getValue(Bytes.toBytes("personal"),Bytes.toBytes("city"));

Given below is the complete program to read values from an HBase table.

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);
   }
}

Compile and execute the above program as shown below.

$javac RetriveData.java $java RetriveData

The following should be the output:

name: Raju city: Delhi

Deleting a Specific Cell in a Table

Using the delete command, you can delete a specific cell in a table. The syntax of delete command is as follows:

delete ‘<table name>’, ‘<row>’, ‘<column name >’, ‘<time stamp>’

Example

Here is an example to delete a specific cell. Here we are deleting the salary.

hbase(main):006:0> delete 'emp', '1', 'personal data:city',
1417521848375
0 row(s) in 0.0060 seconds

Deleting All Cells in a Table

Using the “deleteall” command, you can delete all the cells in a row. Given below is the syntax of deleteall command.

deleteall ‘<table name>’, ‘<row>’,

Example

Here is an example of “deleteall” command, where we are deleting all the cells of row1 of emp table.

hbase(main):007:0> deleteall 'emp','1'
0 row(s) in 0.0240 seconds

Verifique a tabela usando o scancomando. Um instantâneo da tabela após excluí-la é fornecido abaixo.

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

Exclusão de dados usando a API Java

Você pode excluir dados de uma tabela HBase usando o delete() método do HTableclasse. Siga as etapas abaixo para excluir dados de uma tabela.

Etapa 1: instanciar a classe de configuração

Configurationclasse adiciona arquivos de configuração HBase a seu objeto. Você pode criar um objeto de configuração usando ocreate() método do HbaseConfiguration classe como mostrado abaixo.

Configuration conf = HbaseConfiguration.create();

Etapa 2: instanciar a classe HTable

Você tem uma classe chamada HTable, uma implementação da Tabela no HBase. Esta classe é usada para se comunicar com uma única tabela HBase. Ao instanciar essa classe, ele aceita o objeto de configuração e o nome da tabela como parâmetros. Você pode instanciar a classe HTable conforme mostrado abaixo.

HTable hTable = new HTable(conf, tableName);

Etapa 3: instanciar a classe de exclusão

Instancie o Deleteclasse passando o rowid da linha que deve ser excluída, no formato de matriz de bytes. Você também pode passar timestamp e Rowlock para este construtor.

Delete delete = new Delete(toBytes("row1"));

Etapa 4: Selecione os dados a serem excluídos

Você pode excluir os dados usando os métodos de exclusão do Deleteclasse. Esta classe possui vários métodos de exclusão. Escolha as colunas ou famílias de colunas a serem excluídas usando esses métodos. Dê uma olhada nos exemplos a seguir que mostram o uso dos métodos da classe Delete.

delete.deleteColumn(Bytes.toBytes("personal"), Bytes.toBytes("name"));
delete.deleteFamily(Bytes.toBytes("professional"));

Etapa 5: Exclua os dados

Exclua os dados selecionados passando o delete instância para o delete() método do HTable classe como mostrado abaixo.

table.delete(delete);

Etapa 6: feche o HTableInstance

Depois de excluir os dados, feche o HTable Instância.

table.close();

A seguir está o programa completo para excluir dados da tabela 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.....");
   }
}

Compile e execute o programa acima conforme mostrado abaixo.

$javac Deletedata.java $java DeleteData

O seguinte deve ser o resultado:

data deleted

Digitalizando usando HBase Shell

o scancomando é usado para visualizar os dados em HTable. Usando o comando scan, você pode obter os dados da tabela. Sua sintaxe é a seguinte:

scan ‘<table name>’

Exemplo

O exemplo a seguir mostra como ler dados de uma tabela usando o comando scan. Aqui estamos lendo oemp mesa.

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

Digitalizando usando API Java

O programa completo para verificar todos os dados da tabela usando a API Java é o seguinte.

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();
   }
}

Compile e execute o programa acima conforme mostrado abaixo.

$javac ScanTable.java $java ScanTable

O seguinte deve ser o resultado:

Found row :
keyvalues={row1/personal:city/1418275612888/Put/vlen=5/mvcc=0,
row1/personal:name/1418035791555/Put/vlen=4/mvcc=0}

contagem

Você pode contar o número de linhas de uma tabela usando o countcomando. Sua sintaxe é a seguinte:

count ‘<table name>’

Depois de excluir a primeira linha, a tabela emp terá duas linhas. Verifique como mostrado abaixo.

hbase(main):023:0> count 'emp'
2 row(s) in 0.090 seconds
⇒ 2

truncar

Este comando desabilita descartes e recria uma tabela. A sintaxe detruncate é o seguinte:

hbase> truncate 'table name'

Exemplo

A seguir está o exemplo do comando truncate. Aqui nós truncamos oemp mesa.

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

Depois de truncar a tabela, use o comando scan para verificar. Você obterá uma tabela com zero linhas.

hbase(main):017:0> scan ‘emp’
ROW                  COLUMN + CELL
0 row(s) in 0.3110 seconds

Podemos conceder e revogar permissões para usuários no HBase. Existem três comandos para fins de segurança: grant, revoke e user_permission.

conceder

o grantcomando concede direitos específicos como ler, escrever, executar e admin em uma tabela para um determinado usuário. A sintaxe do comando grant é a seguinte:

hbase> grant <user> <permissions> [<table> [<column family> [&ltcolumn; qualifier>]]

Podemos conceder zero ou mais privilégios a um usuário do conjunto de RWXCA, onde

  • R - representa o privilégio de leitura.
  • W - representa o privilégio de gravação.
  • X - representa o privilégio de execução.
  • C - representa o privilégio de criação.
  • A - representa o privilégio de administrador.

Abaixo está um exemplo que concede todos os privilégios a um usuário chamado 'Tutorialspoint'.

hbase(main):018:0> grant 'Tutorialspoint', 'RWXCA'

revogar

o revokecomando é usado para revogar os direitos de acesso de um usuário de uma tabela. Sua sintaxe é a seguinte:

hbase> revoke <user>

O código a seguir revoga todas as permissões do usuário chamado 'Tutorialspoint'.

hbase(main):006:0> revoke 'Tutorialspoint'

user_permission

Este comando é usado para listar todas as permissões para uma determinada tabela. A sintaxe deuser_permission é o seguinte:

hbase>user_permission ‘tablename’

O código a seguir lista todas as permissões de usuário da tabela 'emp'.

hbase(main):013:0> user_permission 'emp'