Apache Phoenix adalah lapisan perantara SQL yang dibangun di atas HBase, memungkinkan Anda menjalankan pernyataan SQL standar untuk mengkueri dan mengelola data HBase.
Prasyarat
Kluster DataServing atau kluster kustom telah dibuat dengan layanan Phoenix dan HBase dipilih saat pembuatan kluster. Untuk informasi selengkapnya, lihat Buat kluster.
Gunakan Phoenix dari baris perintah
Masuk ke kluster Anda melalui SSH. Untuk informasi selengkapnya, lihat Masuk ke kluster.
Jalankan perintah berikut untuk membuka CLI Phoenix:
/opt/apps/PHOENIX/phoenix-current/bin/sqlline.pyJalankan pernyataan SQL untuk mengelola data. Operasi umum:
Buat tabel.
CREATE TABLE IF NOT EXISTS example( my_pk bigint not null, m.first_name varchar(50), m.last_name varchar(50) CONSTRAINT pk PRIMARY KEY (my_pk) );Masukkan data ke dalam tabel.
UPSERT INTO example(my_pk,m.first_name,m.last_name) VALUES(100,'Jack','Ben'); UPSERT INTO example(my_pk,m.first_name,m.last_name) VALUES(200,'Jack3','Ben3');Kueri data dari tabel.
SELECT * FROM example;Output berikut dikembalikan:
+--------+-------------+------------+ | MY_PK | FIRST_NAME | LAST_NAME | +--------+-------------+------------+ | 100 | Jack | Ben | | 200 | Jack3 | Ben3 | +--------+-------------+------------+Hapus tabel.
DROP TABLE IF EXISTS example;
Sambungkan ke Phoenix menggunakan JDBC
Konfigurasi dependensi Maven
<dependency>
<groupId>org.apache.phoenix</groupId>
<artifactId>phoenix-core</artifactId>
<version>${phoenix.version}</version>
</dependency>Variabel ${phoenix.version} harus sesuai dengan versi Phoenix di kluster Anda.
Kode contoh
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.PreparedStatement;
import java.sql.Statement;
public class TestPhoenixJdbc {
public static void main(String[] args) throws SQLException {
Statement stmt = null;
ResultSet rset = null;
Class.forName("org.apache.phoenix.jdbc.PhoenixDriver");
Connection con = DriverManager.getConnection("jdbc:phoenix:[zookeeper quorum hosts]");
stmt = con.createStatement();
stmt.executeUpdate("create table test (mykey integer not null primary key, mycolumn varchar)");
stmt.executeUpdate("upsert into test values (1,'Hello')");
stmt.executeUpdate("upsert into test values (2,'World!')");
con.commit();
PreparedStatement statement = con.prepareStatement("select * from test");
rset = statement.executeQuery();
while (rset.next()) {
System.out.println(rset.getString("mycolumn"));
}
statement.close();
con.close();
}
}Sambungkan ke kluster Phoenix yang diaktifkan Kerberos menggunakan JDBC
Jika kluster Anda menggunakan otentikasi Kerberos, bagian ini menjelaskan cara menulis program klien Java Database Connectivity (JDBC) untuk terhubung secara aman ke layanan Phoenix pada kluster EMR yang diaktifkan Kerberos. Program klien melakukan otentikasi menggunakan URL JDBC yang berisi informasi principal dan keytab, lalu menjalankan operasi Data Definition Language (DDL) dan Data Manipulation Language (DML) dasar untuk memverifikasi koneksi.
Langkah 1: Siapkan lingkungan dan kredensial
Sebelum menulis dan menjalankan kode, Anda harus menyiapkan lingkungan dan membuat kredensial Kerberos. Lakukan semua operasi berikut pada node master kluster.
Sambungkan ke node master kluster menggunakan SSH. Untuk informasi selengkapnya, lihat Masuk ke kluster.
Tentukan realm Kerberos.
Setiap kluster yang diaktifkan Kerberos memiliki realm unik.
Jalankan perintah berikut untuk mengambil informasi realm. Temukan dan catat realm tersebut untuk digunakan nanti.
cat /etc/krb5.conf | grep default_realmInformasi berikut dikembalikan.
default_realm = EMR.C-4FC5FDDE3759****.COMBuat principal klien.
Principal adalah identitas unik klien dalam sistem Kerberos. Anda harus membuat principal untuk aplikasi Java.
Pada node master, jalankan perintah berikut untuk menggunakan alat
kadmin.local.sudo kadmin.localPada antarmuka interaktif kadmin.local, jalankan perintah berikut untuk membuat principal.
addprinc phoenix_client@EMR.C-4FC5FDDE3759****.COMSetelah menjalankan perintah tersebut, Anda akan diminta menetapkan kata sandi untuk principal tersebut. Ingat kata sandi ini. Meskipun file keytab memungkinkan login tanpa kata sandi, kata sandi tersebut mungkin tetap diperlukan dalam beberapa kasus.
Ekspor file keytab.
Pada alat kadmin.local, jalankan perintah berikut untuk mengekspor file keytab.
xst -k /tmp/phoenix_client.keytab phoenix_client@EMR.C-4FC5FDDE3759****.COMJalankan perintah berikut untuk keluar dari kadmin.local.
exitPentingIzin: Pastikan pengguna yang menjalankan program Java memiliki izin baca pada file keytab.
Distribusi: Jika program Java Anda tidak dijalankan pada node master, Anda harus mendistribusikan file
phoenix_client.keytabdan file/etc/krb5.confke mesin tempat kode dijalankan secara aman. Tempatkan file-file tersebut di jalur yang dapat diakses oleh skrip.
Langkah 2: Tulis dan kemas aplikasi Java
Metode 1: Gunakan file JAR yang telah dikompilasi sebelumnya (untuk verifikasi cepat)
Metode 2: Kompilasi dan kemas aplikasi secara manual (disarankan untuk lingkungan produksi)
Anda dapat merujuk pada contoh kode berikut untuk mengompilasi dan mengemas aplikasi secara manual.
Langkah 3: Jalankan aplikasi
Pilih lingkungan runtime.
Saat menjalankan aplikasi, Anda dapat memilih salah satu dari dua lingkungan runtime berikut:
Jalankan di node kluster (Direkomendasikan)
Node kluster telah memiliki semua pustaka dependensi Hadoop, HBase, dan Phoenix yang diperlukan dalam keadaan pra-instal. Tidak diperlukan konfigurasi tambahan karena konektivitas jaringan telah dikonfigurasi sebelumnya, sehingga lingkungan tersebut lengkap dan stabil.
Skenario: Metode ini cocok untuk verifikasi cepat, pengujian, pengembangan, dan debugging.
Jalankan di luar kluster
Untuk menjalankan program di luar kluster, pastikan kondisi berikut terpenuhi:
Konektivitas jaringan: Pastikan mesin tempat program dijalankan dapat terhubung ke node ZooKeeper, HBase Master, dan RegionServer kluster.
Konfigurasi Kerberos: Salin berkas
krb5.confkluster dan berkas keytab yang dihasilkan ke mesin tempat program dijalankan.Manajemen dependensi: Classpath untuk perintah run harus mencakup semua paket JAR dependensi klien Hadoop, HBase, dan Phoenix yang diperlukan. Proses ini umumnya lebih kompleks dibandingkan dengan menjalankan di node kluster. Anda dapat menggunakan alat seperti Maven atau Gradle untuk mengelola dependensi.
Jalankan skrip.
Skrip
kerberos-phoenix.shberikut mengintegrasikan semua konfigurasi yang diperlukan untuk memudahkan modifikasi dan eksekusi.#!/bin/bash # ======================= 1. Konfigurasi Pengguna (Modifikasi sesuai lingkungan Anda) ======================= # Direktori tempat berkas konfigurasi Hadoop dan HBase berada HADOOP_CONF_DIR="/etc/taihao-apps/hadoop-conf" HBASE_CONF_DIR="/etc/taihao-apps/hbase-conf" # Path ke berkas JAR klien Phoenix. Menggunakan tautan simbolik merupakan praktik terbaik untuk menangani perubahan versi. # Pertama, gunakan 'ls -l /opt/apps/PHOENIX/phoenix-current/' untuk memastikan berkas ini ada. Path ini mungkin perlu dimodifikasi untuk versi yang berbeda. PHOENIX_JAR="/opt/apps/PHOENIX/phoenix-current/phoenix-client-lite-hbase-2.6.jar" # Nama berkas JAR aplikasi Anda. YOUR_JAR_FILE="hbase-phoenix-kerberos-1.0-SNAPSHOT.jar" # Path ke berkas konfigurasi Kerberos. KRB5_CONF_PATH="/etc/krb5.conf" # --- [Inti] Konfigurasi URL JDBC --- # Format: jdbc:phoenix:[Alamat ZK]:[Port ZK]:[ZNode HBase]:[Principal]:[Path Absolut Keytab] # Ganti alamat ZK, REALM, dan path Keytab di bawah ini dengan informasi aktual Anda. ZK_QUORUM="master-1-1" # Jika terdapat beberapa node ZooKeeper, pisahkan dengan koma, misalnya "zk1,zk2,zk3" ZK_PORT="2181" HBASE_ZNODE="/hbase" # Untuk kluster aman, mungkin berupa /hbase-secure PRINCIPAL="phoenix_client@EMR.C-4FC5FDDE3759****.COM" # Ganti dengan Principal Anda KEYTAB_PATH="/tmp/phoenix_client.keytab" # Path absolut ke berkas Keytab JDBC_URL="jdbc:phoenix:${ZK_QUORUM}:${ZK_PORT}:${HBASE_ZNODE}:${PRINCIPAL}:${KEYTAB_PATH}" # ================================================================================= # ======================= 2. Area Eksekusi (Biasanya tidak perlu dimodifikasi) ================================= echo "=================================================" echo "Memulai Demo JDBC Phoenix Kerberos..." echo "Menggunakan URL JDBC: ${JDBC_URL}" echo "=================================================" # Bangun Classpath. Urutan: direktori saat ini -> direktori konfigurasi -> JAR Anda -> JAR dependensi # `hbase classpath` secara otomatis memuat dependensi inti Hadoop/HBase CLASS_PATH=".:${HADOOP_CONF_DIR}:${HBASE_CONF_DIR}:${YOUR_JAR_FILE}:${PHOENIX_JAR}:$(hbase classpath)" # Jalankan program Java java -cp "${CLASS_PATH}" \ -Djava.security.krb5.conf="${KRB5_CONF_PATH}" \ PhoenixKerberosDemo "${JDBC_URL}" # Periksa kode keluar if [ $? -eq 0 ]; then echo -e "\n[SUKSES] Program selesai dengan sukses." else echo -e "\n[GAGAL] Program dihentikan karena terjadi kesalahan." fi # =================================================================================Unggah paket JAR yang dibuat pada Langkah 2 dan skrip
kerberos-phoenix.shke direktori tertentu pada Node master.Jalankan perintah berikut untuk memberikan izin eksekusi pada skrip.
chmod +x kerberos-phoenix.shJalankan perintah berikut untuk menjalankan skrip.
./kerberos-phoenix.shContoh berikut menunjukkan sebagian informasi yang dikembalikan.

Referensi
Untuk informasi selengkapnya tentang Phoenix, lihat topik-topik berikut dalam dokumentasi resmi: