Menjalankan pekerjaan MapReduce dengan Apache Hadoop di HDInsight menggunakan REST

Pelajari cara menggunakan Apache Hive WebHCat REST API untuk menjalankan pekerjaan MapReduce di Apache Hadoop di kluster HDInsight. Curl digunakan untuk menunjukkan bagaimana Anda dapat berinteraksi dengan HDInsight dengan menggunakan permintaan HTTP raw untuk menjalankan pekerjaan MapReduce.

Catatan

Jika Anda sudah terbiasa menggunakan server Hadoop berbasis Linux, tetapi Anda baru mengenal HDInsight, lihat Apa yang perlu Anda ketahui tentang Apache Hadoop berbasis Linux pada dokumen HDInsight.

Prasyarat

Baik:

  • Windows PowerShell atau,
  • Curl dengan jq

Menjalankan pekerjaan MapReduce

Catatan

Saat Anda menggunakan cURL atau komunikasi REST lainnya dengan WebHCat, Anda harus mengautentikasi permintaan dengan memberikan administrator kluster Microsoft Azure HDInsight nama pengguna dan kata sandi. Anda harus menggunakan nama kluster sebagai bagian dari URI yang digunakan untuk mengirim permintaan ke server.

REST API diamankan dengan menggunakan autentikasi akses dasar. Anda harus selalu membuat permintaan dengan menggunakan HTTPS untuk memastikan bahwa kredensial Anda dikirim ke server dengan aman.

Curl

  1. Untuk kemudahan penggunaan, atur variabel di bawah ini. Contoh ini didasarkan pada lingkungan Windows, lakukan revisi sesuai kebutuhan untuk lingkungan Anda.

    set CLUSTERNAME=
    set PASSWORD=
    
  2. Dari baris perintah, gunakan perintah berikut untuk memverifikasi bahwa Anda dapat tersambung ke kluster HDInsight Anda:

    curl -u admin:%PASSWORD% -G https://%CLUSTERNAME%.azurehdinsight.net/templeton/v1/status
    

    Parameter yang digunakan dalam perintah ini adalah sebagai berikut:

    • -u: Menunjukkan nama pengguna dan kata sandi yang digunakan untuk mengautentikasi permintaan
    • -G: Menunjukkan bahwa operasi ini adalah permintaan GET

    Awal URI, https://CLUSTERNAME.azurehdinsight.net/templeton/v1, sama untuk semua permintaan.

    Anda menerima output yang mirip dengan JSON berikut:

    {"version":"v1","status":"ok"}
    
  3. Untuk mengirimkan tugas MapReduce, gunakan perintah berikut. Ubah jalur ke jq sesuai kebutuhan.

    curl -u admin:%PASSWORD% -d user.name=admin ^
    -d jar=/example/jars/hadoop-mapreduce-examples.jar ^
    -d class=wordcount -d arg=/example/data/gutenberg/davinci.txt -d arg=/example/data/output ^
    https://%CLUSTERNAME%.azurehdinsight.net/templeton/v1/mapreduce/jar | ^
    C:\HDI\jq-win64.exe .id
    

    Akhir URI (/mapreduce/jar) memberi tahu WebHCat bahwa permintaan ini memulai pekerjaan MapReduce dari kelas dalam file jar. Parameter yang digunakan dalam perintah ini adalah sebagai berikut:

    • -d: -G tidak digunakan, jadi permintaan default ke metode POST. -d menentukan nilai data yang dikirim dengan permintaan.
      • user.name: Pengguna yang menjalankan perintah
      • jar: Lokasi file jar yang berisi kelas yang akan dijalankan
      • kelas: Kelas yang berisi logika MapReduce
      • arg: Argumen yang akan diteruskan ke pekerjaan MapReduce. Dalam hal ini, file teks input dan direktori yang digunakan untuk output

    Perintah ini harus mengembalikan ID pekerjaan yang dapat digunakan untuk memeriksa status pekerjaan: job_1415651640909_0026.

  4. Untuk memeriksa status pekerjaan, gunakan perintah berikut. Ganti nilai dengan JOBID nilai aktual yang dikembalikan di langkah sebelumnya. Merevisi lokasi jq sesuai kebutuhan.

    set JOBID=job_1415651640909_0026
    
    curl -G -u admin:%PASSWORD% -d user.name=admin https://%CLUSTERNAME%.azurehdinsight.net/templeton/v1/jobs/%JOBID% | ^
    C:\HDI\jq-win64.exe .status.state
    

