打赏

(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

posted @ 2017-03-18 12:57  大数据和AI躺过的坑  阅读(9092)  评论(0编辑  收藏  举报