Apache Phoenix ve službě HDInsightApache Phoenix in HDInsight

Apache Phoenix je vrstva masivně paralelní relační databáze založená na open source Apache HBase.Apache Phoenix is an open source, massively parallel relational database layer built on Apache HBase. Phoenix umožňuje používat dotazy na podobném SQL nad HBase.Phoenix allows you to use SQL-like queries over HBase. Phoenix používá ovladače JDBC pod umožňující uživatelům vytvořit, odstranit, změnit tabulek, indexů, zobrazení a pořadí a upsert řádky SQL jednotlivě a hromadně.Phoenix uses JDBC drivers underneath to enable users to create, delete, alter SQL tables, indexes, views and sequences, and upsert rows individually and in bulk. Phoenix používá nativní kompilace noSQL místo použití prostředí MapReduce ke kompilaci dotazů, umožňují vytvářet aplikace s nízkou latencí nad HBase.Phoenix uses noSQL native compilation rather than using MapReduce to compile queries, enabling the creation of low-latency applications on top of HBase. Phoenix přidá coprocessors k podpoře spouštění v adresním prostoru serveru klientem poskytnutý kód spouští kód umístěny společně s daty.Phoenix adds coprocessors to support running client-supplied code in the address space of the server, executing the code colocated with the data. Tento přístup minimalizuje přenosu dat klienta nebo serveru.This approach minimizes client/server data transfer.

Apache Phoenix otevře velkých objemů dat pro nevývojáře, kteří můžou využívat syntaxe podobném SQL místo programování.Apache Phoenix opens up big data queries to non-developers who can use a SQL-like syntax rather than programming. Phoenix je vysoce optimalizovaných pro HBase, na rozdíl od jiných nástrojů, jako Apache Hive a Apache Spark SQL.Phoenix is highly optimized for HBase, unlike other tools such as Apache Hive and Apache Spark SQL. Výhoda pro vývojáře je zápis vysoce výkonných dotazů s mnohem menším množstvím kódu.The benefit to developers is writing highly performant queries with much less code.

Když odešlete dotaz SQL, Phoenix zkompiluje dotaz pro nativní volání HBase a spustí skener (nebo plán) paralelní optimalizace.When you submit a SQL query, Phoenix compiles the query to HBase native calls and runs the scan (or plan) in parallel for optimization. Tato vrstva abstrakce uvolní vývojářům od vytváření úloh MapReduce, místo toho se soustředit na obchodní logiku a pracovní postup jejich aplikaci kolem Phoenix pro velké objemy dat úložiště.This layer of abstraction frees the developer from writing MapReduce jobs, to focus instead on the business logic and the workflow of their application around Phoenix's big data storage.

Optimalizace výkonu dotazů a další funkceQuery performance optimization and other features

Apache Phoenix přidá několik vylepšení výkonu a funkcí do dotazů HBase.Apache Phoenix adds several performance enhancements and features to HBase queries.

Sekundární indexySecondary indexes

HBase obsahuje jeden index, který je lexikograficky seřazená podle klíče řádku primární.HBase has a single index that is lexicographically sorted on the primary row key. Tyto záznamy jsou přístupné pouze prostřednictvím klíč řádku.These records can only be accessed through the row key. Přístup k záznamy přes všechny sloupce kromě klíč řádku vyžaduje prohledávání všech dat při použití požadovaný filtr.Accessing records through any column other than the row key requires scanning all of the data while applying the required filter. V sekundárním indexu sloupce nebo výrazy, které jsou indexované formou klíčem řádku alternativní umožňuje vyhledávání a rozsah kontroly indexu.In a secondary index, the columns or expressions that are indexed form an alternate row key, allowing lookups and range scans on that index.

Vytvořit sekundární index s CREATE INDEX příkaz:Create a secondary index with the CREATE INDEX command:

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

Tento přístup může přinést zvýšení výkonu nad spouštěním dotazů jedním indexovat.This approach can yield a significant performance increase over executing single-indexed queries. Tento typ sekundární index je pokrývající index, který obsahuje všechny sloupce v dotazu.This type of secondary index is a covering index, containing all of the columns included in the query. Proto není potřeba prohledávání tabulky a index splňuje celý dotaz.Therefore, the table lookup is not required and the index satisfies the entire query.

ZobrazeníViews

Phoenix zobrazení poskytují způsob, jak překonat omezení HBase, kde výkon začne snižovat, když vytvoříte více než 100 fyzické tabulky.Phoenix views provide a way to overcome an HBase limitation, where performance begins to degrade when you create more than about 100 physical tables. Povolit více zobrazení Phoenix virtuální tabulky sdílení jedné podkladové tabulky HBase fyzické.Phoenix views enable multiple virtual tables to share one underlying physical HBase table.

Vytvoření zobrazení Phoenix je podobný pomocí standardní syntaxe zobrazení SQL.Creating a Phoenix view is similar to using standard SQL view syntax. Jedním rozdílem je, že můžete definovat sloupce pro zobrazení, kromě sloupců, zděděno z jeho základní tabulky.One difference is that you can define columns for your view, in addition to the columns inherited from its base table. Můžete také přidat nové KeyValue sloupce.You can also add new KeyValue columns.

Například tady je fyzický tabulku s názvem product_metrics s následující definice:For example, here is a physical table named product_metrics with the following definition:

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

Definujte zobrazení v této tabulce při další sloupce:Define a view over this table, with additional columns:

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

Chcete-li později přidat další sloupce, použijte ALTER VIEW příkazu.To add more columns later, use the ALTER VIEW statement.

Přeskočit kontroluSkip scan

Přeskočit kontrolu používá k nalezení jedinečných hodnot jednoho nebo více sloupců složeném indexu.Skip scan uses one or more columns of a composite index to find distinct values. Na rozdíl od kontrolu rozsahu přeskočit kontroly implementuje uvnitř řádku skenování, což má za následek vyšší výkon.Unlike a range scan, skip scan implements intra-row scanning, yielding improved performance. Při hledání, se přeskočí první odpovídající hodnotu spolu s index dokud není nalezena hodnota dalšího.While scanning, the first matched value is skipped along with the index until the next value is found.

Přeskočit kontrolu používá SEEK_NEXT_USING_HINT výčtu filtru HBase.A skip scan uses the SEEK_NEXT_USING_HINT enumeration of the HBase filter. Pomocí SEEK_NEXT_USING_HINT, kontrolu přeskočit uchovává informace o které sadu klíčů nebo rozsahy klíčů, jsou prohledávána v každém sloupci.Using SEEK_NEXT_USING_HINT, the skip scan keeps track of which set of keys, or ranges of keys, are being searched for in each column. Přeskočení kontroly potom trvá klíč, který byl předán během vyhodnocení filtru a určuje, zda je jeden z kombinace.The skip scan then takes a key that was passed to it during filter evaluation, and determines whether it is one of the combinations. Pokud ne, vyhodnotí další nejvyšší klíč pro přechod na kontrolu přeskočit.If not, the skip scan evaluates the next highest key to jump to.

TransakceTransactions

HBase poskytuje transakcí na úrovni řádků, Phoenix integruje Tephra přidává různé řádků a křížovou tabulku transakce s plnou kyseliny sémantiku.While HBase provides row-level transactions, Phoenix integrates with Tephra to add cross-row and cross-table transaction support with full ACID semantics.

Jako s tradiční SQL transakce, transakce, které jsou k dispozici prostřednictvím Správce transakcí Phoenix umožňují Ujistěte se, že atomickou jednotku dat se úspěšně upserted, transakce vrácení zpět, pokud operace upsert je neúspěšná na jakoukoli tabulku podporou transakcí.As with traditional SQL transactions, transactions provided through the Phoenix transaction manager allow you to ensure an atomic unit of data is successfully upserted, rolling back the transaction if the upsert operation fails on any transaction-enabled table.

K povolení Phoenix transakcí, najdete v článku dokumentaci Apache Phoenix transakce.To enable Phoenix transactions, see the Apache Phoenix transaction documentation.

Chcete-li vytvořit novou tabulku s transakcemi povolena, nastavte TRANSACTIONAL vlastnost true v CREATE – příkaz:To create a new table with transactions enabled, set the TRANSACTIONAL property to true in a CREATE statement:

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

Změnit existující tabulku využívat transakce, použijte stejnou vlastnost v ALTER – příkaz:To alter an existing table to be transactional, use the same property in an ALTER statement:

ALTER TABLE my_other_table SET TRANSACTIONAL=true;

Poznámka

Transakční tabulku nelze přepnout zpět na právě není transakční.You cannot switch a transactional table back to being non-transactional.

Solené tabulkySalted Tables

Oblast server hotspotting může dojít, pokud zápis záznamů s sekvenční klíči pro HBase.Region server hotspotting can occur when writing records with sequential keys to HBase. Když jste více oblastní servery v clusteru, se zápisů vyskytnou u jen jeden.Though you may have multiple region servers in your cluster, your writes are all occurring on just one. Toto spojení vytvoří hotspotting problém, kde místo distribuována na všech serverech k dispozici oblast zápisu zátěže jen jeden zpracovává zatížení.This concentration creates the hotspotting issue where, instead of your write workload being distributed across all of the available region servers, just one is handling the load. Protože každá oblast má předdefinovanou maximální velikost, oblast dosáhne tohoto limitu velikosti, rozdělí se na dvě oblasti malé.Since each region has a predefined maximum size, when a region reaches that size limit, it is split into two small regions. Pokud k tomu dojde, přijímá mezi tyto nové oblasti všechny nové záznamy, stane hotspot nové.When that happens, one of these new regions takes all new records, becoming the new hotspot.

K zmírnění tohoto problému a dosahovat lepšího výkonu, předem rozdělení tabulky tak, aby všechny servery oblasti se používají stejnou měrou.To mitigate this problem and achieve better performance, pre-split tables so that all of the region servers are equally used. Phoenix poskytuje řetězce Salt tabulky, transparentně přidání "solení" bajtů do klíče řádku pro konkrétní tabulku.Phoenix provides salted tables, transparently adding the salting byte to the row key for a particular table. V tabulce je předem rozdělit na hranice řetězce salt bajtů do stejné rozložení zatížení mezi servery oblasti v počáteční fázi tabulky.The table is pre-split on the salt byte boundaries to ensure equal load distribution among region servers during the initial phase of the table. Tento přístup distribuuje zatížení zápisu na všech serverech k dispozici oblast, zlepšení zápisu a čtení výkonu.This approach distributes the write workload across all of the available region servers, improving the write and read performance. Salt tabulku, zadejte SALT_BUCKETS tabulky vlastnosti, když se vytvoří v tabulce:To salt a table, specify the SALT_BUCKETS table property when the table is created:

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;

Povolit a vyladění Phoenixu s Apache AmbariEnable and tune Phoenix with Apache Ambari

Cluster HDInsight HBase obsahuje uživatelského rozhraní Ambari k provádění změn konfigurace.An HDInsight HBase cluster includes the Ambari UI for making configuration changes.

  1. K povolení nebo zakázání Phoenix a řídit nastavení časového limitu dotazu pro Phoenix, přihlaste se k webovému uživatelskému rozhraní Ambari (https://YOUR_CLUSTER_NAME.azurehdinsight.net) pomocí svých přihlašovacích údajů uživatele Hadoop.To enable or disable Phoenix, and to control Phoenix's query timeout settings, log in to the Ambari Web UI (https://YOUR_CLUSTER_NAME.azurehdinsight.net) using your Hadoop user credentials.

  2. Vyberte HBase ze seznamu služeb v nabídce vlevo vyberte Configs kartu.Select HBase from the list of services in the left-hand menu, then select the Configs tab.

    Konfigurace Ambari HBase

  3. Najít Phoenix SQL konfiguračního oddílu pro povolení nebo zakázání phoenix a nastavte časový limit dotazu.Find the Phoenix SQL configuration section to enable or disable phoenix, and set the query timeout.

    Ambari Phoenix SQL configuration section

Další informace najdete v tématechSee also