了解如何使用 Apache Hive WebHCat REST API 在「HDInsight 上的 Apache Hadoop」叢集上執行 MapReduce 作業。 Curl 用來示範如何使用原始 HTTP 要求與 HDInsight 互動,以執行 MapReduce 工作。
注意
如果您已熟悉 Linux 型 Hadoop 伺服器的用法,但不熟悉 HDInsight,請參閱 Linux 型 HDInsight 上的 Apache Hadoop 須知文件。
必要條件
- HDInsight 上的 Apache Hadoop 叢集。 請參閱使用 Azure 入口網站建立 Apache Hadoop 叢集。
任一:
執行 MapReduce 作業
注意
在使用 Curl 或與 WebHCat 進行任何其他 REST 通訊時,您必須提供 HDInsight 叢集管理員使用者名稱和密碼來驗證要求。 您必須使用叢集名稱,作為用來將要求傳送至伺服器之 URI 的一部分。
使用 基本存取驗證來保護 REST API 的安全。 您應該一律使用 HTTPS 提出要求,確保認證安全地傳送至伺服器。
Curl
為了方便使用,請設定下列變數。 此範例是以 Windows 環境為基礎,請根據您的環境需求進行修改。
set CLUSTERNAME= set PASSWORD=從命令列中,使用下列命令來確認您可以連線到 HDInsight 叢集:
curl -u admin:%PASSWORD% -G https://%CLUSTERNAME%.azurehdinsight.net/templeton/v1/status此命令中使用的參數如下:
- -u:指出用來驗證要求的使用者名稱和密碼
- -G:指出此作業是 GET 要求
URI 的開頭 (
https://CLUSTERNAME.azurehdinsight.net/templeton/v1) 適用於所有要求。您應該會收到類似以下 JSON 的回應:
{"version":"v1","status":"ok"}若要提交 MapReduce 工作,請使用下列命令。 視需要修改 jq 的路徑。
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 .idURI 結尾 (/mapreduce/jar) 會告訴 WebHCat,此要求會從 jar 檔案中的類別啟動 MapReduce 作業。 此命令中使用的參數如下:
- -d:未使用
-G,因此要求會依預設使用 POST 方法。-d可指定與要求一起傳送的資料值。- user.name:執行命令的使用者
- jar:包含要執行之類別的 jar 檔案位置
- class:包含 MapReduce 邏輯的類別
- arg︰要傳遞到 MapReduce 作業的引數。 在此案例中,是用於輸出的輸入文字檔和目錄
此命令應該會傳回可用來檢查工作狀態的工作識別碼:
job_1415651640909_0026。- -d:未使用
若要檢查工作的狀態,請使用下列命令。 將
JOBID的值取代為上一個步驟中所傳回的實際值。 視需要修改 jq 的位置。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
為了方便使用,請設定下列變數。 將
CLUSTERNAME取代為實際的叢集名稱。 執行命令,並在出現提示時輸入叢集登入密碼。$clusterName="CLUSTERNAME" $creds = Get-Credential -UserName admin -Message "Enter the cluster login password"使用下列命令來確認您可以連線到 HDInsight 叢集:
$resp = Invoke-WebRequest -Uri "https://$clustername.azurehdinsight.net/templeton/v1/status" ` -Credential $creds ` -UseBasicParsing $resp.Content您應該會收到類似以下 JSON 的回應:
{"version":"v1","status":"ok"}若要提交 MapReduce 工作,請使用下列命令:
$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 $jobIDURI 結尾 (/mapreduce/jar) 會告訴 WebHCat,此要求會從 jar 檔案中的類別啟動 MapReduce 作業。 此命令中使用的參數如下:
- user.name:執行命令的使用者
- jar:包含要執行之類別的 jar 檔案位置
- class:包含 MapReduce 邏輯的類別
- arg︰要傳遞到 MapReduce 作業的引數。 在此案例中,是用於輸出的輸入文字檔和目錄
此命令應該會傳回可用來檢查工作狀態的工作識別碼:
job_1415651640909_0026。若要檢查作業的狀態,請使用下列命令:
$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
兩種方法
如果作業已完成,傳回的狀態會是
SUCCEEDED。當作業狀態變更為
SUCCEEDED之後,您就可以從 Azure Blob 儲存體擷取作業結果。 隨查詢一起傳遞的statusdir參數包含輸出檔案的位置。 在此範例中,位置是/example/curl。 此位址會將作業的輸出儲存在叢集預設儲存體的/example/curl中。
您可以使用 Azure CLI 列出並下載這些檔案。 如需使用 Azure CLI 搭配 Azure Blob 儲存體的詳細資訊,請參閱快速入門:使用 Azure CLI 建立、下載及列出 Blob。
下一步
如需您可以在 HDInsight 上使用 Hadoop 之其他方式的詳細資訊:
如需本文中使用的 REST 介面的詳細資訊,請參閱 WebHCat 參照。