使用 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的接續內容。
必要條件
SSH 用戶端。 如需詳細資訊,請參閱使用 SSH 連線至 HDInsight (Apache Hadoop)。
熟悉 Sqoop。 如需詳細資訊,請參閱 Sqoop 使用者指南。
設定
使用 ssh 命令來連線到您的叢集。 編輯以下命令並將 CLUSTERNAME 取代為您叢集的名稱,然後輸入命令:
ssh sshuser@CLUSTERNAME-ssh.azurehdinsight.net
為了方便使用,請設定變數。 請將
PASSWORD
、MYSQLSERVER
和MYDATABASE
取代為相關值,然後輸入如下的命令: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。
若要確認 Sqoop 可以看到您的資料庫,請在開啟的 SSH 連線中輸入下方命令。 此命令會傳回資料庫清單。
sqoop list-databases --connect $SERVER_CONNECT
輸入下列命令以查看指定資料庫的資料表清單:
sqoop list-tables --connect $SERVER_DB_CONNECT
若要將資料從 Hive
hivesampletable
資料表匯出至資料庫中的mobiledata
資料表,請在開啟的 SSH 連線中輸入下方命令:sqoop export --connect $SERVER_DB_CONNECT \ -table mobiledata \ --hcatalog-table hivesampletable
若要確認是否已匯出資料,請從 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 儲存體。
在開啟的 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
或者,您也可以指定 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
匯入完成後,在開啟的 SSH 連線中輸入下列命令來列出新目錄中的資料:
hadoop fs -tail /tutorials/usesqoop/importeddata/part-m-00000
使用 beeline 來確認已在 Hive 中建立資料表。
連線
beeline -u 'jdbc:hive2://headnodehost:10001/;transportMode=http'
一次執行下方一個查詢,並檢閱輸出:
show tables; describe mobiledata_imported2; SELECT COUNT(*) FROM mobiledata_imported2; SELECT * FROM mobiledata_imported2 LIMIT 10;
使用
!exit
結束 beeline。
限制
大量匯出 - 使用以 Linux 為基礎的 HDInsight 時,用來將資料匯出至 SQL 的 Sqoop 連接器不支援大量插入。
批次處理 - 使用 Linux 型 HDInsight,執行插入時若使用
-batch
參數,Sqoop 將會執行多個插入,而不是批次處理插入作業。
重要考量
HDInsight 與 SQL Server 必須位於相同的 Azure 虛擬網路。
如需範例,請參閱 如何將 HDInsight 連線到您的內部部署網路 檔。
如需搭配 Azure 虛擬網絡 使用 HDInsight 的詳細資訊,請參閱如何使用 Azure 虛擬網絡 檔擴充 HDInsight。 如需 Azure 虛擬網路的詳細資訊,請參閱虛擬網路概觀文件。
SQL Server 也必須設定為允許 SQL 驗證。 如需詳細資訊,請參閱選擇驗證模式文件。
您可能必須設定 SQL Server 以接受遠端連線。
下一步
現在,您已了解如何使用 Sqoop。 若要深入了解,請參閱:
- 搭配使用 Apache Oozie 與 HDInsight:在 Oozie 工作流程中使用 Sqoop 動作。
- 使用 HDInsight 分析航班延誤資料:使用 Interactive Query 分析航班誤點資料,然後使用 Sqoop 將資料匯出至 Azure 中的資料庫。
- 將資料上傳至 HDInsight:尋找可將資料上傳至 HDInsight/Azure Blob 儲存體的其他方法。