Bagikan melalui


Apache Phoenix dalam Azure HDInsight

Apache Phoenix adalah sumber terbuka, lapisan database relasional paralel besar-besaran yang dibangun di Apache HBase. Phoenix memungkinkan Anda menggunakan hal seperti SQL kueri melalui HBase. Phoenix menggunakan driver JDBC di bawahnya untuk memungkinkan pengguna membuat, menghapus, mengubah tabel SQL, indeks, tampilan dan urutan, dan upsert baris secara individual dan massal. Phoenix menggunakan kompilasi asli noSQL daripada menggunakan MapReduce untuk mengompilasi kueri, memungkinkan pembuatan aplikasi latensi rendah di atas HBase. Phoenix menambahkan koprosesor untuk mendukung menjalankan kode yang disediakan klien di ruang alamat server, mengeksekusi kode yang dikolokasi dengan data. Pendekatan ini meminimalkan transfer data klien/server.

Apache Phoenix membuka kueri big data untuk non-pengembang yang dapat menggunakan sintaks seperti SQL daripada melakukan pemrograman. Phoenix sangat dioptimalkan untuk HBase, tidak seperti alat lain seperti Apache Hive dan Apache Spark SQL. Manfaat bagi pengembang adalah menulis kueri berperforma tinggi dengan kode yang jauh lebih sedikit.

Saat Anda mengirimkan kueri SQL, Phoenix mengompilasi kueri ke panggilan asli HBase dan mengeksekusi pemindaian (atau paket) secara paralel untuk pengoptimalan. Lapisan abstraksi ini membebaskan pengembang dari menulis pekerjaan MapReduce, untuk fokus pada logika bisnis dan alur kerja aplikasi mereka di sekitar penyimpanan data besar Phoenix.

Pengoptimalan performakueri dan fitur lainnya

Apache Phoenix menambahkan beberapa peningkatan performa dan fitur ke kueri HBase.

Indeks sekunder

HBase memiliki indeks tunggal yang diurutkan secara leksikograf pada kunci baris utama. Catatan ini hanya dapat diakses melalui tombol baris. Mengakses rekaman melalui kolom apa pun selain tombol baris memerlukan pemindaian data menyeluruh selama menerapkan filter yang diperlukan. Dalam indeks sekunder, kolom atau ekspresi yang diindeks dari kunci baris alternatif, memungkinkan pencarian dan pemindaian rentang pada indeks tersebut.

Membuat indeks sekunder dengan CREATE INDEX perintah:

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

Pendekatan ini dapat menghasilkan peningkatan performa yang signifikan atas pelaksanaan kueri yang diindeks tunggal. Jenis indeks sekunder ini adalah indeks penutup, berisi semua kolom yang disertakan dalam kueri. Oleh karena itu, pencarian tabel tidak diperlukan dan indeks memenuhi seluruh kueri.

Tampilan

Tampilan Phoenix memberikan cara untuk mengatasi batasan HBase, di mana performa mulai menurun saat Anda membuat lebih dari sekitar 100 tabel fisik. Tampilan Phoenix memungkinkan beberapa tabel virtual untuk membagikan satu tabel HBase fisik yang mendasarinya.

Membuat tampilan Phoenix mirip dengan menggunakan sintaks tampilan SQL standar. Satu perbedaan yaitu Anda dapat menentukan kolom untuk tampilan Anda, selain kolom yang diwarisi dari tabel dasarnya. Anda juga dapat menambahkan kolom KeyValue baru.

Misalnya, berikut adalah tabel fisik bernama product_metrics dengan definisi berikut:

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));

Tentukan tampilan di atas tabel ini, dengan lebih banyak kolom:

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

Untuk menambahkan lebih banyak kolom nanti, gunakan pernyataan ALTER VIEW.

Lewati pemindaian

Lewati pemindaian menggunakan satu atau beberapa kolom indeks komposit untuk menemukan nilai yang berbeda. Tidak seperti pemindaian rentang, lewati pemindaian mengimplementasikan pemindaian intra-baris, menghasilkan peningkatan performa. Saat Anda memindai, nilai pertama yang cocok dilewati bersama dengan indeks hingga nilai berikutnya ditemukan.

