Apache Phoenix in HDInsightApache Phoenix in HDInsight

Apache Phoenix is een open source, uiterst parallelle relationele databaselaag die is gebouwd op Apache HBase.Apache Phoenix is an open source, massively parallel relational database layer built on Apache HBase. Phoenix kunt u gebruikmaken van SQL-achtige query's over HBase.Phoenix allows you to use SQL-like queries over HBase. Phoenix maakt gebruik van JDBC-stuurprogramma's onder zodat gebruikers kunnen maken, verwijderen, SQL-tabellen, indexen, weergaven en reeksen en upsert rijen afzonderlijk en bulksgewijs wijzigen.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 maakt gebruik van systeemeigen compilatie noSQL in plaats van MapReduce gebruiken voor het compileren van query's, waardoor het maken van toepassingen van de lage latentie op basis van 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 coprocessors ter ondersteuning van de uitvoering van code client wordt geleverd in de adresruimte van de server uitvoeren van de code geplaatst met de gegevens wordt toegevoegd.Phoenix adds coprocessors to support running client-supplied code in the address space of the server, executing the code colocated with the data. Deze aanpak minimaliseert de overdracht van client/server-gegevens.This approach minimizes client/server data transfer.

Apache Phoenix opent u big data-query's voor niet-ontwikkelaars die een SQL-achtige syntaxis kunnen gebruiken in plaats van programmeren.Apache Phoenix opens up big data queries to non-developers who can use a SQL-like syntax rather than programming. Phoenix is geoptimaliseerd voor HBase, in tegenstelling tot andere hulpprogramma's zoals Apache Hive en Apache Spark SQL.Phoenix is highly optimized for HBase, unlike other tools such as Apache Hive and Apache Spark SQL. Het voordeel voor ontwikkelaars is zeer goed presterende query's met veel minder code te schrijven.The benefit to developers is writing highly performant queries with much less code.

Wanneer u een SQL-query verzendt, wordt Phoenix compileert de query op HBase systeemeigen aanroepen en de scan (of plan) voor optimalisatie parallel wordt uitgevoerd.When you submit a SQL query, Phoenix compiles the query to HBase native calls and runs the scan (or plan) in parallel for optimization. Deze laag van abstractie kan de ontwikkelaar van het schrijven van MapReduce-taken, in plaats daarvan richten op de bedrijfslogica en de werkstroom van hun toepassing rond Phoenix van big data-opslag.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.

Optimalisatie van prestaties van query's en andere functiesQuery performance optimization and other features

Apache Phoenix voegt verschillende verbeterde prestaties en functies op HBase-query's.Apache Phoenix adds several performance enhancements and features to HBase queries.

Secundaire indexenSecondary indexes

HBase is een één-index die is lexicographically gesorteerd op de primaire rijsleutel.HBase has a single index that is lexicographically sorted on the primary row key. Deze records kunnen alleen worden geopend via de rijsleutel.These records can only be accessed through the row key. Records openen via een andere kolom dan de rijsleutel moet scannen van alle gegevens die tijdens het toepassen van de vereiste filter.Accessing records through any column other than the row key requires scanning all of the data while applying the required filter. In een secundaire index, de kolommen of expressies die geïndexeerd formulier zijn scant een alternatieve rijsleutel, zodat zoekopdrachten en het bereik van die index.In a secondary index, the columns or expressions that are indexed form an alternate row key, allowing lookups and range scans on that index.

Maken van een secundaire index met de CREATE INDEX opdracht:Create a secondary index with the CREATE INDEX command:

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

Deze benadering kan een aanzienlijke prestatieverbetering worden verkregen via het uitvoeren van query's één geïndexeerd.This approach can yield a significant performance increase over executing single-indexed queries. Dit type secundaire index is een die betrekking hebben op index, met alle van de kolommen die zijn opgenomen in de query.This type of secondary index is a covering index, containing all of the columns included in the query. Daarom de zoekopdracht in de tabel is niet vereist en de index voldoet aan de query.Therefore, the table lookup is not required and the index satisfies the entire query.

WeergavenViews

Phoenix-weergaven bieden een manier om te strijden tegen een HBase-beperking, waar de prestaties verslechteren bij het maken van meer dan ongeveer 100 fysieke tabellen begint.Phoenix views provide a way to overcome an HBase limitation, where performance begins to degrade when you create more than about 100 physical tables. Phoenix weergaven kan meerdere virtuele tabellen voor het delen van één onderliggende fysieke HBase-tabel.Phoenix views enable multiple virtual tables to share one underlying physical HBase table.

Het maken van een weergave Phoenix is vergelijkbaar met het gebruik van de standaard SQL-weergave-syntaxis.Creating a Phoenix view is similar to using standard SQL view syntax. Een verschil is dat u de kolommen voor de weergave, naast de kolommen die zijn overgenomen van de basistabel kunt definiëren.One difference is that you can define columns for your view, in addition to the columns inherited from its base table. U kunt ook nieuwe toevoegen KeyValue kolommen.You can also add new KeyValue columns.

Dit is bijvoorbeeld een fysieke tabel met de naam product_metrics met de definitie van de volgende: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));

Een weergave definiëren voor deze tabel, met extra kolommen: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';

U kunt meer kolommen later toevoegen met de ALTER VIEW instructie.To add more columns later, use the ALTER VIEW statement.

Scan overslaanSkip scan

Overslaan scan maakt gebruik van een of meer kolommen van een samengestelde index zoeken naar afzonderlijke waarden.Skip scan uses one or more columns of a composite index to find distinct values. In tegenstelling tot een scan bereik overslaan scan intra-rij scannen, wordt vrijgegeven implementeert verbeterde prestaties.Unlike a range scan, skip scan implements intra-row scanning, yielding improved performance. Tijdens het zoeken naar, wordt de eerste overeenkomende waarde overgeslagen samen met de index tot de volgende waarde is gevonden.While scanning, the first matched value is skipped along with the index until the next value is found.

Maakt gebruik van een scan overslaan de SEEK_NEXT_USING_HINT inventarisatie van het HBase-filter.A skip scan uses the SEEK_NEXT_USING_HINT enumeration of the HBase filter. Met behulp van SEEK_NEXT_USING_HINT, de scan overslaan van wordt bijgehouden welke set sleutels of bereiken van sleutels, zijn in elke kolom wordt gezocht.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. De overslaan scannen en heeft een sleutel die is doorgegeven aan deze tijdens de evaluatie van filter en bepaalt of het is een van de combinaties.The skip scan then takes a key that was passed to it during filter evaluation, and determines whether it is one of the combinations. Als dat niet het geval is, wordt de scan overslaan evalueert de hoogste op een toets om naar te gaan.If not, the skip scan evaluates the next highest key to jump to.

TransactiesTransactions

HBase biedt u beveiliging op rijniveau transacties, Phoenix kan worden geïntegreerd met Tephra om toe te voegen cross-rij- en cross-tabel transactieondersteuning met volledige ACID semantiek.While HBase provides row-level transactions, Phoenix integrates with Tephra to add cross-row and cross-table transaction support with full ACID semantics.

Als met traditionele SQL-transacties kunnen transacties die worden geleverd via de transactiebeheerder Phoenix u om te controleren of een atomische eenheid van gegevens is upserted, terugdraaien van de transactie als de upsert-bewerking is mislukt op een willekeurige tabel transactie is ingeschakeld.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.

Zie voor het inschakelen van Phoenix transacties de Apache Phoenix transactie documentatie.To enable Phoenix transactions, see the Apache Phoenix transaction documentation.

Als u een nieuwe tabel met transacties die zijn ingeschakeld, stelt u de TRANSACTIONAL eigenschap true in een CREATE instructie: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;

Als u wilt een bestaande tabel om te worden transactionele wijzigen, gebruikt u de dezelfde eigenschap in een ALTER instructie:To alter an existing table to be transactional, use the same property in an ALTER statement:

ALTER TABLE my_other_table SET TRANSACTIONAL=true;

Notitie

U kunt niet een transactionele tabel overstappen terug naar de niet-transactionele wordt.You cannot switch a transactional table back to being non-transactional.

Gezouten tabellenSalted Tables

Regio server hotspotting kan zich voordoen bij het schrijven van records met opeenvolgende sleutels naar HBase.Region server hotspotting can occur when writing records with sequential keys to HBase. Hoewel u meerdere regioservers in uw cluster hebt, worden de schrijfbewerkingen op slechts één is optreden.Though you may have multiple region servers in your cluster, your writes are all occurring on just one. Deze concentratie maakt het hotspotting probleem waarbij, in plaats van uw write-werkbelasting wordt verdeeld over alle beschikbare regioservers, is slechts een de belasting verwerken.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. Omdat elke regio een vooraf gedefinieerde maximumgrootte heeft heeft als een regio die maximale grootte bereikt, wordt dit verdeeld in twee kleine gebieden.Since each region has a predefined maximum size, when a region reaches that size limit, it is split into two small regions. Wanneer dit gebeurt, neemt een van deze nieuwe regio's alle nieuwe records, worden de nieuwe hotspot.When that happens, one of these new regions takes all new records, becoming the new hotspot.

Dit probleem te verhelpen en betere prestaties, vooraf splitsen tabellen zodat alle regioservers evenredig worden gebruikt.To mitigate this problem and achieve better performance, pre-split tables so that all of the region servers are equally used. Phoenix bevat tabellen gezouten, transparant de salting byte toe te voegen aan de rijsleutel voor een bepaalde tabel.Phoenix provides salted tables, transparently adding the salting byte to the row key for a particular table. De tabel is vooraf op de salt byte grenzen bevinden om ervoor te zorgen gelijke verdeling van de belasting tussen regioservers tijdens de eerste fase van de tabel splitsen.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. Deze methode wordt de werkbelasting schrijven verspreid over alle beschikbare regioservers, verbeteren de schrijven en lezen van de prestaties.This approach distributes the write workload across all of the available region servers, improving the write and read performance. Als u wilt een tabel salt, geef de SALT_BUCKETS eigenschap tabel wanneer de tabel is gemaakt: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;

Inschakelen en af te stemmen Phoenix met Apache AmbariEnable and tune Phoenix with Apache Ambari

Een HDInsight HBase-cluster bevat de Ambari UI voor het aanbrengen van wijzigingen in de configuratie.An HDInsight HBase cluster includes the Ambari UI for making configuration changes.

  1. Phoenix uit te schakelen, en voor het beheren van Phoenix query-time-outinstellingen, meld u aan bij de Ambari-Webgebruikersinterface (https://YOUR_CLUSTER_NAME.azurehdinsight.net) met de referenties van uw Hadoop-gebruiker.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. Selecteer HBase uit de lijst met services in het menu links, selecteer de Peeringconfiguraties tabblad.Select HBase from the list of services in the left-hand menu, then select the Configs tab.

    Ambari HBase-configuratie

  3. Zoek de Phoenix SQL configuratiesectie inschakelen of uitschakelen phoenix en stel de time-out van de query.Find the Phoenix SQL configuration section to enable or disable phoenix, and set the query timeout.

    De configuratiesectie Ambari Phoenix SQL

Zie ookSee also