共用方式為


使用 Curl 在 HDInsight 中執行 Apache Sqoop 作業

了解如何使用 Curl 在 HDInsight 中的 Apache Hadoop 叢集上執行 Apache Sqoop 作業。 本文示範如何使用 Curl 從 Azure 儲存體匯出資料,並將其匯入至 SQL Server 資料庫。 本文是搭配使用 Apache Sqoop 與 HDInsight 中的 Hadoop的接續內容。

本文件使用 Curl 示範如何使用未經處理的 HTTP 要求來與 HDInsight 互動,以便執行、監視和擷取 Sqoop 作業的結果。 要想執行這些作業,就要使用 HDInsight 叢集所提供的 WebHCat REST API (先前稱為 Templeton)。

必要條件

使用 Curl 提交 Apache Sqoop 作業

使用 Curl,搭配 Apache Sqoop 作業將資料從 Azure 儲存體匯出至 SQL Server。

注意

在使用 Curl 或與 WebHCat 進行任何其他 REST 通訊時,您必須提供 HDInsight 叢集系統管理員的使用者名稱和密碼來驗證要求。 您也必須在用來將要求傳送至伺服器的統一資源識別項 (URI) 中使用叢集名稱。

針對本節中的命令,請將 USERNAME取代為要向叢集驗證的使用者,並將 PASSWORD 取代為使用者帳戶的密碼。 將 CLUSTERNAME 取代為您的叢集名稱。

透過 基本驗證來保護 REST API 的安全。 您應該一律使用安全 HTTP (HTTPS) 提出要求,確保認證安全地傳送至伺服器。

  1. 為了方便使用,請設定下列變數。 此範例是以 Windows 環境為基礎,請根據您的環境需求進行修改。

    set CLUSTERNAME=
    set USERNAME=admin
    set PASSWORD=
    set SQLDATABASESERVERNAME=
    set SQLDATABASENAME=
    set SQLPASSWORD=
    set SQLUSER=sqluser
    
  2. 從命令列中,使用下列命令來確認您可以連線到 HDInsight 叢集:

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

    您應該會收到如下所示的回應:

    {"status":"ok","version":"v1"}
    
  3. 使用以下命令提交 Sqoop 作業:

    curl -u %USERNAME%:%PASSWORD% -d user.name=%USERNAME% -d command="export --connect jdbc:sqlserver://%SQLDATABASESERVERNAME%.database.windows.net;user=%SQLUSER%@%SQLDATABASESERVERNAME%;password=%PASSWORD%;database=%SQLDATABASENAME% --table log4jlogs --export-dir /example/data/sample.log --input-fields-terminated-by \0x20 -m 1" -d statusdir="wasb:///example/data/sqoop/curl" https://%CLUSTERNAME%.azurehdinsight.net/templeton/v1/sqoop
    

    此命令中使用的參數如下:

    • -d - 因為未使用 -G,所以要求預設為使用 POST 方法。 -d 可指定與要求一起傳送的資料值。

      • user.name - 執行命令的使用者。

      • 命令 - 要執行的 Sqoop 命令。

      • statusdir - 要寫入此工作狀態的目錄。

      此命令將會傳回可用來檢查工作狀態的工作識別碼。

      {"id":"job_1415651640909_0026"}
      
  4. 若要檢查工作的狀態,請使用下列命令。 將 JOBID 取代為上一個步驟中所傳回的值。 例如,如果傳回值為 {"id":"job_1415651640909_0026"},則 JOBID 將是 job_1415651640909_0026。 視需要修改 jq 的位置。

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

    如果工作已完成,則狀態會是 [ 成功]。

    注意

    此 Curl 要求會傳回含有工作資訊的 JavaScript Object Notation (JSON) 文件;jq 可用來僅擷取狀態值。

  5. 工作狀態變更為 [成功] 之後,即可從 Azure Blob 儲存體擷取工作結果。 與查詢一起傳遞的 statusdir 參數包含輸出檔案的位置;在此案例中為 wasb:///example/data/sqoop/curl。 此位址會將作業輸出儲存在 HDInsight 叢集所使用預設儲存體容器的 example/data/sqoop/curl 目錄中。

    您可以使用 Azure 入口網站存取 stderr 和 stdout Blob。

  6. 若要確認是否已匯出資料,請從 SQL 用戶端使用下列查詢,以檢視匯出的資料:

    SELECT COUNT(*) FROM [dbo].[log4jlogs] WITH (NOLOCK);
    SELECT TOP(25) * FROM [dbo].[log4jlogs] WITH (NOLOCK);
    

限制

  • 大量匯出 - 使用 Linux 型 HDInsight,用來將資料匯出至 Microsoft SQL Server 或 Azure SQL Database 的 Sqoop 連接器目前不支援大量插入。
  • 批次處理 - 使用 Linux 型 HDInsight,執行插入時若使用 -batch 參數,Sqoop 將會執行多個插入,而不是批次處理插入作業。

摘要

如這份文件所示,您可以使用原始 HTTP 要求來執行、監視和檢視 HDInsight 叢集上的 Sqoop 作業結果。

如需本文中使用的 REST 介面的詳細資訊,請參閱 Apache Sqoop REST API 指南

下一步

在 HDInsight 將 Apache Sqoop 與 Apache Hadoop 搭配使用

如需涉及 curl 的其他 HDInsight 文章: