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

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.

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

    Deploy to Azure button for new cluster

  2. 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.
    Localização 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.

  3. 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 de eliminar um cluster HBase, pode criar outro cluster HBase utilizando o mesmo contentor de blob predefinido. 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:

HDInsight Apache HBase tabular data.

No HBase (uma implementação do Cloud BigTable), os mesmos dados se parecem com:

HDInsight Apache HBase BigTable data.

Para utilizar a shell de HBase

  1. Use ssh o comando para se conectar ao cluster HBase. Edite o comando abaixo substituindo CLUSTERNAME pelo nome do cluster e digite o comando:

    ssh sshuser@CLUSTERNAME-ssh.azurehdinsight.net
    
  2. Use hbase shell o comando para iniciar o shell interativo do HBase. Digite o seguinte comando em sua conexão SSH:

    hbase shell
    
  3. 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'
    
  4. Use list o comando para listar todas as tabelas no HBase. Introduza o seguinte comando:

    list
    
  5. 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.'
    
  6. Use scan o comando para verificar e retornar os dados da Contacts tabela. Introduza o seguinte comando:

    scan 'Contacts'
    

    HDInsight Apache Hadoop HBase shell.

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

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

  1. 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
    
  2. 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
    
  3. 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.

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

  2. 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');
    
  3. Execute o seguinte script de HiveQL para consultar os dados na tabela HBase:

    SELECT count(rowkey) AS rk_count FROM hbasecontacts;
    
  4. Para sair do Beeline, use !exit.

  5. Para sair da conexão ssh, use exito .

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:

  1. Ambos os clusters devem ser anexados à mesma Rede Virtual e Sub-rede
  2. Copie /usr/hdp/$(hdp-select --version)/hbase/conf/hbase-site.xml dos nós principais do cluster HBase para os nós principais e nós de trabalho do cluster Hive.

Clusters seguros

Os dados do HBase também podem ser consultados a partir do Hive usando o HBase habilitado para ESP:

  1. Ao seguir um padrão de vários clusters, ambos os clusters devem ser habilitados para ESP.
  2. 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
  3. Ao usar 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 e aos nós de trabalho do cluster Hive.

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.

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

    #! /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
    
  2. Defina a variável de ambiente para facilitar o uso. Edite os comandos abaixo substituindo MYPASSWORD pela senha de login do cluster. Substitua MYCLUSTERNAME pelo nome do cluster HBase. Em seguida, insira os comandos.

    export PASSWORD='MYPASSWORD'
    export CLUSTER_NAME=MYCLUSTERNAME
    
  3. Utilize o seguinte comando para listar as tabelas HBase existentes:

    curl -u admin:$PASSWORD \
    -G https://$CLUSTER_NAME.azurehdinsight.net/hbaserest/
    
  4. 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.

  5. 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).

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

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.

Quando utilizar Curl ou quaisquer outras comunicações REST com WebHCat, tem de autenticar os pedidos, indicando o nome de utilizador e palavra-passe para o administrador de cluster do 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

  1. Entre na interface do usuário da Web do Ambari em https://CLUSTERNAME.azurehdinsight.net onde CLUSTERNAME é o nome do cluster do HBase.

  2. Selecione HBase no menu à esquerda.

  3. 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:

    HDInsight Apache HBase HMaster UI.

    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 de eliminar um cluster HBase, pode criar outro cluster HBase utilizando o mesmo contentor de blob predefinido. 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:

  1. Inicie sessão no portal do Azure.
  2. Na caixa Pesquisar na parte superior, digite HDInsight.
  3. Selecione Clusters HDInsight em Serviços.
  4. Na lista de clusters HDInsight exibida, clique no botão ... ao lado do cluster que você criou para este tutorial.
  5. 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 do HBase e recuperar dados da tabela. Para saber mais, veja: