Apache Phoenix w usłudze Azure HDInsight

Apache Phoenix to warstwa relacyjnej relacyjnej bazy danych typu open source oparta na bazie danych Apache HBase. Rozwiązanie Phoenix umożliwia korzystanie z zapytań przypominających język SQL w bazie HBase. Firma Phoenix używa sterowników JDBC poniżej, aby umożliwić użytkownikom tworzenie, usuwanie, zmienianie tabel SQL, indeksów, widoków i sekwencji oraz pojedynczych i zbiorczych wierszy upsert. Firma Phoenix używa natywnej kompilacji noSQL zamiast kompilowania zapytań przy użyciu usługi MapReduce, umożliwiając tworzenie aplikacji o małych opóźnieniach na bazie HBase. Firma Phoenix dodaje współprocesory do obsługi uruchamiania kodu dostarczonego przez klienta w przestrzeni adresowej serwera, wykonując kod kolokowany z danymi. Takie podejście minimalizuje transfer danych klienta/serwera.

Apache Phoenix otwiera zapytania dotyczące danych big data dla deweloperów, którzy mogą używać składni podobnej do języka SQL, a nie programowania. Phoenix jest wysoce zoptymalizowany pod kątem bazy danych HBase, w przeciwieństwie do innych narzędzi, takich jak Apache Hive i Apache Spark SQL. Korzyścią dla deweloperów jest pisanie wysoce wydajnych zapytań z znacznie mniejszym kodem.

Po przesłaniu zapytania SQL phoenix kompiluje zapytanie do natywnych wywołań HBase i uruchamia skanowanie (lub plan) równolegle w celu optymalizacji. Ta warstwa abstrakcji zwalnia dewelopera od pisania zadań MapReduce, aby skupić się zamiast tego na logice biznesowej i przepływie pracy aplikacji wokół magazynu danych big data w Phoenix.

Optymalizacja wydajności zapytań i inne funkcje

Apache Phoenix dodaje kilka ulepszeń wydajności i funkcji do zapytań HBase.

Indeksy pomocnicze

Baza HBase ma pojedynczy indeks, który jest posortowany leksykograficznie na kluczu wiersza podstawowego. Dostęp do tych rekordów można uzyskać tylko za pośrednictwem klucza wiersza. Uzyskiwanie dostępu do rekordów za pośrednictwem dowolnej kolumny innej niż klucz wiersza wymaga skanowania wszystkich danych podczas stosowania wymaganego filtru. W indeksie pomocniczym kolumny lub wyrażenia, które są indeksowane, tworzą alternatywny klucz wiersza, umożliwiając wyszukiwanie i skanowanie zakresów w tym indeksie.

Utwórz indeks pomocniczy za CREATE INDEX pomocą polecenia :

CREATE INDEX ix_purchasetype on SALTEDWEBLOGS (purchasetype, transactiondate) INCLUDE (bookname, quantity);

Takie podejście może spowodować znaczny wzrost wydajności w przypadku wykonywania zapytań z pojedynczym indeksem. Ten typ indeksu pomocniczego jest indeksem obejmującym wszystkie kolumny zawarte w zapytaniu. W związku z tym wyszukiwanie tabeli nie jest wymagane, a indeks spełnia całe zapytanie.

Widoki

Widoki Phoenix umożliwiają przezwyciężenie ograniczenia bazy danych HBase, gdzie wydajność zaczyna spadać, gdy tworzysz więcej niż około 100 tabel fizycznych. Widoki Phoenix umożliwiają udostępnianie jednej podstawowej fizycznej tabeli HBase w wielu tabelach wirtualnych.

Tworzenie widoku Phoenix jest podobne do użycia standardowej składni widoku SQL. Jedną z różnic jest to, że można zdefiniować kolumny dla widoku, oprócz kolumn dziedziczonej z jej tabeli bazowej. Możesz również dodać nowe KeyValue kolumny.

Na przykład poniżej znajduje się tabela fizyczna o nazwie product_metrics z następującą definicją:

CREATE  TABLE product_metrics (
    metric_type CHAR(1)  NOT NULL,
    created_by VARCHAR,
    created_date DATE  NOT NULL,
    metric_id INTEGER  NOT NULL
    CONSTRAINT pk PRIMARY KEY (metric_type, created_by, created_date, metric_id));

Zdefiniuj widok dla tej tabeli z dodatkowymi kolumnami:

CREATE VIEW mobile_product_metrics (carrier VARCHAR, dropped_calls BIGINT) AS
SELECT * FROM product_metrics
WHERE metric_type = 'm';

Aby dodać więcej kolumn później, użyj instrukcji ALTER VIEW .

Pomiń skanowanie

Pomiń skanowanie używa co najmniej jednej kolumny indeksu złożonego do znajdowania unikatowych wartości. W przeciwieństwie do skanowania w zakresie pomijanie skanowania implementuje skanowanie wewnątrz wiersza, co zapewnia lepszą wydajność. Podczas skanowania pierwsza dopasowana wartość jest pomijana wraz z indeksem do momentu znalezienia następnej wartości.

Skanowanie pomijania używa SEEK_NEXT_USING_HINT wyliczenia filtru HBase. Przy użyciu metody SEEK_NEXT_USING_HINTskanowanie pomijania śledzi, który zestaw kluczy lub zakresy kluczy są wyszukiwane w każdej kolumnie. Skanowanie pominięcia pobiera następnie klucz przekazany do niego podczas oceny filtru i określa, czy jest to jedna z kombinacji. Jeśli tak nie jest, skanowanie pominięcia ocenia następny najwyższy klucz, aby przejść do.

Transakcje

Chociaż baza HBase zapewnia transakcje na poziomie wiersza, phoenix integruje się z Tephra , aby dodać obsługę transakcji między wierszami i tabelami z pełnymi semantykami ACID .

Podobnie jak w przypadku tradycyjnych transakcji SQL, transakcje udostępniane za pośrednictwem menedżera transakcji Phoenix umożliwiają upewnienie się, że niepodzielna jednostka danych została pomyślnie włączona, cofanie transakcji, jeśli operacja upsert zakończy się niepowodzeniem w dowolnej tabeli z obsługą transakcji.

Aby włączyć transakcje Phoenix, zobacz dokumentację transakcji apache Phoenix.

Aby utworzyć nową tabelę z włączonymi transakcjami, ustaw TRANSACTIONAL właściwość na true w instrukcji CREATE :

CREATE TABLE my_table (k BIGINT PRIMARY KEY, v VARCHAR) TRANSACTIONAL=true;

Aby zmienić istniejącą tabelę na transakcyjną, użyj tej samej właściwości w instrukcji ALTER :

ALTER TABLE my_other_table SET TRANSACTIONAL=true;

Uwaga

Nie można przełączyć tabeli transakcyjnej z powrotem na nie transakcyjną.

Tabele z solą

Hotspotting serwera regionów może wystąpić podczas zapisywania rekordów z kluczami sekwencyjnymi w bazie HBase. Chociaż w klastrze może znajdować się wiele serwerów regionów, wszystkie operacje zapisu występują tylko na jednym. Ta koncentracja tworzy problem z hotspottingiem polegający na tym, że zamiast obciążenia zapisu jest dystrybuowane na wszystkich dostępnych serwerach regionów, tylko jeden z nich obsługuje obciążenie. Ponieważ każdy region ma wstępnie zdefiniowany maksymalny rozmiar, gdy region osiągnie ten limit rozmiaru, jest podzielony na dwa małe regiony. W takim przypadku jeden z tych nowych regionów przyjmuje wszystkie nowe rekordy, stając się nowym hotspotem.

Aby rozwiązać ten problem i osiągnąć lepszą wydajność, wstępnie podzielone tabele, tak aby wszystkie serwery regionów były równie używane. Phoenix udostępnia słone tabele, w sposób przezroczysty dodając bajt do klucza wiersza dla określonej tabeli. Tabela jest wstępnie podzielona na granice bajtów soli w celu zapewnienia równego rozkładu obciążenia między serwerami regionów w początkowej fazie tabeli. Takie podejście dystrybuuje obciążenie zapisu na wszystkich dostępnych serwerach regionów, zwiększając wydajność zapisu i odczytu. Aby połączyć tabelę, określ SALT_BUCKETS właściwość tabeli podczas tworzenia tabeli:

CREATE TABLE Saltedweblogs (
    transactionid varchar(500) Primary Key,
    transactiondate Date NULL,
    customerid varchar(50) NULL,
    bookid varchar(50) NULL,
    purchasetype varchar(50) NULL,
    orderid varchar(50) NULL,
    bookname varchar(50) NULL,
    categoryname varchar(50) NULL,
    invoicenumber varchar(50) NULL,
    invoicestatus varchar(50) NULL,
    city varchar(50) NULL,
    state varchar(50) NULL,
    paymentamount DOUBLE NULL,
    quantity INTEGER NULL,
    shippingamount DOUBLE NULL) SALT_BUCKETS=4;

Włączanie i dostrajanie rozwiązania Phoenix przy użyciu systemu Apache Ambari

Klaster HBase usługi HDInsight zawiera interfejs użytkownika systemu Ambari do wprowadzania zmian konfiguracji.

  1. Aby włączyć lub wyłączyć aplikację Phoenix i kontrolować ustawienia limitu czasu zapytania w usłudze Phoenix, zaloguj się do internetowego interfejsu użytkownika systemu Ambari (https://YOUR_CLUSTER_NAME.azurehdinsight.net) przy użyciu poświadczeń użytkownika usługi Hadoop.

  2. Wybierz pozycję HBase z listy usług w menu po lewej stronie, a następnie wybierz kartę Konfiguracje .

    Apache Ambari HBase configurations.

  3. Znajdź sekcję konfiguracji Phoenix SQL , aby włączyć lub wyłączyć phoenix i ustawić limit czasu zapytania.

    Ambari Phoenix SQL configuration section.

Zobacz też