Pemindaian lewati menggunakan SEEK_NEXT_USING_HINT enumerasi filter HBase. Menggunakan SEEK_NEXT_USING_HINT, lewati pemindaian tetap melacak kunci set, atau rentang kunci, yang sedang dicari di setiap kolom. Pemindaian lewati kemudian mengambil kunci yang diteruskan ke sana selama evaluasi filter, dan menentukan apakah itu salah satu kombinasi. Jika tidak, pemindaian lewati mengevaluasi kunci tertinggi berikutnya untuk dilewatkan.

Transaksi

Sementara HBase menyediakan transaksi tingkat baris, Phoenix terintegrasi dengan Tephra untuk menambahkan dukungan transaksi lintas baris dan lintas tabel dengan semantik ACID penuh.

Seperti halnya transaksi SQL tradisional, transaksi yang disediakan melalui manajer transaksi Phoenix memungkinkan Anda untuk memastikan unit data atom berhasil ditingkatkan, mengembalikan transaksi jika operasi upsert gagal pada tabel yang diaktifkan transaksi.

Untuk mengaktifkan transaksi Phoenix, lihat dokumentasi transaksi Apache Phoenix.

Untuk membuat tabel baru dengan transaksi yang diaktifkan, atur TRANSACTIONAL properti ke true dalam CREATE pernyataan:

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

Untuk mengubah tabel yang ada menjadi transaksional, gunakan properti yang sama dalam ALTER sebuah pernyataan:

ALTER TABLE my_other_table SET TRANSACTIONAL=true;

Catatan

Anda tidak dapat mengalihkan tabel transaksional kembali menjadi non-transaksional.

Tabel Asin

Hotspot server wilayah dapat terjadi saat menulis catatan dengan kunci berurutan ke HBase. Meskipun Anda mungkin memiliki beberapa server wilayah di kluster Anda, semua tulisan Anda terjadi hanya pada satu. Konsentrasi ini menciptakan masalah hotspotting di mana, alih-alih beban kerja tulis Anda didistribusikan di semua server wilayah yang tersedia, hanya satu yang menangani beban. Karena setiap wilayah memiliki ukuran maksimum yang telah ditentukan sebelumnya, ketika suatu wilayah mencapai batas ukuran tersebut, wilayah tersebut dibagi menjadi dua wilayah kecil. Ketika itu terjadi, salah satu wilayah baru ini mengambil semua catatan baru, menjadi hotspot baru.

Untuk mengurangi masalah ini dan mencapai performa yang lebih baik, pra-pisah tabel sehingga semua server wilayah digunakan secara merata. Phoenix menyediakan tabel salted, yang secara transparan menambahkan byte salting ke kunci baris untuk tabel tertentu. Tabel ini telah dipisahkan sebelumnya pada batas byte salt untuk memastikan distribusi beban yang sama di antara server wilayah selama fase awal tabel. Pendekatan ini mendistribusikan beban kerja tulis di semua server wilayah yang tersedia, meningkatkan performa tulis dan baca. Untuk melakukan salt pada tabel, tentukan properti tabel SALT_BUCKETS saat tabel dibuat:

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;

Aktifkan dan setel Phoenix dengan Apache Ambari

Kluster HDInsight HBase menyertakan UI Ambari untuk membuat perubahan konfigurasi.

  1. Untuk mengaktifkan atau menonaktifkan Phoenix, dan untuk mengontrol pengaturan batas waktu kueri Phoenix, masuk ke Ambari Web UI (https://YOUR_CLUSTER_NAME.azurehdinsight.net) menggunakan kredensial pengguna Hadoop Anda.

  2. Pilih HBase dari daftar layanan di menu sebelah kiri, lalu pilih tab Konfigurasi.

    Konfigurasi Apache Ambari HBase.

  3. Temukan bagian konfigurasi Phoenix SQL untuk mengaktifkan atau menonaktifkan phoenix, dan atur batas waktu kueri.

    Bagian konfigurasi Ambari Phoenix SQL.

Lihat juga