PowerShell

  1. Untuk kemudahan penggunaan, atur variabel di bawah ini. Ganti CLUSTERNAME dengan nama kluster Anda yang sebenarnya. Jalankan perintah dan masukkan kata sandi masuk kluster ketika diminta.

    $clusterName="CLUSTERNAME"
    $creds = Get-Credential -UserName admin -Message "Enter the cluster login password"
    
  2. Gunakan perintah berikut untuk memverifikasi bahwa Anda dapat terhubung ke kluster HDInsight Anda:

    $resp = Invoke-WebRequest -Uri "https://$clustername.azurehdinsight.net/templeton/v1/status" `
        -Credential $creds `
        -UseBasicParsing
    $resp.Content
    

    Anda menerima output yang mirip dengan JSON berikut:

    {"version":"v1","status":"ok"}
    
  3. Untuk mengirimkan tugas MapReduce, gunakan perintah berikut:

    $reqParams = @{}
    $reqParams."user.name" = "admin"
    $reqParams.jar = "/example/jars/hadoop-mapreduce-examples.jar"
    $reqParams.class = "wordcount"
    $reqParams.arg = @()
    $reqParams.arg += "/example/data/gutenberg/davinci.txt"
    $reqparams.arg += "/example/data/output"
    $resp = Invoke-WebRequest -Uri "https://$clusterName.azurehdinsight.net/templeton/v1/mapreduce/jar" `
       -Credential $creds `
       -Body $reqParams `
       -Method POST `
       -UseBasicParsing
    $jobID = (ConvertFrom-Json $resp.Content).id
    $jobID
    

    Akhir URI (/mapreduce/jar) memberi tahu WebHCat bahwa permintaan ini memulai pekerjaan MapReduce dari kelas dalam file jar. Parameter yang digunakan dalam perintah ini adalah sebagai berikut:

    • user.name: Pengguna yang menjalankan perintah
    • jar: Lokasi file jar yang berisi kelas yang akan dijalankan
    • kelas: Kelas yang berisi logika MapReduce
    • arg: Argumen yang akan diteruskan ke pekerjaan MapReduce. Dalam hal ini, file teks input dan direktori yang digunakan untuk output

    Perintah ini harus mengembalikan ID pekerjaan yang dapat digunakan untuk memeriksa status pekerjaan: job_1415651640909_0026.

  4. Untuk memeriksa status pekerjaan, gunakan perintah berikut:

    $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
    

Kedua metode

  1. Jika pekerjaan selesai, status kembali adalah SUCCEEDED .

  2. Saat status pekerjaan berubah menjadi SUCCEEDED, Anda dapat mengambil hasil pekerjaan dari penyimpanan Azure Blob. Parameter statusdir yang diteruskan dengan kueri berisi lokasi file output. Dalam contoh ini, lokasinya adalah /example/curl. Alamat ini menyimpan keluaran pekerjaan dalam penyimpanan default kluster di /example/curl.

Anda dapat mencantumkan dan mengunduh file-file ini menggunakan Azure CLI. Untuk informasi selengkapnya tentang menggunakan Azure CLI untuk bekerja dengan penyimpanan Azure Blob, lihat Mulai cepat: Membuat, mengunduh, dan mencantumkan blob dengan Azure CLI.

Langkah berikutnya

Untuk informasi tentang cara lain Anda dapat bekerja dengan Hadoop di Microsoft Azure HDInsight:

Untuk informasi selengkapnya tentang antarmuka REST yang digunakan dalam artikel ini, lihat Referensi WebHCat.