(MySQL里的數據)通過Sqoop Import Hive 里 和 通過Sqoop Export Hive 里的數據到(MySQL)


 

  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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM