Menjalankan kueri Apache Hive dengan Apache Hadoop di HDInsight menggunakan REST
Pelajari cara menggunakan WebHCat REST API untuk menjalankan kueri Apache Hive dengan Apache Hadoop pada kluster Azure HDInsight.
Prasyarat
Kluster Apache Hadoop di Microsoft Azure HDInsight. Lihat Mulai menggunakan Microsoft Azure HDInsight di Linux.
Klien REST. Dokumen ini menggunakan Invoke-WebRequest pada Windows PowerShell dan Curl di Bash.
Jika Anda menggunakan Bash, Anda juga memerlukan jq, prosesor JSON baris perintah. Lihat https://stedolan.github.io/jq/.
URI dasar untuk Rest API
Base Uniform Resource Identifier (URI) untuk REST API pada HDInsight adalah https://CLUSTERNAME.azurehdinsight.net/api/v1/clusters/CLUSTERNAME
, dengan CLUSTERNAME
sebagai nama kluster Anda. Nama klaster dalam URI bersifat peka huruf besar/kecil. Meski nama klaster dalam bagian nama domain yang sepenuhnya memenuhi syarat (FQDN) dari URI (CLUSTERNAME.azurehdinsight.net
) tidak peka huruf besar/kecil, kejadian lain dalam URI peka huruf besar/kecil.
Autentikasi
Saat menggunakan cURL atau komunikasi REST lainnya dengan WebHCat, Anda harus mengautentikasi permintaan dengan memberikan nama pengguna dan kata sandi untuk administrator kluster Microsoft Azure HDInsight. REST API diamankan melalui autentikasi dasar. Untuk membantu memastikan bahwa kredensial Anda dikirim dengan aman ke server, Anda harus membuat permintaan menggunakan HTTP Aman (HTTPS).
Penyiapan (Mempertahankan kredensial)
Pertahankan kredensial Anda untuk menghindari memasukkannya kembali untuk setiap contoh. Nama klaster akan dipertahankan dalam langkah terpisah.
J. Bash
Edit skrip di bawah ini dengan mengganti PASSWORD
dengan sandi Anda yang sebenarnya. Kemudian masukkan perintah.
export PASSWORD='PASSWORD'
B. PowerShell Jalankan kode di bawah ini dan masukkan kredensial Anda di jendela pop-up:
$creds = Get-Credential -UserName "admin" -Message "Enter the HDInsight login"
Identifikasi nama klaster dengan penggunaan huruf besar/kecil yang benar
Penulisan sebenarnya dari nama kluster mungkin berbeda dari yang Anda duga, tergantung pada cara kluster dibuat. Langkah-langkah di sini akan menunjukkan penggunaan huruf besar/kecil aktual, kemudian menyimpannya dalam variabel untuk semua contoh nanti.
Edit skrip di bawah ini untuk mengganti CLUSTERNAME
dengan nama klaster Anda. Kemudian masukkan perintah. (Nama klaster untuk FQDN tidak peka huruf besar/kecil.)
export CLUSTER_NAME=$(curl -u admin:$PASSWORD -sS -G "https://CLUSTERNAME.azurehdinsight.net/api/v1/clusters" | jq -r '.items[].Clusters.cluster_name')
echo $CLUSTER_NAME
# Identify properly cased cluster name
$resp = Invoke-WebRequest -Uri "https://CLUSTERNAME.azurehdinsight.net/api/v1/clusters" `
-Credential $creds -UseBasicParsing
$clusterName = (ConvertFrom-Json $resp.Content).items.Clusters.cluster_name;
# Show cluster name
$clusterName
Menjalankan kueri Apache Hive
Untuk memverifikasi bahwa Anda dapat tersambung ke kluster HDInsight, gunakan salah satu perintah berikut:
curl -u admin:$PASSWORD -G https://$CLUSTER_NAME.azurehdinsight.net/templeton/v1/status
$resp = Invoke-WebRequest -Uri "https://$clusterName.azurehdinsight.net/templeton/v1/status" ` -Credential $creds ` -UseBasicParsing $resp.Content
Anda menerima output yang mirip dengan teks berikut:
{"status":"ok","version":"v1"}
Parameter yang digunakan dalam perintah ini adalah sebagai berikut:
-u
- Nama pengguna dan kata sandi yang digunakan untuk mengautentikasi permintaan.-G
- Menunjukkan bahwa permintaan ini adalah operasi GET.
Awal URL,
https://$CLUSTERNAME.azurehdinsight.net/templeton/v1
, sama untuk semua permintaan. Jalurnya,/status
, menunjukkan bahwa permintaan akan mengembalikan status WebHCat (juga dikenal sebagai Templeton) untuk server. Anda juga dapat meminta versi Hive menggunakan perintah berikut:curl -u admin:$PASSWORD -G https://$CLUSTER_NAME.azurehdinsight.net/templeton/v1/version/hive
$resp = Invoke-WebRequest -Uri "https://$clusterName.azurehdinsight.net/templeton/v1/version/hive" ` -Credential $creds ` -UseBasicParsing $resp.Content
Permintaan ini mengembalikan respons yang mirip dengan teks berikut:
{"module":"hive","version":"1.2.1000.2.6.5.3008-11"}
Gunakan hal berikut ini untuk membuat tabel bernama log4jLogs:
JOB_ID=$(curl -s -u admin:$PASSWORD -d user.name=admin -d execute="DROP+TABLE+log4jLogs;CREATE+EXTERNAL+TABLE+log4jLogs(t1+string,t2+string,t3+string,t4+string,t5+string,t6+string,t7+string)+ROW+FORMAT+DELIMITED+FIELDS+TERMINATED+BY+' '+STORED+AS+TEXTFILE+LOCATION+'/example/data/';SELECT+t4+AS+sev,COUNT(*)+AS+count+FROM+log4jLogs+WHERE+t4+=+'[ERROR]'+AND+INPUT__FILE__NAME+LIKE+'%25.log'+GROUP+BY+t4;" -d statusdir="/example/rest" https://$CLUSTER_NAME.azurehdinsight.net/templeton/v1/hive | jq -r .id) echo $JOB_ID
$reqParams = @{"user.name"="admin";"execute"="DROP TABLE log4jLogs;CREATE EXTERNAL TABLE log4jLogs(t1 string, t2 string, t3 string, t4 string, t5 string, t6 string, t7 string) ROW FORMAT DELIMITED BY ' ' STORED AS TEXTFILE LOCATION '/example/data/;SELECT t4 AS sev,COUNT(*) AS count FROM log4jLogs WHERE t4 = '[ERROR]' GROUP BY t4;";"statusdir"="/example/rest"} $resp = Invoke-WebRequest -Uri "https://$clusterName.azurehdinsight.net/templeton/v1/hive" ` -Credential $creds ` -Body $reqParams ` -Method POST ` -UseBasicParsing $jobID = (ConvertFrom-Json $resp.Content).id $jobID
Permintaan ini menggunakan metode POST yang mengirim data sebagai bagian dari permintaan ke REST API. Nilai data berikut dikirim dengan permintaan:
user.name
- Pengguna yang menjalankan perintah.execute
- Pernyataan HiveQL untuk dieksekusi.statusdir
- Direktori tempat status untuk pekerjaan ini ditulis.
Pernyataan-pernyataan ini melaksanakan tindakan berikut:
DROP TABLE
- Jika tabel sudah ada, itu dihapus.CREATE EXTERNAL TABLE
: Membuat tabel 'eksternal' baru di Hive. Tabel eksternal hanya menyimpan definisi tabel di Hive. Data tetap di lokasi asli.Catatan
Tabel eksternal akan digunakan saat Anda mengharapkan data yang mendasarinya untuk diperbarui oleh sumber eksternal. Misalnya, proses pengunggahan data otomatis atau operasi MapReduce lainnya.
Menjatuhkan tabel eksternal tidak menghapus data, hanya definisi tabel.
ROW FORMAT
- Cara data diformat. Dalam hal ini, bidang di setiap log dipisahkan oleh spasi.STORED AS TEXTFILE LOCATION
- Tempat data disimpan (contoh/direktori data), dan data disimpan sebagai teks.SELECT
- Memilih jumlah semua baris tempat kolom t4 berisi nilai [KESALAHAN]. Pernyataan ini mengembalikan nilai 3 karena ada tiga baris yang berisi nilai ini.Catatan
Perhatikan bahwa spasi antara pernyataan HiveQL digantikan oleh karakter
+
saat digunakan dengan Curl. Nilai yang dikutip yang berisi spasi, seperti pemisah, tidak boleh digantikan oleh+
.Perintah ini mengembalikan ID pekerjaan yang dapat digunakan untuk memeriksa status pekerjaan.
Untuk memeriksa status pekerjaan, gunakan perintah berikut:
curl -u admin:$PASSWORD -d user.name=admin -G https://$CLUSTER_NAME.azurehdinsight.net/templeton/v1/jobs/$jobid | jq .status.state
$reqParams=@{"user.name"="admin"} $resp = Invoke-WebRequest -Uri "https://$clusterName.azurehdinsight.net/templeton/v1/jobs/$jobID" ` -Credential $creds ` -Body $reqParams ` -UseBasicParsing # ConvertFrom-JSON can't handle duplicate names with different case # So change one to prevent the error $fixDup=$resp.Content.Replace("jobID","job_ID") (ConvertFrom-Json $fixDup).status.state
Jika pekerjaan telah selesai, statusnya adalah BERHASIL.
Setelah status pekerjaan berubah menjadi BERHASIL, Anda dapat mengambil hasil pekerjaan dari penyimpanan Azure Blob. Parameter
statusdir
yang diteruskan dengan kueri berisi lokasi file output; dalam hal ini,/example/rest
. Alamat ini menyimpan output di direktoriexample/curl
dalam penyimpanan default kluster.Anda dapat mencantumkan dan mengunduh file-file ini menggunakan Azure CLI. Untuk informasi selengkapnya, lihat Menggunakan Azure CLI dengan Azure Storage.
Langkah berikutnya
Informasi tentang cara lain untuk bekerja dengan Hadoop di Microsoft Azure HDInsight:
- Menggunakan Apache Hive dengan Apache Hadoop di Microsoft Azure HDInsight
- Menggunakan MapReduce dengan Apache Hadoop di Microsoft Azure HDInsight
Untuk informasi selengkapnya tentang REST API yang digunakan dalam dokumen ini, lihat dokumen referensi WebHCat.