Apache Hive Kueri melalui driver JDBC di HDInsight
Pelajari cara menggunakan driver JDBC dari aplikasi Java. Untuk mengirimkan kueri Apache Hive ke Apache Hadoop di Azure HDInsight. Informasi dalam dokumen ini menunjukkan cara terhubung secara terprogram, dan dari SQuirreL SQL
klien.
Untuk mengetahui informasi selengkapnya tentang Antarmuka Hive JDBC, lihat HiveJDBCInterface.
Prasyarat
- Kluster HDInsight Hadoop. Untuk membuatnya, lihat Mulai menggunakan Microsoft Azure HDInsight. Pastikan HiveServer2 berjalan.
- Java Developer Kit (JDK) versi 11 atau lebih tinggi.
- SQuirrel SQL. SQuirreL adalah aplikasi klien JDBC.
String koneksi JDBC
Koneksi JDBC ke kluster HDInsight di Azure dibuat melalui port 443. Lalu lintas diamankan menggunakan TLS/SSL. Gateway publik yang duduk di belakang kluster mengalihkan lalu lintas ke port yang sebenarnya didengarkan oleh HiveServer2. String koneksi berikut menunjukkan format yang digunakan untuk HDInsight:
jdbc:hive2://CLUSTERNAME.azurehdinsight.net:443/default;transportMode=http;ssl=true;httpPath=/hive2
Ganti CLUSTERNAME
dengan nama kluster HDInsight Anda.
Nama host dalam string koneksi
Nama host 'CLUSTERNAME.azurehdinsight.net' dalam string koneksi sama dengan URL kluster Anda. Anda bisa mendapatkannya melalui portal Microsoft Azure.
Port dalam string koneksi
Anda hanya dapat menggunakan port 443 untuk menyambungkan ke kluster dari beberapa tempat di luar jaringan virtual Azure. HDInsight adalah layanan terkelola, yang berarti semua koneksi ke kluster dikelola melalui Gateway yang aman. Anda tidak dapat terhubung ke HiveServer 2 langsung pada port 10001 atau 10000. Port ini tidak terekspos di luar.
Autentikasi
Saat membuat koneksi, gunakan nama admin dan kata sandi kluster HDInsight untuk mengautentikasi. Dari klien JDBC seperti SQuirreL SQL, masukkan nama admin dan kata sandi di pengaturan klien.
Dari aplikasi Java, Anda harus menggunakan nama dan kata sandi saat membuat koneksi. Misalnya, kode Java berikut membuka koneksi baru:
DriverManager.getConnection(connectionString,clusterAdmin,clusterPassword);
Terhubung dengan klien SQuirreL SQL
SQuirreL SQL adalah klien JDBC yang dapat digunakan untuk menjalankan kueri Hive dari jarak jauh dengan kluster HDInsight Anda. Langkah-langkah berikut mengasumsikan bahwa Anda telah menginstal SQuirreL SQL.
Buat direktori untuk memuat file tertentu yang akan disalin dari kluster Anda.
Dalam skrip berikut, ganti
sshuser
dengan nama akun pengguna SSH untuk kluster. GantiCLUSTERNAME
dengan nama kluster HDInsight. Dari baris perintah, ubah direktori kerja Anda menjadi direktori kerja yang dibuat di langkah sebelumnya, lalu masukkan perintah berikut untuk menyalin file dari kluster HDInsight:scp sshuser@CLUSTERNAME-ssh.azurehdinsight.net:/usr/hdp/current/hadoop-client/{hadoop-auth.jar,hadoop-common.jar,lib/log4j-*.jar,lib/slf4j-*.jar,lib/curator-*.jar} . -> scp sshuser@CLUSTERNAME-ssh.azurehdinsight.net:/usr/hdp/current/hadoop-client/{hadoop-auth.jar,hadoop-common.jar,lib/reload4j-*.jar,lib/slf4j-*.jar,lib/curator-*.jar} . scp sshuser@CLUSTERNAME-ssh.azurehdinsight.net:/usr/hdp/current/hive-client/lib/{commons-codec*.jar,commons-logging-*.jar,hive-*-*.jar,httpclient-*.jar,httpcore-*.jar,libfb*.jar,libthrift-*.jar} .
Memulai aplikasi SQuirreL SQL. Dari sebelah kiri jendela, pilih Driver.
Dari ikon di bagian atas dialog Driver, pilih ikon + untuk membuat driver.
Dalam dialog Menambahkan Driver, tambahkan informasi berikut:
Properti Nilai Nama Hive Contoh URL jdbc:hive2://localhost:443/default;transportMode=http;ssl=true;httpPath=/hive2
Jalur Kelas Ekstra Gunakan tombol Tambahkan untuk menambahkan semua file jar yang diunduh sebelumnya. Nama Kelas org.apache.hive.jdbc.HiveDriver Pilih OK untuk menyimpan pengaturan ini.
Di sebelah kiri jendela SQuirreL SQL, pilih Alias. Kemudian, pilih ikon + untuk membuat alias koneksi.
Gunakan nilai berikut untuk dialog Tambahkan Alias:
Properti Nilai Nama Hive di HDInsight Driver Gunakan menu drop-down untuk memilih driver Hive. URL jdbc:hive2://CLUSTERNAME.azurehdinsight.net:443/default;transportMode=http;ssl=true;httpPath=/hive2
. Ganti CLUSTERNAME dengan nama kluster HDInsight Anda.Nama Pengguna Nama akun masuk kluster untuk kluster HDInsight Anda. Defaultnya adalah admin. Kata sandi Kata sandi untuk akun masuk kluster. Penting
Gunakan tombol Uji untuk memverifikasi bahwa koneksi berfungsi. Saat dialog Menyambungkan ke: Hive di HDInsight muncul, pilih Sambungkan untuk melakukan pengujian. Jika pengujian berhasil, Anda akan melihat dialog Koneksi berhasil. Jika terjadi kesalahan, lihat Pemecahan masalah.
Untuk menyimpan alias koneksi, gunakan tombol Ok di bagian bawah dialog Tambahkan Alias.
Dari menu dropdown Hubungkan ke di bagian atas SQuirreL SQL, pilih Hive di HDInsight. Saat diminta, pilih Sambungkan.
Setelah tersambung, masukkan kueri berikut ke dalam dialog kueri SQL, lalu pilih ikon Jalankan (orang yang sedang berjalan). Area hasil harus memperlihatkan hasil kueri.
select * from hivesampletable limit 10;
Menyambungkan dari contoh aplikasi Java
Contoh penggunaan klien Java untuk mengkueri Hive di HDInsight tersedia di https://github.com/Azure-Samples/hdinsight-java-hive-jdbc. Ikuti petunjuk di repositori untuk membuat dan menjalankan sampel.
Pemecahan Masalah
Terjadi Kesalahan yang Tidak Terduga saat coba membuka koneksi SQL
Gejala: Saat menyambungkan ke kluster HDInsight versi 3.3 atau lebih tinggi, Anda mungkin mengalami kesalahan yang tidak terduga. Pelacakan tumpukan untuk kesalahan ini dimulai dengan baris berikut:
java.util.concurrent.ExecutionException: java.lang.RuntimeException: java.lang.NoSuchMethodError: org.apache.commons.codec.binary.Base64.<init>(I)V
at java.util.concurrent.FutureTas...(FutureTask.java:122)
at java.util.concurrent.FutureTask.get(FutureTask.java:206)
Penyebab: Kesalahan ini disebabkan oleh versi lama commons-codec.jar yang disertakan dengan SQuirreL.
Resolusi: Untuk memperbaiki kesalahan ini, gunakan langkah-langkah berikut:
Keluar dari SQuirreL, lalu buka direktori di mana SQuirreL diinstal pada sistem Anda, mungkin
C:\Program Files\squirrel-sql-4.0.0\lib
. Dalam direktori SquirreL, di bawah direktorilib
, ganti commons-codec.jar yang ada dengan yang diunduh dari kluster HDInsight.Menghidupkan ulang SQuirrel. Kesalahan tidak boleh lagi terjadi saat menyambungkan ke Hive di HDInsight.
Koneksi diputus oleh HDInsight
Gejala: HDInsight secara tak terduga memutuskan koneksi saat mencoba mengunduh sejumlah besar data (misalnya beberapa GB) melalui JDBC/ODBC.
Penyebab: Batasan pada simpul Gateway menyebabkan kesalahan ini. Ketika mendapatkan data dari JDBC/ODBC, semua data perlu melewati simpul Gateway. Namun, gateway tidak dirancang untuk mengunduh data dalam jumlah besar, sehingga Gateway mungkin menutup koneksi jika tidak dapat menangani lalu lintas.
Resolusi: Hindari menggunakan driver JDBC/ODBC untuk mengunduh data dalam jumlah besar. Salin data langsung dari penyimpanan blob sebagai gantinya.
Langkah berikutnya
Setelah Anda mempelajari cara menggunakan JDBC untuk menggunakan Hive, gunakan tautan berikut untuk menjelajahi cara lain untuk menggunakan Azure HDInsight.
- Memvisualisasikan data Apache Hive dengan Microsoft Power BI di Azure HDInsight.
- Memvisualisasikan data Interactive Query Apache Hive dengan Power BI di Azure HDInsight.
- Menyambungkan Excel ke HDInsight dengan Microsoft Hive ODBC Driver.
- Menyambungkan Excel ke Apache Hadoop menggunakan Power Query.
- Gunakan Apache Hive dengan Azure HDInsight
- Menggunakan Apache Pig dengan HDInsight
- Menggunakan pekerjaan MapReduce dengan HDInsight