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

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.

  1. Buat direktori untuk memuat file tertentu yang akan disalin dari kluster Anda.

  2. Dalam skrip berikut, ganti sshuser dengan nama akun pengguna SSH untuk kluster. Ganti CLUSTERNAME 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} .
    
  3. Memulai aplikasi SQuirreL SQL. Dari sebelah kiri jendela, pilih Driver.

    Drivers tab on the left of the window.

  4. Dari ikon di bagian atas dialog Driver, pilih ikon + untuk membuat driver.

    SQuirreL SQL application drivers icon.

  5. 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

    add driver dialog with parameters.

    Pilih OK untuk menyimpan pengaturan ini.

  6. Di sebelah kiri jendela SQuirreL SQL, pilih Alias. Kemudian, pilih ikon + untuk membuat alias koneksi.

    `SQuirreL SQL add new alias dialog`.

  7. 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.

    add alias dialog with parameters.

    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.

  8. Dari menu dropdown Hubungkan ke di bagian atas SQuirreL SQL, pilih Hive di HDInsight. Saat diminta, pilih Sambungkan.

    connection dialog with parameters.

  9. 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;
    

    sql query dialog, including results.

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:

  1. 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 direktori lib, ganti commons-codec.jar yang ada dengan yang diunduh dari kluster HDInsight.

  2. 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.