sqoop 使用心得

标签: sqoop | 发表时间:2013-05-08 23:09 | 作者:驰晨
出处:http://ronxin999.blog.163.com

本文原创,转载请说明出处:http://ronxin999.blog.163.com/blog/static/42217920201348103424245/

sqoop是干吗的,就不在这里浪费笔墨了,这里主要讲下一个新手接触到sqoop碰到的问题。

一  业务场景 Hive 查询Hql的结果进入MySql,目前本人是通过两步来实现的,

1 把hive查询结果直接进入Hive的表a(a表需要创建,结构需要和b一样)
2 通过sqoop把表a的内容导入到MySql表b(b表已经存在),
这个时候你需要现在hive上创建a表,假如b表字段很多,你需要一个一个字段写到建表语句。我是不想写。估计你也是,都是通过sqoop直接把MySQL的b表导入到hive,因为hive表默认的分隔符是'\001',所以倒过来的时候要注意,带上表分隔符参数
--fields-terminated-by '\t',如下:   
sqoop import --connect jdbc:mysql://db.foo.com/corp --table EMPLOYEES \
 --fields-terminated-by '\t'   
要想通过sqoop把hive的表导入MySql,hive上的表分隔符一定要是'\t',sqoop才能顺利导入,如果你使用默认的,即使在用sqoop导入的时候通过参数--input-fields-terminated-by '\001'也不行的。一定是--input-fields-terminated-by '\t' 才行。

二 sqoop导入hive数据到MySql碰到hive表中列的值为null的情况。

在导入数据的过程中,如果碰到列值为null的情况,hive中为null的是以\N代替的,所以你在导入到MySql时,需要加上两个参数:--input-null-string '\\N' --input-null-non-string '\\N',多加一个'\',是为转义。如果你通过这个还不能解决字段为null的情况,还是报什么NumberFormalt异常的话,那就是比较另类的了,没有关系,我们还是要办法解决,这就是终极武器。呵呵
你应该注意到每次通过sqoop导入MySql的时,都会生成一个以MySql表命名的.java文件,然后打成JAR包,给sqoop提交给hadoop 的MR来解析Hive表中的数据。那我们可以根据报的错误,找到对应的行,改写该文件,编译,重新打包,sqoop可以通过 -jar-file ,--class-name 组合让我们指定运行自己的jar包中的某个class。来解析该hive表中的每行数据。脚本如下:一个完整的例子如下:
   

./bin/sqoop export --connect "jdbc:mysql://cmg3.chamago.com/ehub?useUnicode=true&characterEncoding=utf-8"

--username gavin.peng --password gavin.peng --table bi_weekly_sales_item

--export-dir /hive/warehouse/hive_bi_weekly_sales_item --input-fields-terminated-by '\t'

--input-null-string '\\N' --input-null-non-string '\\N'

--class-name com.chamago.sqoop.codegen.bi_weekly_sales_item

--jar-file /tmp/sqoop-chamago/bi_weekly_sales_item.jar

上面--jar-file 参数指定jar包的路径。--class-name 指定jar包中的class。
这样就可以解决所有解析异常了。

下面贴下sqoop经常用的命令,

1 导入MySQL表到Hive
./sqoop import --connect jdbc:mysql://cmg3.chamago.com/ehub?useUnicode=true&characterEncoding=utf-8 --username gavin.peng --password gavin.peng --table bi_daily_traffic --hive-import   


三 sqoop增量倒入

sqoop支持两种增量MySql导入到hive的模式,
 一种是 append,即通过指定一个递增的列,比如:
--incremental append  --check-column num_iid --last-value 0
另种是可以根据时间戳,比如:
--incremental lastmodified --check-column created --last-value '2012-02-01 11:0:00'
就是只导入created 比'2012-02-01 11:0:00'更大的数据。

相关 [sqoop] 推荐:

sqoop 使用心得

- - 经验沉淀 知识结晶
本文原创,转载请说明出处:http://ronxin999.blog.163.com/blog/static/42217920201348103424245/. sqoop是干吗的,就不在这里浪费笔墨了,这里主要讲下一个新手接触到sqoop碰到的问题. 一  业务场景 Hive 查询Hql的结果进入MySql,目前本人是通过两步来实现的,.

sqoop 常用写法

- - 开源软件 - ITeye博客
2 查看具体数据库内的表. 3  将关系型数据表结构users复制到Hive默认库的表users中:. 参数说明:  这两个参数可以不加. --fields-terminated-by "\0001"  是设置每列之间的分隔符,"\0001"是ASCII码中的1,. 它也是hive的默认行内分隔符, 而sqoop的默认行内分隔符为"," .

Sqoop介绍及使用

- - CSDN博客云计算推荐文章
Apache Sqoop是用来实现结构型数据(如关系数据库)和Hadoop之间进行数据迁移的工具. 它充分利用了MapReduce的并行特点以批处理的方式加快数据的传输,同时也借助MapReduce实现了容错. 项目地址: http://sqoop.apache.org/. 目前为止,已经演化出了2个版本:sqoop1和sqoop2.

Sqoop成为Apache顶级项目

- - NoSQLFan
Sqoop是一个Hadoop的周边工具,它的主要作用是在结构化数据存储与Hadoop之间进行数据交换,通过 Sqoop,你可以批量将你关系型数据库中的数据导入到Hadoop中,也可以将Hadoop中的数据导出到其它结构化存储中. Sqoop项目开始于2009年,最早是作为Hadoop的一个第三方模块存在,后来为了让使用者能够快速部署,也为了让开发人员能够更快速的迭代开发,Sqoop独立成为一个Apache项目.

Hive部署(包括集成Hbase和Sqoop)

- - ITeye博客
Hive部署(包括集成Hbase和Sqoop) .     主要是选择软件版本. 将解压后的hive-0.8.1文件放在系统的/home/hadoop/hive/中. 4.1 设置HADOOP_HOME. 修改hive-0.8.1目录下/conf/hive-env.sh.template中的HADOOP_HOME为实际的Hadoop安装目录.

Apache Sqoop 1.4.3 发布,Hadoop 数据迁移

- - 开源中国社区最新新闻
Sqoop是一个用来将 Hadoop和关系型数据库中的数据相互转移的工具,可以将一个关系型数据库(例如 : MySQL ,Oracle ,Postgres等)中的数据导入到Hadoop的HDFS中,也可以将HDFS的数据导入到关系型数据库中. Sqoop 1.4.3 完整的改进记录请看 这里. 下载地址: http://www.apache.org/dyn/closer.cgi/sqoop/.

Sqoop导入关系数据库到Hive

- - 开源软件 - ITeye博客
文章来自:http://blog.javachen.com/2014/08/04/import-data-to-hive-with-sqoop/. Sqoop 是 apache 下用于 RDBMS 和 HDFS 互相导数据的工具. 本文以 mysql 数据库为例,实现关系数据库导入到 hdfs 和 hive.

用sqoop进行mysql和hdfs系统间的数据互导

- - CSDN博客云计算推荐文章
sqoop 是apache下用于RDBMS和HDFS互相导数据的工具. 本文档是sqoop的使用实例,实现从mysql到hdfs互导数据,以及从Mysql导数据到HBase. 一、从HBase库中直接导出到mysql中. 一开始我想从HBase库中直接导出到mysql中. 在mysql中创建一个库和表.

Sqoop实现关系型数据库到hive的数据传输

- - CSDN博客互联网推荐文章
Sqoop实现关系型数据库到hive的数据传输. 作者:zyuc_wangxw 发表于2013-8-9 17:21:20 原文链接. 阅读:118 评论:0 查看评论.

【甘道夫】Sqoop原生增量导入特性探秘

- - CSDN博客云计算推荐文章
原始思路 要想实现增量导入,完全可以不使用Sqoop的原生增量特性,仅使用shell脚本生成一个以当前时间为基准的固定时间范围,然后拼接Sqoop命令语句即可. Sqoop提供了原生增量导入的特性,包含以下三个关键参数:. 指定一个“标志列”用于判断增量导入的数据范围,该列不能是字符型,最好是数字或者日期型(这个很好理解吧).