Samouczek: korzystanie z bazy danych Apache HBase w usłudze Azure HDInsight

W tym samouczku pokazano, jak utworzyć klaster Apache HBase w usłudze Azure HDInsight, utworzyć tabele HBase i wykonywać zapytania o tabele przy użyciu technologii Apache Hive. Aby uzyskać ogólne informacje o bazie danych HBase, zobacz Omówienie bazy danych HBase w usłudze HDInsight.

Z tego samouczka dowiesz się, jak wykonywać następujące czynności:

  • Tworzenie klastra Apache HBase
  • Tworzenie tabel HBase i wstawianie danych
  • Wykonywanie zapytań dotyczących bazy danych Apache HBase przy użyciu programu Apache Hive
  • Korzystanie z interfejsów API REST HBase przy użyciu programu Curl
  • Sprawdzanie stanu klastra

Wymagania wstępne

Tworzenie klastra Apache HBase

Poniższa procedura używa szablonu usługi Azure Resource Manager do utworzenia klastra HBase. Szablon tworzy również domyślne domyślne konto usługi Azure Storage. Aby zapoznać się z parametrami używanymi w tej procedurze oraz innymi metodami tworzenia klastra, zobacz temat Tworzenie opartych na systemie Linux klastrów Hadoop w usłudze HDInsight.

  1. Wybierz poniższy obraz, aby otworzyć szablon w witrynie Azure Portal. Szablon znajduje się w szablonach szybkiego startu platformy Azure.

    Deploy to Azure button for new cluster

  2. W oknie dialogowym Wdrażanie niestandardowe wprowadź następujące wartości:

    Właściwości Opis
    Subskrypcja Wybierz subskrypcję platformy Azure używaną do utworzenia klastra.
    Grupa zasobów Utwórz grupę zarządzania zasobami platformy Azure lub użyj istniejącej.
    Lokalizacja Określ lokalizację grupy zasobów.
    NazwaKlastra Wprowadź nazwę klastra HBase.
    Nazwa użytkownika i hasło logowania do klastra Domyślna nazwa logowania to admin.
    Nazwa użytkownika i hasło protokołu SSH Domyślna nazwa użytkownika to sshuser.

    Inne parametry są opcjonalne.

    Każdy klaster zależy od konta usługi Azure Storage. Po usunięciu klastra dane pozostają na koncie magazynu. Domyślna nazwa konta magazynu klastra to nazwa klastra z dołączonym ciągiem „store”. Jest on zakodowany na stałe w sekcji zmiennych szablonu.

  3. Zaznacz pozycję Wyrażam zgodę na powyższe warunki i postanowienia, a następnie kliknij przycisk Kup. Utworzenie klastra trwa około 20 minut.

Po usunięciu klastra HBase można utworzyć inny klaster HBase za pomocą tego samego domyślnego kontenera obiektów blob. Nowy klaster przejmuje tabele bazy danych HBase utworzone w oryginalnym klastrze. Aby uniknąć niespójności, zaleca się wyłączenie tabel HBase przed usunięciem klastra.

Tworzenie tabel i wstawianie danych

Protokół SSH umożliwia połączenie z klastrami HBase, a następnie korzystanie z powłoki Apache HBase w celu tworzenia tabel bazy danych HBase, wstawiania danych i wykonywania zapytań o dane.

Dla większości użytkowników dane są wyświetlane w formacie tabelarycznym:

HDInsight Apache HBase tabular data.

W bazie danych HBase (implementacja rozwiązania Cloud BigTable) te same dane wyglądają następująco:

HDInsight Apache HBase BigTable data.

Aby użyć powłoki HBase

  1. Użyj ssh polecenia , aby nawiązać połączenie z klastrem HBase. Zmodyfikuj poniższe polecenie, zastępując CLUSTERNAME ciąg nazwą klastra, a następnie wprowadź polecenie:

    ssh sshuser@CLUSTERNAME-ssh.azurehdinsight.net
    
  2. Użyj hbase shell polecenia , aby uruchomić interaktywną powłokę HBase. Wprowadź następujące polecenie w połączeniu SSH:

    hbase shell
    
  3. Użyj create polecenia , aby utworzyć tabelę HBase z dwiema rodzinami kolumn. W nazwach tabel i kolumn uwzględniana jest wielkość liter. Podaj następujące polecenie:

    create 'Contacts', 'Personal', 'Office'
    
  4. Użyj list polecenia , aby wyświetlić listę wszystkich tabel w bazie danych HBase. Podaj następujące polecenie:

    list
    
  5. Użyj put polecenia , aby wstawić wartości w określonej kolumnie w określonym wierszu w określonej tabeli. Wprowadź następujące polecenia:

    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. Użyj scan polecenia , aby skanować i zwracać Contacts dane tabeli. Podaj następujące polecenie:

    scan 'Contacts'
    

    HDInsight Apache Hadoop HBase shell.

  7. Użyj get polecenia , aby pobrać zawartość wiersza. Podaj następujące polecenie:

    get 'Contacts', '1000'
    

    Podobne wyniki są wyświetlane jako użycie scan polecenia, ponieważ istnieje tylko jeden wiersz.

    Aby uzyskać więcej informacji na temat schematu tabeli HBase, zobacz Wprowadzenie do projektu schematu bazy danych Apache HBase. Więcej poleceń bazy danych HBase można znaleźć w Podręczniku bazy danych Apache HBase.

  8. Użyj exit polecenia , aby zatrzymać interaktywną powłokę HBase. Podaj następujące polecenie:

    exit
    

Aby zbiorczo załadować dane do tabeli kontaktów HBase

Baza danych HBase obsługuje kilka metod ładowania danych do tabel. Aby uzyskać więcej informacji, zobacz temat Ładowanie zbiorcze.

Przykładowy plik danych znajduje się w publicznym kontenerze obiektów blob, wasb://hbasecontacts@hditutorialdata.blob.core.windows.net/contacts.txt. Plik danych ma następującą zawartość:

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

Opcjonalnie możesz utworzyć plik tekstowy i przesłać go na swoje konto magazynu. Aby uzyskać instrukcje, zobacz Przekazywanie danych dla zadań platformy Apache Hadoop w usłudze HDInsight.

Ta procedura używa Contacts tabeli HBase utworzonej w ostatniej procedurze.

  1. Z poziomu otwartego połączenia SSH uruchom następujące polecenie, aby przekształcić plik danych w plik StoreFiles i zapisać w ścieżce względnej określonej przez 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. Uruchom następujące polecenie, aby przekazać dane z /example/data/storeDataFileOutput do tabeli HBase:

    hbase org.apache.hadoop.hbase.mapreduce.LoadIncrementalHFiles /example/data/storeDataFileOutput Contacts
    
  3. Możesz otworzyć powłokę HBase i użyć scan polecenia , aby wyświetlić listę spisu treści.

Wykonywanie zapytań dotyczących bazy danych Apache HBase przy użyciu programu Apache Hive

Dane w tabelach HBase można wykonywać za pomocą programu Apache Hive. W tej sekcji zostanie utworzona tabela programu Hive odwzorowująca dane w tabeli HBase, która będzie używana do wykonywania zapytań o dane w tabeli HBase.

  1. Z poziomu otwartego połączenia SSH użyj następującego polecenia, aby uruchomić usługę Beeline:

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

    Aby uzyskać więcej informacji o usłudze Beeline, zobacz Używanie technologii Hive z usługą Hadoop w usłudze HDInsight z usługą Beeline.

  2. Uruchom następujący skrypt HiveQL , aby utworzyć tabelę programu Hive, która jest mapowana na tabelę HBase. Przed uruchomieniem tej instrukcji upewnij się, że utworzono przykładową tabelę, do której odwołujesz się wcześniej w tym artykule, korzystając z powłoki 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. Uruchom poniższy skrypt HiveQL, aby wykonać zapytanie o dane w tabeli HBase:

    SELECT count(rowkey) AS rk_count FROM hbasecontacts;
    
  4. Aby zamknąć usługę Beeline, użyj polecenia !exit.

  5. Aby zamknąć połączenie SSH, użyj polecenia exit.

Oddzielne klastry Hive i Hbase

Zapytanie Hive w celu uzyskania dostępu do danych bazy danych HBase nie musi być wykonywane z klastra HBase. Każdy klaster dostarczany z usługą Hive (w tym Spark, Hadoop, HBase lub Interactive Query) może służyć do wykonywania zapytań dotyczących danych bazy danych HBase, pod warunkiem że zostały wykonane następujące kroki:

  1. Oba klastry muszą być dołączone do tej samej sieci wirtualnej i podsieci
  2. Skopiuj /usr/hdp/$(hdp-select --version)/hbase/conf/hbase-site.xml węzły główne klastra HBase do węzłów głównych klastra Hive i węzłów roboczych.

Zabezpieczanie klastrów

Dane bazy danych HBase można również wykonywać w usłudze Hive przy użyciu bazy danych HBase z włączoną obsługą protokołu ESP:

  1. W przypadku przestrzegania wzorca z wieloma klastrami oba klastry muszą być włączone w trybie ESP.
  2. Aby umożliwić usłudze Hive wykonywanie zapytań dotyczących danych bazy danych HBase, upewnij się, że hive użytkownik ma przyznane uprawnienia dostępu do danych bazy danych HBase za pośrednictwem wtyczki Hbase Apache Ranger
  3. W przypadku korzystania z oddzielnych klastrów z obsługą protokołu ESP zawartość /etc/hosts węzłów głównych klastra HBase musi być dołączana do /etc/hosts węzłów głównych klastra Hive i węzłów roboczych.

Uwaga

Po przeskalowaniu obu klastrów /etc/hosts należy ponownie dołączyć

Korzystanie z interfejsu API REST HBase za pośrednictwem narzędzia Curl

Interfejs API REST bazy danych HBase jest zabezpieczony za pośrednictwem uwierzytelniania podstawowego. Należy zawsze tworzyć żądania przy użyciu protokołu HTTPS (HTTP Secure), aby mieć pewność, że poświadczenia są bezpiecznie wysyłane do serwera.

  1. Aby włączyć interfejs API REST bazy danych HBase w klastrze usługi HDInsight, dodaj następujący niestandardowy skrypt uruchamiania do sekcji Akcja skryptu. Skrypt uruchamiania można dodać podczas tworzenia klastra lub po utworzeniu klastra. W obszarze Typ węzła wybierz pozycję Serwery regionów , aby upewnić się, że skrypt jest wykonywany tylko na serwerach regionów 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. Ustaw zmienną środowiskową w celu ułatwienia użycia. Edytuj poniższe polecenia, zastępując ciąg MYPASSWORD hasłem logowania klastra. Zastąp MYCLUSTERNAME ciąg nazwą klastra HBase. Następnie wprowadź polecenia.

    export PASSWORD='MYPASSWORD'
    export CLUSTER_NAME=MYCLUSTERNAME
    
  3. Użyj następującego polecenia, aby wyświetlić listę istniejących tabel HBase:

    curl -u admin:$PASSWORD \
    -G https://$CLUSTER_NAME.azurehdinsight.net/hbaserest/
    
  4. Użyj następującego polecenia, aby utworzyć nową tabelę HBase z dwiema rodzinami kolumn:

    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 jest podany w formacie JSon.

  5. Użyj następującego polecenia, aby wstawić dane:

    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 koduje wartości określone w przełączniku -d. W przykładzie:

    • MTAwMA==: 1000

    • UGVyc29uYWw6TmFtZQ==: Personal: Name

    • Sm9obiBEb2xl: John Dole

      false-row-key umożliwia wstawianie wielu wartości (w partiach).

  6. Użyj następującego polecenia, aby pobrać wiersz:

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

Aby uzyskać więcej informacji o interfejsie Rest HBase, zobacz Apache HBase Reference Guide (Podręcznik referencyjny Apache HBase).

Uwaga

Platforma Thrift nie jest obsługiwana przez bazę danych HBase w usłudze HDInsight.

Używając programu Curl lub innego połączenia REST z usługą WebHCat, należy uwierzytelnić żądania, podając nazwę użytkownika i hasło administratora klastra usługi HDInsight. Należy również użyć nazwy klastra jako części identyfikatora URI stosowanego przy wysyłaniu żądań do serwera:

curl -u <UserName>:<Password> \

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

Powinna zostać zwrócona odpowiedź podobna do następującej:

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

Sprawdzanie stanu klastra

Baza danych HBase w usłudze HDInsight jest dostarczana z interfejsem użytkownika sieci Web służącym do monitorowania klastrów. Za pośrednictwem interfejsu użytkownika sieci Web możesz przesyłać żądania dotyczące statystyk lub informacji o regionach.

Aby uzyskać dostęp do głównego interfejsu użytkownika HBase

  1. Zaloguj się do internetowego interfejsu użytkownika systemu Ambari w miejscu, w https://CLUSTERNAME.azurehdinsight.net którym CLUSTERNAME jest nazwą klastra HBase.

  2. Wybierz pozycję HBase z menu po lewej stronie.

  3. Wybierz pozycję Szybkie linki w górnej części strony, wskaż aktywny link węzła Zookeeper, a następnie wybierz pozycję Interfejs użytkownika głównego bazy danych HBase. Interfejs użytkownika zostanie otwarty w innej karcie przeglądarki:

    HDInsight Apache HBase HMaster UI.

    Główny interfejs użytkownika HBase zawiera następujące sekcje:

    • serwery regionów
    • wzorce kopii zapasowej
    • Tabele
    • zadania
    • atrybuty oprogramowania

Rekreacja klastra

Po usunięciu klastra HBase można utworzyć inny klaster HBase za pomocą tego samego domyślnego kontenera obiektów blob. Nowy klaster przejmuje tabele bazy danych HBase utworzone w oryginalnym klastrze. Aby uniknąć niespójności, zalecamy jednak wyłączenie tabel HBase przed usunięciem klastra.

Możesz użyć polecenia disable 'Contacts'HBase .

Czyszczenie zasobów

Jeśli nie zamierzasz nadal korzystać z tej aplikacji, usuń utworzony klaster bazy danych HBase, wykonując następujące czynności:

  1. Zaloguj się w witrynie Azure Portal.
  2. W polu Wyszukaj w górnej części wpisz HDInsight.
  3. Wybierz pozycję Klastry usługi HDInsight w obszarze Usługi.
  4. Na wyświetlonej liście klastrów usługi HDInsight kliknij symbol ... obok klastra utworzonego na potrzeby tego samouczka.
  5. Kliknij przycisk Usuń. Kliknij przycisk Tak.

Następne kroki

W tym samouczku przedstawiono sposób tworzenia klastra Apache HBase. Sposób tworzenia tabel i wyświetlania danych w tych tabelach z poziomu powłoki HBase. Pokazano również, jak używać zapytania programu Hive na danych w tabelach HBase. I jak używać interfejsu API REST HBase C# do tworzenia tabeli HBase i pobierania danych z tabeli. Aby dowiedzieć się więcej, zobacz: