Tutorial: Utilizar o Apache HBase no Azure HDInsight
Este tutorial demonstra como criar um cluster Apache HBase no Azure HDInsight, criar tabelas HBase e consultar tabelas usando o Apache Hive. Para obter informações gerais do HBase, consulte o artigo Descrição geral do HBase do HDInsight.
Neste tutorial, irá aprender a:
- Criar cluster Apache HBase
- Criar tabelas do HBase e inserir dados
- Usar o Apache Hive para consultar o Apache HBase
- Utilizar APIs REST de HBase utilizando Curl
- Verificar o estado do cluster
Pré-requisitos
Um cliente SSH. Para obter mais informações, veja Ligar ao HDInsight (Apache Hadoop) através de SSH.
Bash. Os exemplos neste artigo usam o shell Bash no Windows 10 para os comandos curl. Consulte o Guia de Instalação do Subsistema Windows para Linux para Windows 10 para obter as etapas de instalação. Outros shells Unix também funcionam. Os exemplos de curl, com algumas pequenas modificações, podem funcionar em um prompt de comando do Windows. Ou você pode usar o cmdlet do Windows PowerShell Invoke-RestMethod.
Criar cluster Apache HBase
O procedimento a seguir usa um modelo do Azure Resource Manager para criar um cluster HBase. O modelo também cria a conta de Armazenamento do Azure padrão dependente. Para compreender os parâmetros utilizados no procedimento e outros métodos de criação do cluster, consulte o artigo Criar clusters do Hadoop baseados em Linux no HDInsight.
Selecione a imagem a seguir para abrir o modelo no portal do Azure. O modelo está localizado em Modelos de Início Rápido do Azure.
Na caixa de diálogo Implantação personalizada, insira os seguintes valores:
Property Descrição Subscrição Selecione sua assinatura do Azure que é usada para criar o cluster. Grupo de recursos Crie um grupo de gerenciamento de Recursos do Azure ou use um existente. Location Especifique o local do grupo de recursos. ClusterName Insira um nome para o cluster HBase. Nome e palavra-passe de início de sessão no cluster O nome de login padrão é admin
.Nome de utilizador e palavra-passe de SSH O nome de usuário padrão é sshuser
.Os outros parâmetros são opcionais.
Cada cluster tem uma dependência de conta do Armazenamento do Azure. Depois de excluir um cluster, os dados permanecem na conta de armazenamento. O nome da conta do Storage predefinida do cluster é o nome do cluster com "store" anexado. É codificado na seção de variáveis de modelo.
Selecione Concordo com os termos e condições mencionados acima e, em seguida, selecione Comprar. A criação de um cluster demora cerca de 20 minutos.
Depois que um cluster HBase for excluído, você poderá criar outro cluster HBase usando o mesmo contêiner de blob padrão. O novo cluster seleciona as tabelas do HBase criadas por si no cluster original. Para evitar inconsistências, recomendamos que desative as tabelas do HBase antes de eliminar o cluster.
Criar tabelas e inserir dados
Você pode usar SSH para se conectar a clusters HBase e, em seguida, usar o Apache HBase Shell para criar tabelas HBase, inserir dados e consultar dados.
Para a maioria das pessoas, os dados são apresentados no formato de tabela:
No HBase (uma implementação do Cloud BigTable), os mesmos dados se parecem com:
Para utilizar a shell de HBase
Use
ssh
o comando para se conectar ao cluster HBase. Edite o seguinte comando substituindoCLUSTERNAME
pelo nome do cluster e digite o comando:ssh sshuser@CLUSTERNAME-ssh.azurehdinsight.net
Use
hbase shell
o comando para iniciar o shell interativo do HBase. Digite o seguinte comando em sua conexão SSH:hbase shell
Use
create
o comando para criar uma tabela HBase com famílias de duas colunas. Os nomes de tabela e coluna diferenciam maiúsculas de minúsculas. Introduza o seguinte comando:create 'Contacts', 'Personal', 'Office'
Use
list
o comando para listar todas as tabelas no HBase. Introduza o seguinte comando:list
Use
put
o comando para inserir valores em uma coluna especificada em uma linha especificada em uma tabela específica. Introduza os seguintes comandos:put 'Contacts', '1000', 'Personal:Name', 'John Dole' put 'Contacts', '1000', 'Personal:Phone', '1-425-000-0001' put 'Contacts', '1000', 'Office:Phone', '1-425-000-0002' put 'Contacts', '1000', 'Office:Address', '1111 San Gabriel Dr.'
Use
scan
o comando para verificar e retornar os dados daContacts
tabela. Introduza o seguinte comando:scan 'Contacts'
Use
get
o comando para buscar o conteúdo de uma linha. Introduza o seguinte comando:get 'Contacts', '1000'
Você vê resultados semelhantes ao usar o
scan
comando porque há apenas uma linha.Para obter mais informações sobre o esquema de tabela do HBase, consulte Introdução ao design do esquema do Apache HBase. Para obter mais comandos HBase, consulte o artigo Guia de referência Apache HBase.
Use
exit
o comando para parar o shell interativo do HBase. Introduza o seguinte comando:exit
Para efetuar o carregamento em massa de dados para a tabela de contactos HBase
O HBase inclui vários métodos de carregamento dos dados em tabelas. Para obter mais informações, consulte o artigo Carregamento em massa.
Está disponível um ficheiro de dados de exemplo num contentor de blobs público, wasb://hbasecontacts@hditutorialdata.blob.core.windows.net/contacts.txt
. O conteúdo do ficheiro de dados é:
8396 Calvin Raji 230-555-0191 230-555-0191 5415 San Gabriel Dr.
16600 Karen Wu 646-555-0113 230-555-0192 9265 La Paz
4324 Karl Xie 508-555-0163 230-555-0193 4912 La Vuelta
16891 Jonn Jackson 674-555-0110 230-555-0194 40 Ellis St.
3273 Miguel Miller 397-555-0155 230-555-0195 6696 Anchor Drive
3588 Osa Agbonile 592-555-0152 230-555-0196 1873 Lion Circle
10272 Julia Lee 870-555-0110 230-555-0197 3148 Rose Street
4868 Jose Hayes 599-555-0171 230-555-0198 793 Crawford Street
4761 Caleb Alexander 670-555-0141 230-555-0199 4775 Kentucky Dr.
16443 Terry Chander 998-555-0171 230-555-0200 771 Northridge Drive
Opcionalmente, pode criar um ficheiro de texto e carregar o ficheiro para a sua própria conta de armazenamento. Para obter instruções, consulte Carregar dados para trabalhos do Apache Hadoop no HDInsight.
Este procedimento usa a Contacts
tabela HBase criada no último procedimento.
A partir da sua conexão ssh aberta, execute o seguinte comando para transformar o arquivo de dados em StoreFiles e armazenar em um caminho relativo especificado pelo
Dimporttsv.bulk.output
.hbase org.apache.hadoop.hbase.mapreduce.ImportTsv -Dimporttsv.columns="HBASE_ROW_KEY,Personal:Name,Personal:Phone,Office:Phone,Office:Address" -Dimporttsv.bulk.output="/example/data/storeDataFileOutput" Contacts wasb://hbasecontacts@hditutorialdata.blob.core.windows.net/contacts.txt
Execute o seguinte comando para carregar os dados na tabela do
/example/data/storeDataFileOutput
HBase:hbase org.apache.hadoop.hbase.mapreduce.LoadIncrementalHFiles /example/data/storeDataFileOutput Contacts
Você pode abrir o shell do HBase e usar o
scan
comando para listar o conteúdo da tabela.
Usar o Apache Hive para consultar o Apache HBase
Você pode consultar dados em tabelas do HBase usando o Apache Hive. Nesta secção, irá criar uma tabela de Hive que mapeia para a tabela HBase e utiliza-a para consultar os dados na tabela HBase.
A partir da sua conexão ssh aberta, use o seguinte comando para iniciar o Beeline:
beeline -u 'jdbc:hive2://localhost:10001/;transportMode=http' -n admin
Para obter mais informações sobre o Beeline, veja Utilizar o Hive com o Hadoop no HDInsight com o Beeline.
Execute o seguinte script HiveQL para criar uma tabela Hive que mapeie para a tabela HBase. Certifique-se de ter criado a tabela de exemplo mencionada anteriormente neste artigo usando o shell do HBase antes de executar esta instrução.
CREATE EXTERNAL TABLE hbasecontacts(rowkey STRING, name STRING, homephone STRING, officephone STRING, officeaddress STRING) STORED BY 'org.apache.hadoop.hive.hbase.HBaseStorageHandler' WITH SERDEPROPERTIES ('hbase.columns.mapping' = ':key,Personal:Name,Personal:Phone,Office:Phone,Office:Address') TBLPROPERTIES ('hbase.table.name' = 'Contacts');
Execute o seguinte script de HiveQL para consultar os dados na tabela HBase:
SELECT count(rowkey) AS rk_count FROM hbasecontacts;
Para sair do Beeline, use
!exit
.Para sair da conexão ssh, use
exit
o .
Clusters Hive e Hbase separados
A consulta do Hive para acessar dados do HBase não precisa ser executada a partir do cluster do HBase. Qualquer cluster que venha com o Hive (incluindo Spark, Hadoop, HBase ou Interactive Query) pode ser usado para consultar dados do HBase, desde que as seguintes etapas sejam concluídas:
- Ambos os clusters devem ser anexados à mesma Rede Virtual e Sub-rede
- Copie
/usr/hdp/$(hdp-select --version)/hbase/conf/hbase-site.xml
dos nós principais do cluster HBase para os nós principais do cluster do Hive e nós de trabalho.
Clusters seguros
Os dados do HBase também podem ser consultados a partir do Hive usando o HBase habilitado para ESP:
- Ao seguir um padrão de vários clusters, ambos os clusters devem ser habilitados para ESP.
- Para permitir que o Hive consulte os dados do HBase, certifique-se de que o
hive
usuário tenha permissões para acessar os dados do HBase por meio do plug-in Hbase Apache Ranger - Quando você usa clusters separados habilitados para ESP, o conteúdo dos nós principais do
/etc/hosts
cluster HBase deve ser anexado aos/etc/hosts
nós principais do cluster do Hive e aos nós de trabalho.
Nota
Depois de dimensionar qualquer cluster, /etc/hosts
deve ser anexado novamente
Utilizar a API REST do HBase através do Curl
A API REST do HBase é protegida por meio de autenticação básica. Deve sempre efetuar pedidos com HTTP Secure (HTTPS) para ajudar a garantir que as credenciais são enviadas de forma segura para o servidor.
Para habilitar a API REST do HBase no cluster HDInsight, adicione o seguinte script de inicialização personalizado à seção Ação de script. Você pode adicionar o script de inicialização ao criar o cluster ou após a criação do cluster. Em Tipo de Nó, selecione Servidores de Região para garantir que o script seja executado somente em Servidores de Região do HBase. O script inicia o proxy REST do HBase na porta 8090 em servidores de região.
#! /bin/bash THIS_MACHINE=`hostname` if [[ $THIS_MACHINE != wn* ]] then printf 'Script to be executed only on worker nodes' exit 0 fi RESULT=`pgrep -f RESTServer` if [[ -z $RESULT ]] then echo "Applying mitigation; starting REST Server" sudo python /usr/lib/python2.7/dist-packages/hdinsight_hbrest/HbaseRestAgent.py else echo "REST server already running" exit 0 fi
Defina a variável de ambiente para facilitar o uso. Edite os comandos a seguir substituindo
MYPASSWORD
pela senha de login do cluster. SubstituaMYCLUSTERNAME
pelo nome do cluster HBase. Em seguida, insira os comandos.export PASSWORD='MYPASSWORD' export CLUSTER_NAME=MYCLUSTERNAME
Utilize o seguinte comando para listar as tabelas HBase existentes:
curl -u admin:$PASSWORD \ -G https://$CLUSTER_NAME.azurehdinsight.net/hbaserest/
Utilize o seguinte comando para criar uma nova tabela HBase com duas famílias de coluna:
curl -u admin:$PASSWORD \ -X PUT "https://$CLUSTER_NAME.azurehdinsight.net/hbaserest/Contacts1/schema" \ -H "Accept: application/json" \ -H "Content-Type: application/json" \ -d "{\"@name\":\"Contact1\",\"ColumnSchema\":[{\"name\":\"Personal\"},{\"name\":\"Office\"}]}" \ -v
O esquema é fornecido no formato JSON.
Utilize o seguinte comando para inserir alguns dados:
curl -u admin:$PASSWORD \ -X PUT "https://$CLUSTER_NAME.azurehdinsight.net/hbaserest/Contacts1/false-row-key" \ -H "Accept: application/json" \ -H "Content-Type: application/json" \ -d "{\"Row\":[{\"key\":\"MTAwMA==\",\"Cell\": [{\"column\":\"UGVyc29uYWw6TmFtZQ==\", \"$\":\"Sm9obiBEb2xl\"}]}]}" \ -v
Base64 codificar os valores especificados na opção -d. No exemplo:
MTAwMA==: 1000
UGVyc29uYWw6TmFtZQ==: Pessoal: Nome
Sm9obiBEb2xl: João Dinis
false-row-key permite-lhe inserir múltiplos valores (em lote).
Utilize o seguinte comando para obter uma linha:
curl -u admin:$PASSWORD \ GET "https://$CLUSTER_NAME.azurehdinsight.net/hbaserest/Contacts1/1000" \ -H "Accept: application/json" \ -v
Nota
A varredura através do ponto de extremidade do cluster ainda não é suportada.
Para mais informações sobre o HBase Rest, veja Guia de Referência do HBase Apache.
Nota
O thrift não é suportado pelo HBase no HDInsight.
Ao usar o Curl ou qualquer outra comunicação REST com o WebHCat, você deve autenticar as solicitações fornecendo o nome de usuário e a senha para o administrador do cluster HDInsight. Também tem de utilizar o nome do cluster como parte do URI (Uniform Resource Identifier) utilizado para enviar os pedidos para o servidor:
curl -u <UserName>:<Password> \
-G https://<ClusterName>.azurehdinsight.net/templeton/v1/status
Deverá receber uma resposta semelhante à seguinte resposta:
{"status":"ok","version":"v1"}
Verificar o estado do cluster
O HBase em HDInsight é fornecido com uma interface de utilizador da Web para monitorização de clusters. Utilizando a interface de utilizador da Web, pode pedir estatísticas ou informações sobre regiões.
Para aceder à IU Principal do HBase
Entre na interface do usuário da Web do Ambari em
https://CLUSTERNAME.azurehdinsight.net
ondeCLUSTERNAME
é o nome do cluster do HBase.Selecione HBase no menu à esquerda.
Selecione Links rápidos na parte superior da página, aponte para o link do nó Zookeeper ativo e selecione Interface do usuário mestre do HBase. A IU é aberta noutro separador do browser:
A IU Principal do HBase contém as seguintes secções:
- servidores de região
- principais cópias de segurança
- tabelas
- tarefas
- atributos de software
Recreação de cluster
Depois que um cluster HBase for excluído, você poderá criar outro cluster HBase usando o mesmo contêiner de blob padrão. O novo cluster seleciona as tabelas do HBase criadas por si no cluster original. Para evitar inconsistências, no entanto, recomendamos que você desabilite as tabelas do HBase antes de excluir o cluster.
Você pode usar o comando disable 'Contacts'
HBase .
Clean up resources (Limpar recursos)
Se você não vai continuar a usar este aplicativo, exclua o cluster HBase que você criou com as seguintes etapas:
- Inicie sessão no portal do Azure.
- Na caixa Pesquisar na parte superior, digite HDInsight.
- Selecione Clusters HDInsight em Serviços.
- Na lista de clusters HDInsight exibida, clique no botão ... ao lado do cluster que você criou para este tutorial.
- Clique em Eliminar. Clique em Sim.
Próximos passos
Neste tutorial, você aprendeu como criar um cluster Apache HBase. E como criar tabelas e exibir os dados nessas tabelas a partir do shell do HBase. Você também aprendeu como usar uma consulta do Hive em dados em tabelas do HBase. E como usar a API REST do HBase C# para criar uma tabela HBase e recuperar dados da tabela. Para saber mais, veja: