Bagikan melalui


Mengkueri Apache Hive 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 menghubungkan secara terprogram, dan dari klien SQuirreL SQL.

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.

    Tab Driver di sebelah kiri jendela.

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

    Ikon driver aplikasi SQuirreL SQL.

  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

    tambahkan dialog driver dengan parameter.

    Pilih OK untuk menyimpan pengaturan ini.

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

    'SQuirreL SQL tambahkan dialog alias baru'.

  7. Gunakan nilai berikut untuk dialog Tambahkan Alias:

    Properti Nilai
    Nama Hive di HDInsight
    Pengemudi 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 login untuk kluster HDInsight Anda. Defaultnya adalah admin.
    Kata sandi Kata sandi untuk akun masuk kluster.

    tambahkan dialog alias dengan parameter.

    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.

    dialog koneksi dengan parameter.

  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;
    

    dialog kueri sql, termasuk hasil.

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. Jejak tumpukan 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 Anda 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.