Sqoop 可以與Hive系統結合,實現數據的導入和導出,用戶需要在 sqoop-env.sh 中添加HIVE_HOME的環境變量。
具體,見我的如下博客:
hadoop2.6.0(單節點)下Sqoop-1.4.6安裝與配置(數據讀取涉及hadoop、hbase和hive)
hadoop2.2.0(單節點)下Sqoop-1.4.6安裝與配置(數據讀取涉及hadoop、hbase和hive)
前期工作
(MySQL里的數據)通過Sqoop Import HDFS 里 和 通過Sqoop Export HDFS 里的數據到(MySQL)(五)
本博文的主要內容有
一、將mysql表的數據導入到hive中
二、將Hive表的數據導出到mysql中(不建立中間表)
三、將Hive表的數據導出到mysql中(建立中間表)(推薦)
一、將mysql表的數據導入到hive中
# 追加數據
sqoop import \ --connect jdbc:mysql://192.168.56.104:3306/test?useSSL=false \ --username root \ --password 123456 \ --table t1 --hive-import --hive-table test.mysql_t1 \
# 覆蓋數據
sqoop import \ --connect jdbc:mysql://192.168.56.104:3306/test?useSSL=false \ --username root \ --password 123456 \ --table t1 \ --hive-import --hive-overwrite --hive-table test.mysql_t1 \
注:如果MySQL中的表沒有主鍵,則需要加--autoreset-to-one-mapper參數
完善
二、將Hive表的數據導出到mysql中(不建立中間表)
如下,是我的Hive里的數據。
以/user/hive/warehouse/stock_partition/tradedate=20130722為例。
這里,Hive -> MySQL
我這里是,
/user/hive/warehouse/stock_partition(在Hive里)
->
stock_partition_copy(在MySQL里)
對於,將Hive里的數據,導出到MySQL(是需要先建立輸出表的。在我這里是,stock_partition_copy)
表明,輸出表已經創建成功!
[hadoop@djt002 sqoopRunCreate]$ sqoop export \ > --connect 'jdbc:mysql://192.168.80.200/hive?useUnicode=true&characterEncoding=utf-8' \ > --username hive \ > --password-file /user/hadoop/.password \ > --table stock_partition_copy \ > --export-dir /user/hive/warehouse/stock_partition/tradedate=20130722 \ > -input-fields-terminated-by ","
或
[hadoop@djt002 sqoopRunCreate]$ sqoop export --connect 'jdbc:mysql://192.168.80.200/hive?useUnicode=true&characterEncoding=utf-8' --username hive --password-file /user/hadoop/.password --table stock_partition_copy --export-dir /user/hive/warehouse/stock_partition/tradedate=20130722 -input-fields-terminated-by ","
然后,到本地的MySQL,來看
成功!
三、將Hive表的數據導出到mysql中(建立中間表,有效解決臟數據)
對於Hive,類似與HDFS一樣,在從它們導出到本地的MySQL時,為了規范適應生產業務所需,還是也最好先導出到中間表。
如下,是我的Hive里的數據
這里,Hive -> 先導出到 中間表(成功才可以,后續導出) -> MySQL
我這里是,
/user/hive/warehouse/stock_partition(在Hive里)
->
stock_partition _copy_tmp (在MySQL里)
->
stock_partition_copy(在MySQL里)
對於,將Hive里的數據,導出到MySQL(是需要先建立中間表和輸出表的。在我這里是,stock_partition_copy)
對於,這里,因為,我們只需復制舊表的結構就好,無需它里的數據,教大家快速得到想要的新表。
CREATE TABLE stock_partition_copy_tmp SELECT * FROM stock_partition_copy WHERE 1=2;
表明,中間表和輸出表已經創建成功!
[hadoop@djt002 sqoopRunCreate]$ sqoop export \ > --connect 'jdbc:mysql://192.168.80.200/hive?useUnicode=true&characterEncoding=utf-8' \ > --username hive \ > --password-file /user/hadoop/.password \ > --table stock_partition_copy \ > --staging-table stock_partition_copy_tmp \ > --clear-staging-table \ > --export-dir /user/hive/warehouse/stock_partition/tradedate=20130722 \ > -input-fields-terminated-by ","
或者
[hadoop@djt002 sqoopRunCreate]$ sqoop export --connect 'jdbc:mysql://192.168.80.200/hive?useUnicode=true&characterEncoding=utf-8' --username hive --password-file /user/hadoop/.password --table stock_partition_copy --staging-table stock_partition_copy_tmp --clear-staging-table --export-dir /user/hive/warehouse/stock_partition/tradedate=20130722 -input-fields-terminated-by ","
然后,到本地的MySQL,來看
推薦博客
http://sqoop.apache.org/docs/1.4.6/SqoopUserGuide.html (sqoop官網文檔)
http://blog.csdn.net/aaronhadoop/article/details/26713431