共用方式為


使用 Apache Sqoop 在 Apache Hadoop on HDInsight 與 Azure SQL Database 之間匯入及匯出資料

了解如何使用 Apache Sqoop,在 Azure HDInsight 中的 Apache Hadoop 叢集與 Azure SQL Database 或 Microsoft SQL Server 之間進行匯入和匯出。 本文件中的步驟直接從 Hadoop 叢集的前端節點使用 sqoop 命令。 您可以使用 SSH 連接至前端節點,並執行本文件中的命令。 本文是搭配使用 Apache Sqoop 與 HDInsight 中的 Hadoop的接續內容。

必要條件

設定

  1. 使用 ssh 命令來連線到您的叢集。 編輯以下命令並將 CLUSTERNAME 取代為您叢集的名稱,然後輸入命令:

    ssh sshuser@CLUSTERNAME-ssh.azurehdinsight.net
    
  2. 為了方便使用,請設定變數。 請將 PASSWORDMYSQLSERVERMYDATABASE 取代為相關值,然後輸入如下的命令:

    export PASSWORD='PASSWORD'
    export SQL_SERVER="MYSQLSERVER"
    export DATABASE="MYDATABASE"
    
    
    export SERVER_CONNECT="jdbc:sqlserver://$SQL_SERVER.database.windows.net:1433;user=sqluser;password=$PASSWORD"
    export SERVER_DB_CONNECT="jdbc:sqlserver://$SQL_SERVER.database.windows.net:1433;user=sqluser;password=$PASSWORD;database=$DABATASE"
    

Sqoop export

從 Hive 到 SQL。

  1. 若要確認 Sqoop 可以看到您的資料庫,請在開啟的 SSH 連線中輸入下方命令。 此命令會傳回資料庫清單。

    sqoop list-databases --connect $SERVER_CONNECT
    
  2. 輸入下列命令以查看指定資料庫的資料表清單:

    sqoop list-tables --connect $SERVER_DB_CONNECT
    
  3. 若要將資料從 Hive hivesampletable 資料表匯出至資料庫中的 mobiledata 資料表,請在開啟的 SSH 連線中輸入下方命令:

    sqoop export --connect $SERVER_DB_CONNECT \
    -table mobiledata \
    --hcatalog-table hivesampletable
    
  4. 若要確認是否已匯出資料,請從 SSH 連線使用下列查詢,以檢視匯出的資料:

    sqoop eval --connect $SERVER_DB_CONNECT \
    --query "SELECT COUNT(*) from dbo.mobiledata WITH (NOLOCK)"
    
    
    sqoop eval --connect $SERVER_DB_CONNECT \
    --query "SELECT TOP(10) * from dbo.mobiledata WITH (NOLOCK)"
    

Sqoop import

從 SQL 到 Azure 儲存體。

  1. 在開啟的 SSH 連線中輸入下方命令,以將資料從 SQL 中的 mobiledata 資料表匯入 HDInsight 上的 wasbs:///tutorials/usesqoop/importeddata 目錄。 資料中的欄位是以定位字元分隔,行是以換行字元終止。

    sqoop import --connect $SERVER_DB_CONNECT \
    --table mobiledata \
    --target-dir 'wasb:///tutorials/usesqoop/importeddata' \
    --fields-terminated-by '\t' \
    --lines-terminated-by '\n' -m 1
    
  2. 或者,您也可以指定 Hive 資料表:

    sqoop import --connect $SERVER_DB_CONNECT \
    --table mobiledata \
    --target-dir 'wasb:///tutorials/usesqoop/importeddata2' \
    --fields-terminated-by '\t' \
    --lines-terminated-by '\n' \
    --create-hive-table \
    --hive-table mobiledata_imported2 \
    --hive-import -m 1
    
  3. 匯入完成後,在開啟的 SSH 連線中輸入下列命令來列出新目錄中的資料:

    hadoop fs -tail /tutorials/usesqoop/importeddata/part-m-00000
    
  4. 使用 beeline 來確認已在 Hive 中建立資料表。

    1. 連線

      beeline -u 'jdbc:hive2://headnodehost:10001/;transportMode=http'
      
    2. 一次執行下方一個查詢,並檢閱輸出:

      show tables;
      describe mobiledata_imported2;
      SELECT COUNT(*) FROM mobiledata_imported2;
      SELECT * FROM mobiledata_imported2 LIMIT 10;
      
    3. 使用 !exit 結束 beeline。

限制

  • 大量匯出 - 使用以 Linux 為基礎的 HDInsight 時,用來將資料匯出至 SQL 的 Sqoop 連接器不支援大量插入。

  • 批次處理 - 使用 Linux 型 HDInsight,執行插入時若使用 -batch 參數,Sqoop 將會執行多個插入,而不是批次處理插入作業。

重要考量

下一步

現在,您已了解如何使用 Sqoop。 若要深入了解,請參閱: