【hadoop Sqoop】Sqoop从mysql导数据到hive

1、概述

Sqoop是一个实现在关系型数据库和Hive进行数据交换的工具。 主要用于在Hadoop(Hive)与传统的数据库(mysql、postgresql…)间进行数据的传递,可以将一个关系型数据库(例如 : MySQL ,Oracle ,Postgres等)中的数据导进到Hadoop的HDFS中,也可以将HDFS的数据导进到关系型数据库中。

2、参数

hive导入参数
  --hive-home   重写$HIVE_HOME
  --hive-import          插入数据到hive当中,使用hive的默认分隔符
  --hive-overwrite  重写插入
  --create-hive-table  建表,如果表已经存在,该操作会报错!
  --hive-table [table]  设置到hive当中的表名
  --hive-drop-import-delims  导入到hive时删除 \n, \r, and \01 
  --hive-delims-replacement  导入到hive时用自定义的字符替换掉 \n, \r, and \01 
  --hive-partition-key          hive分区的key
  --hive-partition-value   hive分区的值
  --map-column-hive           类型匹配,sql类型对应到hive类型

3、示例
最基本的方式是直接把表的所有的数据复制过来。这里希望大家注意库要定义好,Hive中如果不定义的话会直接放入default中去。

/usr/local/sqoop1.4/sqoop1.4_hadoop2.0/bin/sqoop import --connect jdbc:mysql://localhost:3306/ managdb --username xxx --password xxx --table data_xxx_view --fields-terminated-by ','  --hive-import --hive-table userxxxxdb.data_xxx --hive-overwrite -m 1

通过Sqoop进行查询的情况

这里需要注意的是where后面需要跟$CONDITIONS

这样直接存入hdfs中然后再进行导入即可,我尝试过直接导入,但是总是出现下面的这个错误,也没能解决掉,所以采用了这种间接的形式

At minimum, you must specify –connect and –table Arguments to mysqldump and other subprograms may be supplied after a ‘–’ on the command line.

/usr/local/sqoop1.4/sqoop1.4_hadoop2.0/bin/sqoop import \
--connect "jdbc:mysql://localhost:3306/managdb?useUnicode=true&characterEncoding=utf-8"  --username XX  --password xxxx\
--query "select p FROM TB where \$CONDITIONS;" -m 1 \
--null-string 'null' --null-non-string 'null' \
--fields-terminated-by ',' --lines-terminated-by '\n' \
--hive-drop-import-delims \
--target-dir /usr/local/data --as-textfile \
--delete-target-dir;

4、参考资料
Sqoop1和Sqoop2的刨析对比
http://blog.csdn.net/gamer_gyt/article/details/55225700

mysql数据与Hadoop之间导入导出之Sqoop实例
http://www.tuicool.com/articles/NzM3Mny

使用Sqoop,最终导入到hive中的数据和原数据库中数据不一致解决办法
http://www.tuicool.com/articles/yQ7NNz

已标记关键词 清除标记
©️2020 CSDN 皮肤主题: 编程工作室 设计师:CSDN官方博客 返回首页