共用方式為


使用 Apache Sqoop 在 HDInsight 和 Azure 上的 Apache Hadoop 之間匯入和導出數據 SQL 資料庫

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

必要條件

設定

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

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

    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 匯出

從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 匯入

從 SQL 到 Azure 記憶體。

  1. 在開啟的 SSH 連線中輸入下列命令,以將數據從 mobiledata SQL 中的數據表匯入 wasbs:///tutorials/usesqoop/importeddata HDInsight 上的目錄。 數據中的欄位會以製表符分隔,而行會以新行字元結尾。

    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。 若要深入了解,請參閱: