Hubungkan ke Hive di kluster E-MapReduce (EMR) menggunakan klien Hive, Beeline, atau Java Database Connectivity (JDBC).
Prasyarat
Sebelum memulai, pastikan Anda telah:
-
Membuat kluster EMR dengan Hive terinstal dan mengaktifkan sakelar Assign Public Network IP pada node master. Untuk membuat kluster, lihat Create a cluster.
-
Masuk ke node master kluster. Lihat Log on to a cluster.
Jenis kluster yang dirujuk dalam topik ini:
| Jenis kluster | Deskripsi |
|---|---|
| Kluster umum | Kerberos Authentication dan High Service Availability keduanya dimatikan |
| Kluster keamanan tinggi | Kerberos Authentication diaktifkan |
| Kluster ketersediaan tinggi | High Service Availability diaktifkan; ZooKeeper harus dipilih saat pembuatan kluster |
Catatan penggunaan
-
Temukan nama node master dan alamat IP publik di tab Nodes. Lihat Log on to a cluster. Nama default node master adalah
master-1-1. Untuk kluster Hadoop, yaituemr-header-1.
-
HiveServer2 tidak memverifikasi username dan password secara default. Untuk mengaktifkan otentikasi, aktifkan Lightweight Directory Access Protocol (LDAP) authentication. Lihat Use LDAP authentication.
Hubungkan ke Hive pada kluster umum
Gunakan klien Hive
Jalankan perintah berikut:
hive
Untuk keluar, jalankan quit; atau exit;.
Gunakan Beeline
Jalankan perintah berikut:
beeline -u jdbc:hive2://master-1-1:10000
Untuk keluar, jalankan !quit atau !exit.
Gunakan JDBC
Pastikan Anda telah menyiapkan lingkungan Java, menginstal tool pengembangan Java, dan mengonfigurasi variabel lingkungan sebelum melanjutkan.
-
Tambahkan
hadoop-commondanhive-jdbcsebagai dependensi dalam filepom.xmlAnda:<dependencies> <dependency> <groupId>org.apache.hive</groupId> <artifactId>hive-jdbc</artifactId> <version>3.1.3</version> </dependency> <dependency> <groupId>org.apache.hadoop</groupId> <artifactId>hadoop-common</artifactId> <version>3.2.1</version> </dependency> </dependencies>Pastikan versi tersebut sesuai dengan versi Hadoop-Common dan Hive di kluster EMR Anda. Periksa informasi ini di bagian Software Information pada tab Basic Information di Konsol EMR.
-
Tulis kode untuk menghubungkan ke HiveServer2 dan melakukan kueri data:
import java.sql.*; public class App { private static String driverName = "org.apache.hive.jdbc.HiveDriver"; public static void main(String[] args) throws SQLException { try { Class.forName(driverName); } catch (ClassNotFoundException e) { e.printStackTrace(); } // Ganti <Public IP address of the master node> dengan alamat IP publik sebenarnya Connection con = DriverManager.getConnection( "jdbc:hive2://<Public IP address of the master node>:10000", "root", ""); Statement stmt = con.createStatement(); String sql = "select * from sample_tbl limit 10"; ResultSet res = stmt.executeQuery(sql); while (res.next()) { System.out.println(res.getString(1) + "\t" + res.getString(2)); } } }CatatanMetode ini memerlukan port 10000 terbuka. Untuk informasi lebih lanjut, lihat Manage security groups.
-
Kemas proyek sebagai file JAR dan unggah ke host tempat Anda ingin menjalankannya.
PentingFile JAR memerlukan hadoop-common dan hive-jdbc untuk dijalankan. Jika lingkungan runtime Anda tidak menyertakan paket dependensi ini dalam variabel lingkungan, Anda harus mengunduh dan mengonfigurasinya atau mengemasnya bersama dalam file JAR. Jika dependensi ini tidak tersedia saat menjalankan file JAR, error berikut akan muncul:
-
hadoop-common tidak ditemukan:
java.lang.NoClassDefFoundError: org/apache/hadoop/conf/Configuration -
hive-jdbc tidak ditemukan:
java.lang.ClassNotFoundException: org.apache.hive.jdbc.HiveDriver
Dalam contoh ini, file JAR yang dihasilkan adalah
emr-hiveserver2-1.0.jar. Unggah file JAR ini ke node master kluster E-MapReduce. -
-
Jalankan file JAR:
PentingServer tempat Anda menjalankan file JAR dan kluster E-MapReduce harus berada dalam VPC dan security group yang sama serta memiliki konektivitas jaringan. Jika berada di VPC atau lingkungan jaringan yang berbeda, Anda harus menggunakan alamat IP publik untuk akses. Atau, Anda dapat menggunakan produk jaringan untuk membuat koneksi antara keduanya lalu menggunakan jaringan internal untuk akses. Untuk menguji konektivitas jaringan:
-
Jaringan publik:
telnet <Public IP address of master-1-1> 10000 -
Jaringan internal:
telnet <Internal IP address of master-1-1> 10000
java -jar emr-hiveserver2-1.0.jar -
Hubungkan ke Hive pada kluster keamanan tinggi
Kluster keamanan tinggi memerlukan otentikasi Kerberos. Sebelum menghubungkan dengan klien Hive atau Beeline, siapkan principal Kerberos dan peroleh Ticket Granting Ticket (TGT).
Siapkan otentikasi Kerberos
-
Buka CLI admin Kerberos.
-
Di
master-1-1(node Key Distribution Center (KDC)), jalankan sebagai root:kadmin.localCLI siap digunakan ketika output mencakup:
Authenticating as principal hadoop/admin@EMR.C-85D4B8D74296****.COM with password. kadmin.local: -
Di node atau gateway lainnya, jalankan:
kadmin -p <admin-user> -w <admin-password>Ganti placeholder berikut:
Placeholder Nilai <admin-user>root/admin(untuk KDC yang dikelola sendiri di EMR)<admin-password>Nilai parameter admin_pwd, yang dapat ditemukan di tab Configure layanan Kerberos di Konsol EMRCLI siap digunakan ketika output mencakup:
Authenticating as principal root/admin with password. kadmin:
-
-
Buat principal Kerberos bernama
test:CatatanSimpan username dan password — Anda memerlukannya untuk membuat TGT.
addprinc -pw 123456 testPrincipal berhasil dibuat ketika output mencakup:
Principal "test@EMR.C-85D4B8D74296****.COM" created.Untuk keluar dari CLI admin, jalankan
quit. -
Buat pengguna sistem dan beralih ke pengguna tersebut:
useradd test su test -
Buat TGT:
kinitSaat diminta, masukkan password untuk pengguna
test(dalam contoh ini,123456).
Gunakan klien Hive
Setelah menyelesaikan penyiapan Kerberos di atas, jalankan:
beeline -u "jdbc:hive2://master-1-1.c-56187feb57f0****.cn-hangzhou.emr.aliyuncs.com:10000/;principal=hive/_HOST@EMR.c-56187feb57f0****.COM"
Gunakan Beeline
Setelah menyelesaikan penyiapan Kerberos di atas, jalankan:
beeline -u "jdbc:hive2://master-1-1.c-56187feb57f0****.cn-hangzhou.emr.aliyuncs.com:10000/;principal=hive/_HOST@EMR.c-56187feb57f0****.COM"
Ganti nilai berikut berdasarkan kluster Anda:
| Placeholder | Cara mendapatkannya |
|---|---|
master-1-1.c-56187feb57f0****.cn-hangzhou.emr.aliyuncs.com |
Hostname lengkap (fully qualified hostname) dari node HiveServer2 (biasanya master-1-1). Jalankan hostname -f di node tersebut untuk mendapatkan nilai ini. |
EMR.c-56187feb57f0****.COM |
Nama realm. Cari parameter realm di tab Configure layanan Kerberos di Konsol EMR. |
Hubungkan ke Hive pada kluster ketersediaan tinggi
Kluster ketersediaan tinggi menyediakan beberapa instans HiveServer2. Gunakan Beeline dengan mode service discovery yang sesuai dengan konfigurasi kluster Anda.
Gunakan Beeline dengan service discovery ZooKeeper
beeline -u 'jdbc:hive2://master-1-1:2181,master-1-2:2181,master-1-3:2181/;serviceDiscoveryMode=zooKeeper;zooKeeperNamespace=hiveserver2'
Gunakan Beeline dengan service discovery multi-server
beeline -u 'jdbc:hive2://master-1-1:10000,master-1-2:10000,master-1-3:10000/default;serviceDiscoveryMode=multiServers'
Pemecahan masalah
Tidak dapat terhubung ke Hive pada port 10000
Gejala: Koneksi ke HiveServer2 pada port 10000 mengalami timeout atau ditolak.
Penyebab: HiveServer2 tidak berjalan, atau security group tidak mengizinkan traffic pada port 10000.
Penyelesaian:
-
Verifikasi bahwa HiveServer2 sedang berjalan. Di node tempat HiveServer2 dideploy, jalankan:
netstat -tulnp | grep 10000Jika tidak ada proses yang muncul, HiveServer2 tidak berjalan. Periksa log startup HiveServer2 untuk mendiagnosis masalah.
-
Verifikasi bahwa port 10000 terbuka di security group. Di Konsol EMR, buka tab Basic Information dan klik tautan di samping Cluster Security Group. Di tab Security Group Details, pastikan port 10000 terbuka. Jika belum, aktifkan. Lihat Manage security groups.
Ketersediaan tinggi dan otentikasi Kerberos diaktifkan bersamaan
Gejala: Kluster memiliki High Service Availability dan Kerberos Authentication yang diaktifkan, dan Anda perlu menghubungkan ke Hive.
Penyebab: Kombinasi ini memerlukan kredensial Kerberos dan endpoint HiveServer2 yang load-balanced, yang tidak ditangani secara otomatis oleh perintah Beeline standar.
Penyelesaian: Buat principal Kerberos dan peroleh TGT, lalu gunakan JDBC untuk terhubung. Lihat Balance the load of HiveServer2.