Esercitazione: Usare Apache HBase in Azure HDInsight

Questa esercitazione illustra come creare un cluster Apache HBase in Azure HDInsight, come creare tabelle HBase e come eseguire query sulle tabelle con Apache Hive. Per informazioni generali su HBase, vedere Panoramica di HDInsight HBase.

In questa esercitazione apprenderai a:

  • Creare un cluster Apache HBase
  • Creare tabelle HBase e inserire dati
  • Usare Hive per eseguire query su Apache HBase
  • Usare le API REST HBase mediante Curl
  • Controllare lo stato del cluster

Prerequisiti

Creare un cluster Apache HBase

La procedura seguente usa un modello di Azure Resource Manager per creare un cluster HBase. Il modello crea anche l'account di archiviazione di Azure predefinito dipendente. Per comprendere i parametri usati nella procedure e altri metodi di creazione del cluster, vedere Creare cluster Hadoop basati su Linux in HDInsight.

  1. Selezionare l'immagine seguente per aprire il modello nel portale di Azure. Il modello è disponibile in Modelli di avvio rapido di Azure.

    Deploy to Azure button for new cluster

  2. Nella finestra di dialogo Distribuzione personalizzata immettere i valori seguenti:

    Proprietà Descrizione
    Abbonamento selezionare la sottoscrizione di Azure che viene usata per creare il cluster.
    Gruppo di risorse creare un nuovo gruppo di Azure Resource Manager o usarne uno esistente.
    Ufficio consente di specificare la posizione del gruppo di risorse.
    NomeCluster immettere un nome per il cluster HBase.
    ID di accesso e password del cluster Il nome di accesso predefinito è admin.
    Nome utente e password SSH Il nome utente predefinito è sshuser.

    Gli altri parametri sono facoltativi.

    Ogni cluster ha una dipendenza dall'account di Archiviazione di Azure. Dopo aver eliminato un cluster, i dati rimangono nell'account di archiviazione. Il nome dell'account di archiviazione predefinito del cluster è il nome del cluster a cui viene aggiunto "store". È hardcoded nella sezione delle variabili del modello.

  3. Selezionare Accetto le condizioni riportate sopra e quindi Acquista. La creazione di un cluster richiede circa 20 minuti.

Dopo l'eliminazione di un cluster HBase, è possibile creare un altro cluster HBase usando lo stesso contenitore di BLOB predefinito. Il nuovo cluster seleziona le tabelle HBase create nel cluster originale. Per evitare incoerenze, è consigliabile disabilitare le tabelle HBase prima di eliminare il cluster.

Creare tabelle e inserire dati

È possibile usare SSH per connettersi ai cluster HBase e usare la shell di Apache HBase per creare tabelle HBase, inserire dati ed eseguire query sui dati.

Per la maggior parte delle persone, i dati vengono visualizzati in formato tabulare:

HDInsight Apache HBase tabular data.

In HBase, che rappresenta un'implementazione di Cloud BigTable, gli stessi dati sono simili a:

HDInsight Apache HBase BigTable data.

Per usare la shell HBase

  1. Usare il comando ssh per connettersi al cluster HBase. Modificare il comando seguente sostituendo CLUSTERNAME con il nome del cluster in uso e quindi immettere il comando:

    ssh sshuser@CLUSTERNAME-ssh.azurehdinsight.net
    
  2. Usare il comando hbase shell per avviare la shell interattiva di HBase. Immettere il comando seguente nella connessione SSH:

    hbase shell
    
  3. Usare il comando create per creare una tabella HBase con famiglie a due colonne. I nomi di tabella e colonna fanno distinzione tra maiuscole e minuscole. Immettere il comando seguente:

    create 'Contacts', 'Personal', 'Office'
    
  4. Usare il comando list per elencare tutte le tabelle in HBase. Immettere il comando seguente:

    list
    
  5. Usare il comando put per inserire i valori per una determinata colonna in una determinata riga di una determinata tabella. Immettere i comandi seguenti:

    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. Usare il comando scan per analizzare e restituire i dati della tabella Contacts. Immettere il comando seguente:

    scan 'Contacts'
    

    HDInsight Apache Hadoop HBase shell.

  7. Usare il comando get per recuperare il contenuto di una riga. Immettere il comando seguente:

    get 'Contacts', '1000'
    

    Verranno visualizzati risultati simili a quelli che si ottengono usando il comando scan perché esiste solo una riga.

    Per altre informazioni sullo schema di tabella HBase, vedere Introduzione alla progettazione dello schema Apache HBase. Per altri comandi HBase, vedere Apache HBase Reference Guide (Guida di riferimento di Apache HBase).

  8. Usare il comando exit per interrompere la shell interattiva di HBase. Immettere il comando seguente:

    exit
    

Per il caricamento bulk dei dati nella tabella HBase dei contatti

HBase include diversi metodi di caricamento dei dati nelle tabelle. Per altre informazioni, vedere Caricamento bulk.

Un file di dati di esempio è disponibile in un contenitore BLOB pubblico, wasb://hbasecontacts@hditutorialdata.blob.core.windows.net/contacts.txt. Il contenuto del file di dati è il seguente:

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

È facoltativamente possibile creare un file di testo e caricare il file nel proprio account di archiviazione. Per le istruzioni, vedere Caricare dati per processi Apache Hadoop in HDInsight.

Questa procedura usa la tabella HBase Contacts creata nella procedura precedente.

  1. Dalla connessione SSH aperta eseguire il comando seguente per trasformare il file di dati in StoreFiles e archiviarlo in un percorso relativo specificato da 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. Eseguire il comando seguente per caricare i dati da /example/data/storeDataFileOutput nella tabella HBase:

    hbase org.apache.hadoop.hbase.mapreduce.LoadIncrementalHFiles /example/data/storeDataFileOutput Contacts
    
  3. È possibile aprire la shell HBase e usare il comando scan per visualizzare i contenuti della tabella.

Usare Hive per eseguire query su Apache HBase

È possibile eseguire query sui dati nelle tabelle HBase tramite Apache Hive. In questa sezione si crea una tabella Hive che esegue il mapping alla tabella HBase e la usa per la query dei dati nella tabella HBase.

  1. Dalla connessione SSH aperta usare il comando seguente per avviare Beeline:

    beeline -u 'jdbc:hive2://localhost:10001/;transportMode=http' -n admin
    

    Per altre informazioni su Beeline, vedere Usare Hive con Hadoop in HDInsight con Beeline.

  2. Eseguire il seguente script HiveQL per creare una tabella Hive mappata alla tabella HBase. Prima di eseguire questa istruzione, assicurarsi di aver creato la tabella di esempio usata in precedenza come riferimento in questo articolo tramite la shell HBase.

    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. Eseguire il seguente script HiveQL per eseguire query sui dati nella tabella HBase:

    SELECT count(rowkey) AS rk_count FROM hbasecontacts;
    
  4. Per uscire da Beeline, usare !exit.

  5. Per chiudere la connessione SSH, usare exit.

Separare i cluster Hive e HBase

Non è necessario eseguire la query Hive per accedere ai dati di HBase dal cluster HBase. Per eseguire query sui dati di HBase si può usare qualsiasi cluster fornito con Hive (inclusi Spark, Hadoop, HBase o Interactive Query), purché siano stati completati i passaggi seguenti:

  1. Collegare entrambi i cluster alla stessa rete virtuale e alla stessa subnet
  2. Copiare /usr/hdp/$(hdp-select --version)/hbase/conf/hbase-site.xml i nodi head del cluster HBase nei nodi head e nei nodi di lavoro del cluster Hive.

Proteggere i cluster

È possibile eseguire query sui dati di HBase da Hive anche tramite HBase abilitato per ESP:

  1. Se si segue un modello multicluster, entrambi i cluster devono essere abilitati per ESP.
  2. Per consentire a Hive di eseguire query sui dati di HBase, assicurarsi che all'utente hive siano concesse le autorizzazioni per accedere ai dati di HBase tramite il plug-in Apache Ranger HBase
  3. Quando si usano cluster separati abilitati per ESP, il contenuto dei /etc/hosts nodi head del cluster HBase deve essere aggiunto ai /etc/hosts nodi head del cluster Hive e ai nodi di lavoro.

Nota

Se si ridimensiona uno dei cluster, /etc/hosts deve essere accodato di nuovo

Usare l'API REST HBase tramite Curl

L'API REST HBase è protetta tramite l'autenticazione di base. Le richieste vengono sempre eseguite usando il protocollo HTTPS (Secure HTTP) per essere certi che le credenziali vengano inviate in modo sicuro al server.

  1. Per abilitare l'API REST HBase nel cluster HDInsight, aggiungere lo script di avvio personalizzato seguente alla sezione Azione script. È possibile aggiungere lo script di avvio durante la creazione del cluster o successivamente. Per Tipo di nodo selezionare Server di area per assicurarsi che lo script venga eseguito solo in server di area 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. Impostare la variabile di ambiente per semplicità d'uso. Modificare i comandi seguenti sostituendo MYPASSWORD con la password dell'account di accesso del cluster. Sostituire MYCLUSTERNAME con il nome del cluster HBase e quindi immettere i comandi.

    export PASSWORD='MYPASSWORD'
    export CLUSTER_NAME=MYCLUSTERNAME
    
  3. Usare il comando seguente per ottenere l'elenco delle tabelle HBase esistenti:

    curl -u admin:$PASSWORD \
    -G https://$CLUSTER_NAME.azurehdinsight.net/hbaserest/
    
  4. Usare il comando seguente per creare una nuova tabella HBase con famiglie di due colonne:

    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
    

    Lo schema viene fornito nel formato JSON.

  5. Usare il comando seguente per inserire alcuni dati:

    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
    

    È necessario applicare la codifica Base 64 ai valori specificati nell'opzione -d. Nell'esempio:

    • MTAwMA==: 1000

    • UGVyc29uYWw6TmFtZQ==: Personal: Name

    • Sm9obiBEb2xl: John Dole

      false-row-key consente di inserire più valori in batch.

  6. Usare il comando seguente per ottenere una riga:

    curl -u admin:$PASSWORD \
    GET "https://$CLUSTER_NAME.azurehdinsight.net/hbaserest/Contacts1/1000" \
    -H "Accept: application/json" \
    -v
    

Per altre informazioni sulle API REST HBase, vedere la Apache HBase Reference Guide(Guida di riferimento di Apache HBase).

Nota

Thrift non è supportato da HBase in HDInsight.

Quando si usa Curl o qualsiasi altra forma di comunicazione REST con WebHCat, è necessario autenticare le richieste fornendo il nome utente e la password dell'amministratore cluster HDInsight. È anche necessario specificare il nome del cluster come parte dell'URI (Uniform Resource Identifier) usato per inviare le richieste al server:

curl -u <UserName>:<Password> \

-G https://<ClusterName>.azurehdinsight.net/templeton/v1/status

Verrà visualizzato un messaggio simile alla risposta seguente:

{"status":"ok","version":"v1"}

Controllare lo stato del cluster

HBase in HDInsight viene fornito con un'interfaccia utente Web per il monitoraggio dei cluster. Usando l’interfaccia Web è possibile richiedere statistiche o informazioni sulle aree.

Per accedere all'interfaccia utente master HBase

  1. Accedere all'interfaccia utente Web Ambari all'indirizzo https://CLUSTERNAME.azurehdinsight.net, dove CLUSTERNAME è il nome del cluster HBase.

  2. Selezionare HBase dal menu a sinistra.

  3. Selezionare Collegamenti rapidi nella parte superiore della pagina, scegliere il collegamento del nodo Zookeeper attivo e quindi selezionare HBase Master UI (Interfaccia utente HBase Master). L'interfaccia utente viene aperta in un'altra scheda del browser:

    HDInsight Apache HBase HMaster UI.

    L'interfaccia utente master HBase contiene le sezioni seguenti:

    • server di zona
    • master di backup
    • tabelle
    • attività
    • attributi di software

Ricreazione del cluster

Dopo l'eliminazione di un cluster HBase, è possibile creare un altro cluster HBase usando lo stesso contenitore di BLOB predefinito. Il nuovo cluster seleziona le tabelle HBase create nel cluster originale. Per evitare incoerenze, è tuttavia consigliabile disabilitare le tabelle HBase prima di eliminare il cluster.

È possibile usare il comando HBase disable 'Contacts'.

Pulire le risorse

Se non si intende continuare a usare questa applicazione, eliminare il cluster HBase creato con i passaggi seguenti:

  1. Accedere al portale di Azure.
  2. Nella casella Ricerca in alto digitare HDInsight.
  3. Selezionare Cluster HDInsight in Servizi.
  4. Nell'elenco di cluster HDInsight visualizzato, fare clic su ... accanto al cluster creato per questa esercitazione.
  5. Fare clic su Elimina. Fare clic su .

Passaggi successivi

In questa esercitazione si è appreso come creare un cluster Apache HBase. Si è anche visto come creare tabelle e visualizzare i dati in tali tabelle dalla shell HBase, come usare una query Hive sui dati nelle tabelle HBase E come usare l'API REST C# di HBase per creare una tabella HBase e recuperare i dati dalla tabella. Per altre informazioni, vedere: