Självstudie: Använda Apache HBase i Azure HDInsight

Den här självstudien visar hur du skapar ett Apache HBase-kluster i Azure HDInsight, skapar HBase-tabeller och frågetabeller med hjälp av Apache Hive. Allmän HBase-information finns i HDInsight HBase-översikt.

I den här självstudien lär du dig att:

  • Skapa Apache HBase-kluster
  • Skapa HBase-tabeller och infoga data
  • Använda Apache Hive för att fråga Apache HBase
  • Använd HBase REST API:er med Curl
  • Kontrollera klusterstatus

Förutsättningar

Skapa Apache HBase-kluster

Följande procedur använder en Azure Resource Manager-mall för att skapa ett HBase-kluster. Mallen skapar också det beroende Azure Storage-standardkontot. Mer information om de parametrar som används i proceduren och andra metoder för att skapa kluster finns i Skapa Linux-baserade Hadoop-kluster i HDInsight.

  1. Välj följande bild för att öppna mallen i Azure-portalen. Mallen finns i Azure-snabbstartsmallar.

    Deploy to Azure button for new cluster

  2. I dialogrutan Anpassad distribution anger du följande värden:

    Property Beskrivning
    Prenumeration Välj din Azure-prenumeration som används för att skapa klustret.
    Resursgrupp Skapa en Azure-resurshanteringsgrupp eller använd en befintlig.
    Plats Ange platsen för resursgruppen.
    ClusterName Ange ett namn för HBase-klustret.
    Inloggningsnamn och lösenord för klustret Standardinloggningsnamnet är admin.
    SSH-användarnamn och lösenord Standardanvändarnamnet är sshuser.

    Övriga parametrar är valfria.

    Varje kluster är beroende av ett Azure Storage-konto. När du har tagit bort ett kluster finns data kvar i lagringskontot. Klustrets lagringskonto av standardtyp har det klusternamn som omfattar tillägget ”store”. Den är hårdkodad i avsnittet mallvariabler.

  3. Välj Jag godkänner villkoren som anges ovan och välj sedan Köp. Det tar cirka 20 minuter att skapa ett kluster.

När ett HBase-kluster har tagits bort kan du skapa ett annat HBase-kluster med hjälp av samma standard-blob-container. Det nya klustret hämtar de HBase-tabeller som du skapade i det ursprungliga klustret. Om du vill undvika inkonsekvenser rekommenderar vi att du inaktiverar HBase-tabellerna innan du tar bort klustret.

Skapa tabeller och infoga data

Du kan använda SSH för att ansluta till HBase-kluster och sedan använda Apache HBase Shell för att skapa HBase-tabeller, infoga data och köra frågor mot data.

För de flesta visas data i tabellformat:

HDInsight Apache HBase tabular data.

I HBase (en implementering av Cloud BigTable) ser samma data ut så här:

HDInsight Apache HBase BigTable data.

Använd HBase Shell

  1. Använd ssh kommandot för att ansluta till ditt HBase-kluster. Redigera kommandot nedan genom att CLUSTERNAME ersätta med namnet på klustret och ange sedan kommandot:

    ssh sshuser@CLUSTERNAME-ssh.azurehdinsight.net
    
  2. Använd hbase shell kommandot för att starta det interaktiva HBase-gränssnittet. Ange följande kommando i din SSH-anslutning:

    hbase shell
    
  3. Använd create kommandot för att skapa en HBase-tabell med tvåkolumnsfamiljer. Tabell- och kolumnnamnen är skiftlägeskänsliga. Ange följande kommando:

    create 'Contacts', 'Personal', 'Office'
    
  4. Använd list kommandot för att visa en lista över alla tabeller i HBase. Ange följande kommando:

    list
    
  5. Använd put kommandot för att infoga värden i en angiven kolumn på en angiven rad i en viss tabell. Ange följande kommandon:

    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. Använd scan kommandot för att skanna och returnera Contacts tabelldata. Ange följande kommando:

    scan 'Contacts'
    

    HDInsight Apache Hadoop HBase shell.

  7. Använd get kommandot för att hämta innehållet i en rad. Ange följande kommando:

    get 'Contacts', '1000'
    

    Du ser liknande resultat som att använda scan kommandot eftersom det bara finns en rad.

    Mer information om HBase-tabellschemat finns i Introduktion till Apache HBase-schemadesign. Fler HBase-kommandon finns i referensguiden för Apache HBase.

  8. Använd exit kommandot för att stoppa det interaktiva HBase-gränssnittet. Ange följande kommando:

    exit
    

För att läsa in data i bulk i HBase-tabellen kontakter

HBase innehåller flera metoder för att läsa in data i tabeller. Mer information finns i Massinläsning.

En exempeldatafil finns i en offentlig blob-container, wasb://hbasecontacts@hditutorialdata.blob.core.windows.net/contacts.txt. Innehållet i datafilen är:

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

Du kan även skapa en textfil och överföra filen till ditt eget lagringskonto. Anvisningarna finns i Ladda upp data för Apache Hadoop-jobb i HDInsight.

Den här proceduren använder den Contacts HBase-tabell som du skapade i den senaste proceduren.

  1. Från den öppna SSH-anslutningen kör du följande kommando för att transformera datafilen till StoreFiles och lagra på en relativ sökväg som anges av 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. Kör följande kommando för att ladda upp data från /example/data/storeDataFileOutput till HBase-tabellen:

    hbase org.apache.hadoop.hbase.mapreduce.LoadIncrementalHFiles /example/data/storeDataFileOutput Contacts
    
  3. Du kan öppna HBase-gränssnittet och använda scan kommandot för att visa tabellinnehållet.

Använda Apache Hive för att fråga Apache HBase

Du kan köra frågor mot data i HBase-tabeller med hjälp av Apache Hive. I det här avsnittet skapar du en Hive-tabell som mappar till HBase-tabellen och använder den för att fråga efter data i din HBase-tabell.

  1. Använd följande kommando från den öppna ssh-anslutningen för att starta Beeline:

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

    Mer information om Beeline finns i Use Hive with Hadoop in HDInsight with Beeline (Använda Hive med Hadoop i HDInsight med Beeline).

  2. Kör följande HiveQL-skript för att skapa en Hive-tabell som mappar till HBase-tabellen. Kontrollera att du har skapat exempeltabellen som refererades tidigare i den här artikeln med hjälp av HBase-gränssnittet innan du kör den här instruktionen.

    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. Kör följande HiveQL-skript för att fråga data i HBase-tabellen:

    SELECT count(rowkey) AS rk_count FROM hbasecontacts;
    
  4. Om du vill avsluta Beeline använder du !exit.

  5. Om du vill avsluta ssh-anslutningen använder du exit.

Avgränsa Hive- och Hbase-kluster

Hive-frågan för att komma åt HBase-data behöver inte köras från HBase-klustret. Alla kluster som levereras med Hive (inklusive Spark, Hadoop, HBase eller Interaktiv fråga) kan användas för att fråga HBase-data, förutsatt att följande steg har slutförts:

  1. Båda kluster måste vara anslutna till samma virtuella nätverk och undernät
  2. Kopiera /usr/hdp/$(hdp-select --version)/hbase/conf/hbase-site.xml från HBase-klustrets huvudnoder till Hive-klustrets huvudnoder och workernodes.

Säkra kluster

HBase-data kan också frågas från Hive med hjälp av ESP-aktiverad HBase:

  1. När du följer ett mönster för flera kluster måste båda klustren vara ESP-aktiverade.
  2. Om du vill tillåta Hive att köra frågor mot HBase-data kontrollerar du att hive användaren har behörighet att komma åt HBase-data via plugin-programmet Hbase Apache Ranger
  3. När du använder separata, ESP-aktiverade kluster måste innehållet i /etc/hosts från HBase-klustrets huvudnoder läggas till /etc/hosts i Hive-klustrets huvudnoder och workernodes.

Kommentar

När du har skalat något av klusteren /etc/hosts måste du lägga till dem igen

Använda HBase REST API via Curl

HBase REST API skyddas via grundläggande autentisering. Du bör alltid göra begäranden genom att använda säker HTTP (HTTPS) för att säkerställa att dina autentiseringsuppgifter skickas på ett säkert sätt till servern.

  1. Om du vill aktivera HBase REST API i HDInsight-klustret lägger du till följande anpassade startskript i avsnittet Skriptåtgärd . Du kan lägga till startskriptet när du skapar klustret eller när klustret har skapats. För Nodtyp väljer du Regionservrar för att se till att skriptet endast körs i HBase-regionservrar.

    #! /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. Ange miljövariabel för enkel användning. Redigera kommandona nedan genom att ersätta med lösenordet för klusterinloggning MYPASSWORD . Ersätt MYCLUSTERNAME med namnet på ditt HBase-kluster. Ange sedan kommandona.

    export PASSWORD='MYPASSWORD'
    export CLUSTER_NAME=MYCLUSTERNAME
    
  3. Använd följande kommando för att lista de befintliga HBase-tabellerna:

    curl -u admin:$PASSWORD \
    -G https://$CLUSTER_NAME.azurehdinsight.net/hbaserest/
    
  4. Använd följande kommando för att skapa en ny HBase-tabell med två kolumnserier:

    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
    

    Schemat tillhandahålls i JSon-format.

  5. Använd följande kommando för att infoga vissa data:

    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 kodar de värden som anges i växeln -d. I exemplet:

    • MTAwMA ==: 1000

    • UGVyc29uYWw6TmFtZQ==: Personligt: Namn

    • Sm9obiBEb2xl: John Dole

      false-row-key gör att du kan infoga flera (gruppbaserade) värden.

  6. Använd följande kommando för att få en rad:

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

Mer information om HBase Rest finns i Referensguiden för Apache HBase.

Kommentar

Thrift stöds inte av HBase i HDInsight.

När du använder Curl eller annan REST-kommunikation med WebHCat, måste du autentisera begärandena genom att ange användarnamn och lösenord för HDInsight-klustrets administratör. Du måste också använda klustrets namn som en del av den URI (Uniform Resource Identifier) som används för att skicka begäranden till servern.

curl -u <UserName>:<Password> \

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

Du bör få ett svar som liknar följande svar:

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

Kontrollera klusterstatus

HBase i HDInsight levereras med ett webbgränssnitt för övervakning av kluster. Du kan använda webbgränssnittet för att begära statistik eller information om regioner.

Så här får du åtkomst till HBase Master UI

  1. Logga in på Ambari-webbgränssnittet där CLUSTERNAME är namnet på https://CLUSTERNAME.azurehdinsight.net ditt HBase-kluster.

  2. Välj HBase på den vänstra menyn.

  3. Välj Snabblänkar överst på sidan, peka på den aktiva Zookeeper-nodlänken och välj sedan HBase Master UI. Gränssnittet har öppnats i en annan webbläsarflik:

    HDInsight Apache HBase HMaster UI.

    HBase Master UI innehåller följande avsnitt:

    • regionservrar
    • huvudservrar för säkerhetskopiering
    • tabeller
    • uppgifter
    • attribut för programvara

Klustrets rekreation

När ett HBase-kluster har tagits bort kan du skapa ett annat HBase-kluster med hjälp av samma standard-blob-container. Det nya klustret hämtar de HBase-tabeller som du skapade i det ursprungliga klustret. För att undvika inkonsekvenser rekommenderar vi dock att du inaktiverar HBase-tabellerna innan du tar bort klustret.

Du kan använda HBase-kommandot disable 'Contacts'.

Rensa resurser

Om du inte planerar att fortsätta använda det här programmet tar du bort det HBase-kluster som du skapade med följande steg:

  1. Logga in på Azure-portalen.
  2. I rutan Sök längst upp skriver du HDInsight.
  3. Välj HDInsight-kluster under Tjänster.
  4. I listan över HDInsight-kluster som visas klickar du på ... intill det kluster som du skapade för den här självstudien.
  5. Klicka på Ta bort. Klicka på Ja.

Nästa steg

I den här självstudien har du lärt dig hur du skapar ett Apache HBase-kluster. Och hur du skapar tabeller och visar data i dessa tabeller från HBase-gränssnittet. Du har också lärt dig hur du använder en Hive-fråga för data i HBase-tabeller. Och hur du använder REST-API:et för HBase C# för att skapa en HBase-tabell och hämta data från tabellen. Mer information finns i: