使用 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的接續內容。
必要條件
SSH 用戶端。 如需詳細資訊,請參閱使用 SSH 連線至 HDInsight (Apache Hadoop)。
熟悉 Sqoop。 如需詳細資訊,請參閱 Sqoop 使用者指南。
設定
使用 ssh 命令來連線到您的叢集。 編輯以下命令並將 CLUSTERNAME 取代為您叢集的名稱,然後輸入命令:
ssh sshuser@CLUSTERNAME-ssh.azurehdinsight.net
為了方便使用,請設定變數。 將、
MYSQLSERVER
與MYDATABASE
取代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。
若要確認 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 匯入
從 SQL 到 Azure 記憶體。
在開啟的 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
或者,您也可以指定 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 接受遠端連線。 如需詳細資訊,請參閱 如何針對連線到 SQL Server 資料庫引擎 檔進行疑難解答。
下一步
現在您已瞭解如何使用 Sqoop。 若要深入了解,請參閱:
- 搭配 HDInsight 使用 Apache Oozie:在 Oozie 工作流程中使用 Sqoop 動作。
- 使用 HDInsight 分析航班延誤數據:使用互動式查詢分析航班延誤數據,然後使用 Sqoop 將數據匯出至 Azure 中的資料庫。
- 將數據上傳至 HDInsight:尋找將數據上傳至 HDInsight/Azure Blob 記憶體的其他方法。
意見反應
https://aka.ms/ContentUserFeedback。
即將登場:在 2024 年,我們將逐步淘汰 GitHub 問題作為內容的意見反應機制,並將它取代為新的意見反應系統。 如需詳細資訊,請參閱:提交並檢視相關的意見反應