Apache Sqoop 是 Hadoop 生態系統中用於在關係型數據庫(如 MySQL)與 Hadoop(HDFS、Hive、HBase)之間高效傳輸數據的工具。本文將通過一個完整的實例,詳細演示如何使用 Sqoop 將 MySQL 表數據直接導入 Hive 表中,並解析關鍵參數與常見日誌輸出。
toplists 庫下的 award 表)以下命令將 MySQL 的 award 表全量導入 Hive,並在 Hive 中自動建立同名表 mysql_award:
sqoop import \
--connect jdbc:mysql://Hadoop48/toplists \
--username root \
--table award \
--hive-import \
--create-hive-table \
--hive-table mysql_award \
--fields-terminated-by '\t' \
--lines-terminated-by '\n' \
--hive-overwrite \
--direct \
-m 1 \
--verbose
| 參數 | 作用 |
|---|---|
--hive-import | 指定將數據導入 Hive |
--create-hive-table | 若 Hive 表不存在則自動建立 |
--hive-table | 指定 Hive 表名(含庫前綴可選) |
--fields-terminated-by | 字段分隔符,此處為 Tab(\t) |
--lines-terminated-by | 行分隔符,此處為換行(\n) |
--hive-overwrite | 覆蓋 Hive 表中現有數據 |
--direct | 使用 MySQL 原生 mysqldump 加速導入 |
-m 1 | 指定 MapReduce 任務並行度為 1(適合小表) |
Sqoop 會根據表結構生成 Java 類並編譯打包:
INFO tool.CodeGenTool: Beginning code generation
INFO orm.CompilationManager: Writing jar file: /tmp/sqoop-.../award.jar
因加了 --direct,啟用 MySQL 專用快速導入通道:
INFO manager.DirectMySQLManager: Beginning mysqldump fast path import
提交 MR 作業,顯示 Map 進度:
INFO mapred.JobClient: Running job: job_201207191159_0322
INFO mapred.JobClient: map 0% reduce 0%
INFO mapred.JobClient: map 100% reduce 0%
作業成功結束,顯示讀寫位元組、記錄數等統計:
INFO mapreduce.ImportJobBase: Transferred 208 bytes in 20.349 seconds (10.2216 bytes/sec)
INFO mapreduce.ImportJobBase: Retrieved 44 records.
Sqoop 自動調用 Hive CLI 將 HDFS 上的臨時數據載入 Hive 倉庫:
INFO hive.HiveImport: Loading uploaded data into Hive
INFO hive.HiveImport: Loading data to table default.mysql_award
INFO hive.HiveImport: Hive import complete.
進入 Hive CLI 執行查詢:
hive> select * from mysql_award;
輸出示例(已脫敏):
OK
2012-04-27 06:55:00:402713629 5947 433203828 2 4027102 402713629 1001 NULL 715878221 殺破天A ios
2012-04-04-27 06:55:00:406788559 778 433203930 19 4017780 406788559 1001 1 13835155880 親牛牛旦旦 android
Time taken: 0.368 seconds
由於數據庫與 Hive 均使用 UTF-8 編碼,中文欄位無亂碼問題。
?characterEncoding=utf8,Hive 表建立時指定 ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t' STORED AS TEXTFILE。-m 1,改用 --split-by 指定數值型主鍵並行導入;或使用 --where 分批次增量同步。/user/hive/warehouse)寫權限。本文通過完整命令、日誌解析與結果驗證,展示了 Sqoop 將 MySQL 數據導入 Hive 的標準流程。掌握核心參數與日誌關鍵點,能幫助你快速排查導入失敗、優化大表遷移效率,實現關係型數據倉庫到數據湖的無縫對接。