Sqoop是Apache顶级项目,主要用来在Hadoop和关系数据库中传递数据。通过sqoop,可以方便的将数据从关系数据库导入到HDFS,或将数据从HDFS导出到关系数据库。


关于Sqoop

官网
Sqoop架构整合了Hive、Hbase和Oozie,通过map-reduce任务来传输数据,从而提供并发特性和容错。
Sqoop主要通过JDBC和关系数据库进行交互。理论上支持JDBC的database都可以使用sqoop和hdfs进行数据交互。但只有一小部分经过sqoop官方测试,如:HSQLDB(1.8.0+),MySQL(5.0+),Oracle(10.2.0+),PostgreSQL(8.3+ );
MySQL和PostgreSQL支持direct;较老的版本有可能也被支持,但未经过测试。出于性能考虑,sqoop提供不同于JDBC的快速存取数据的机制,可以通过–direct使用。

Sqoop与MySQL数据交换

版本:sqoop-1.4.5-cdh5.4.0
sqoop-1.4.5-cdh5.4.0官方文档
数据导入示例

mysql drive导入sqoop

cp /tmp/mysql-connector-java-5.1.36-bin.jar /opt/cloudera/parcels/CDH-5.4.7-1.cdh5.4.7.p0.3/lib/sqoop/lib
cp /opt/cloudera/parcels/CDH-5.4.7-1.cdh5.4.7.p0.3/lib/sqoop/lib/mysql-connector-java-5.1.36-bin.jar /opt/cloudera/parcels/CDH-5.4.7-1.cdh5.4.7.p0.3/lib/hadoop/lib/
备注:官方文档是要导入到sqoop2目录,但copy到sqoop2目录无效,sqoop目录生效

MySQL表导入HDFS然后导入Hive

  • 切换到hdfs用户执行:su hdfs
  • 将MySQL数据库geocodingdb的MatchingAddress表导入HDFS用户目录

    1
    2
    3
    4
    5
    6
    sqoop import --connect jdbc:mysql://192.168.1.161:3306/geocodingdb \
    --driver com.mysql.jdbc.Driver \
    --username geocodingdb --password geocodingdb \
    --table MatchingAddress \
    --fields-terminated-by '\t' --lines-terminated-by '\n' --optionally-enclosed-by '\"'
    --direct
  • 附加--direct参数快速完成MySQL数据导入/导出操作
    与selects和inserts操作相比,MySQL Direct Connector可以用mysqldump and mysqlimport工具对MySQL数据进行更快的导入和导出操作

  • hive新建表结构并导入数据

    1
    2
    3
    4
    5
    6
    DROP TABLE IF EXISTS geocodingdb.MatchingAddress;
     
    create external table geocodingdb.MatchingAddress (source_address_id string,source_address string ,head_splitted_address string,splitted_skeleton_addressnode string,skeleton_addressnode string,skeleton_addressnode_type string,tail_address string,tail_splitted_address string)
    row format delimited fields terminated by '\t' stored as textfile;
     
    load data inpath '/user/hdfs/MatchingAddress/*' into table geocodingdb.MatchingAddress;

MySQL表直接导入Hive

  • MySQL表授权

    1
    2
    GRANT ALL PRIVILEGES ON *.* TO 'geocodingdb'@'%' IDENTIFIED BY 'geocodingdb' with grant option;
    FLUSH PRIVILEGES;
  • hive-import命令
    注意导入MySQL表结构字段顺序需与Hive表结构字段顺序一致

    1
    2
    3
    4
    5
    6
    sqoop import --connect jdbc:mysql://192.168.1.161:3306/geocodingdb \
    --driver com.mysql.jdbc.Driver \
    --username geocodingdb --password geocodingdb \
    --table MatchingAddress \
    --fields-terminated-by '\t' --lines-terminated-by '\n' --optionally-enclosed-by '\"' \
    --direct

Hive表导出到MySQL

1
2
3
4
5
6
sqoop export --direct --connect jdbc:mysql://192.168.1.161:3306/geocodingdb --driver com.mysql.jdbc.Driver \
--username geocodingdb --password geocodingdb \
--table MatchedAddressGroupbySkeleton \
--export-dir /user/hive/warehouse/geocodingdb.db/matchedaddressgroupbyskeleton \
--input-fields-terminated-by "\t" \
--input-null-string "\\\\N" --input-null-non-string "\\\\N"

Sqoop(MySQL)常用命令

指定列

sqoop import –connect jdbc:mysql://db.foo.com/corp –table EMPLOYEES \
–columns “employee_id,first_name,last_name,job_title”

使用8个线程

sqoop import –connect jdbc:mysql://db.foo.com/corp –table EMPLOYEES \
-m 8

快速模式

sqoop import –connect jdbc:mysql://db.foo.com/corp –table EMPLOYEES \
–direct

使用sequencefile作为存储方式

sqoop import –connect jdbc:mysql://db.foo.com/corp –table EMPLOYEES \
–class-name com.foocorp.Employee –as-sequencefile

分隔符

sqoop import –connect jdbc:mysql://db.foo.com/corp –table EMPLOYEES \
–fields-terminated-by ‘\t’ –lines-terminated-by ‘\n’ \
–optionally-enclosed-by ‘\”‘

导入到hive

sqoop import –connect jdbc:mysql://db.foo.com/corp –table EMPLOYEES \
–hive-import

条件过滤

sqoop import –connect jdbc:mysql://db.foo.com/corp –table EMPLOYEES \
–where “start_date > ‘2010-01-01’”

用dept_id作为分个字段

sqoop import –connect jdbc:mysql://db.foo.com/corp –table EMPLOYEES \
–split-by dept_id

追加导入

sqoop import –connect jdbc:mysql://db.foo.com/somedb –table sometable \
–where “id > 100000” –target-dir /incremental_dataset –append

问题记录

sqoop export –direct导出mysqlimport错误

错误描述:Cannot run program “mysqlimport”: error=2, No such file or directory
解决办法:附加--driver com.mysql.jdbc.Driver参数

sqoop export –direct导出mapreduce程序错误

错误描述1:Caused by: java.lang.RuntimeException: Can’t parse input data: ‘长浜 STR 18119 B316D057CE523018E0430A23A2C13018’
解决办法:附加--input-fields-terminated-by "\t"参数

错误描述2:com.mysql.jdbc.exceptions.jdbc4.MySQLIntegrityConstraintViolationException: Duplicate entry ‘1614’ for key ‘PRIMARY’
解决办法:附加--input-null-string "\\\\N" --input-null-non-string "\\\\N"如果遇到空值就插入null

Sqoop 导入 Hive 导致发生 Null Pointer Exception (NPE)

解决办法:首先通过 Sqoop 将数据导入 HDFS,然后将其从 HDFS 导入 Hive。

MySQL导入Hive表报错

Caused by: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ‘쀀’ )’ at line 1
解决:hive表编码问题;导入时不附加–hcatalog-table,手动新建表,然后导入数据

Sqoop导入MySQL大表内存溢出问题

SqoopUserGuide
抛出异常java.lang.OutOfMemoryError:GC overhead limit exceeded导致服务起不来

参考:http://www.hadooptechs.com/sqoop/handling-database-fetch-size-in-sqoop

修改yarn的nodemanager xmx还是sqoop 的xmx

分页查询写入

1
2
3
4
5
6
sqoop import --connect jdbc:mysql://192.168.1.161:3306/geocodingdb --username geocodingdb --password geocodingdb \
--query 'select * from MatchingAddress WHERE $CONDITIONS limit 0,100000' \
--split-by guid \
--fields-terminated-by '\t' --lines-terminated-by '\n' --optionally-enclosed-by '\"' \
--target-dir /user/hive/warehouse/geocodingdb.db/matchingaddress \
--append
1
2
3
4
5
6
sqoop import --connect jdbc:mysql://192.168.1.161:3306/geocodingdb --username geocodingdb --password geocodingdb \
--query 'select * from MatchingAddress WHERE $CONDITIONS' \
--split-by guid \
--fields-terminated-by '\t' --lines-terminated-by '\n' --optionally-enclosed-by '\"' \
--target-dir /user/hive/warehouse/geocodingdb.db/matchingaddress \
--append

sqoop import –connect jdbc:mysql://192.168.1.161:3306/geocodingdb?user=geocodingdb&password=geocodingdb&dontTrackOpenResources=true&defaultFetchSize=10000&useCursorFetch=true –query ‘select * from MatchingAddress WHERE $CONDITIONS’ –split-by guid \
–fields-terminated-by ‘\t’ –lines-terminated-by ‘\n’ –optionally-enclosed-by ‘\”‘ \
–target-dir /user/hive/warehouse/geocodingdb.db/matchingaddress \
–append

sqoop import –connect jdbc:mysql://192.168.1.161:3306/geocodingdb \
–driver com.mysql.jdbc.Driver \
–username geocodingdb –password geocodingdb \
–direct \
–table MatchingAddress1 \
–fields-terminated-by ‘\t’ –lines-terminated-by ‘\n’ –optionally-enclosed-by ‘\”‘ \
–target-dir /user/hive/warehouse/geocodingdb.db/matchingaddress \
–append

sqoop import –connect jdbc:mysql://192.168.1.161:3306/geocodingdb \
–driver com.mysql.jdbc.Driver \
–username geocodingdb –password geocodingdb \
–direct \
–table MatchingAddress2 \
–fields-terminated-by ‘\t’ –lines-terminated-by ‘\n’ –optionally-enclosed-by ‘\”‘ \
–target-dir /user/hive/warehouse/geocodingdb.db/matchingaddress \
–append

sqoop import –connect jdbc:mysql://192.168.1.161:3306/geocodingdb \
–driver com.mysql.jdbc.Driver \
–username geocodingdb –password geocodingdb \
–direct \
–table MatchingAddress3 \
–fields-terminated-by ‘\t’ –lines-terminated-by ‘\n’ –optionally-enclosed-by ‘\”‘ \
–target-dir /user/hive/warehouse/geocodingdb.db/matchingaddress \
–append

sqoop import –connect jdbc:mysql://192.168.1.161:3306/geocodingdb \
–driver com.mysql.jdbc.Driver \
–username geocodingdb –password geocodingdb \
–direct \
–table MatchingAddress4 \
–fields-terminated-by ‘\t’ –lines-terminated-by ‘\n’ –optionally-enclosed-by ‘\”‘ \
–target-dir /user/hive/warehouse/geocodingdb.db/matchingaddress \
–append

sqoop import –connect jdbc:mysql://192.168.1.161:3306/geocodingdb \
–driver com.mysql.jdbc.Driver \
–username geocodingdb –password geocodingdb \
–direct \
–table MatchingAddress5 \
–fields-terminated-by ‘\t’ –lines-terminated-by ‘\n’ –optionally-enclosed-by ‘\”‘ \
–target-dir /user/hive/warehouse/geocodingdb.db/matchingaddress \
–append

Stack trace: ExitCodeException exitCode=255:

Sqoop使用笔记(转载)的更多相关文章

  1. jQuery官方基础教程笔记(转载)

    本文转载于阮一峰的博文,内容基础,结构清晰,是jquery入门不可多得的资料,非常好,赞一个. 阮一峰:jQuery官方基础教程笔记 jQuery是目前使用最广泛的javascript函数库. 据统计 ...

  2. js学习笔记—转载(闭包问题)

    ---恢复内容开始--- 闭包(closure)是Javascript语言的一个难点,也是它的特色,很多高级应用都要依靠闭包实现.     一.变量的作用域 要理解闭包,首先必须理解Javascrip ...

  3. swing读书笔记转载

    (swing读书笔记)Swing Look And Feel(1) http://blog.csdn.net/cszhao1980/article/details/7343524 (swing读书笔记 ...

  4. MySQL全文检索笔记 转载

    1. MySQL 4.x版本及以上版本提供了全文检索支持,但是表的存储引擎类型必须为MyISAM,以下是建表SQL,注意其中显式设置了存储引擎类型 CREATE TABLE articles ( id ...

  5. Flume+Sqoop+Azkaban笔记

    大纲(辅助系统) 离线辅助系统 数据接入 Flume介绍 Flume组件 Flume实战案例 任务调度 调度器基础 市面上调度工具 Oozie的使用 Oozie的流程定义详解 数据导出 sqoop基础 ...

  6. sqoop 使用笔记

    好久没有更新自己技术博客,现在开始工作了,把自己遇到的问题写到这里边来 主要把自己的问题写出来,分享给大家 sqoop 导入数据时候 有时候会遇到mysql 中有sql 中的关键字 这时候如果直接导出 ...

  7. 【大数据】Sqoop学习笔记

    第1章 Sqoop简介 Sqoop是一款开源的工具,主要用于在Hadoop(Hive)与传统的数据库(mysql.postgresql...)间进行数据的传递,可以将一个关系型数据库(例如 : MyS ...

  8. sqoop学习笔记

    #################################################################################################### ...

  9. 软件架构自学笔记-- 转载“虎牙在全球 DNS 秒级生效上的实践”

    虎牙在全球 DNS 秒级生效上的实践 这次分享的是全球 DNS 秒级生效在虎牙的实践,以及由此产生的一些思考,整体上,分为以下 5 各部分: 背景介绍: 方案设计和对比: 高可用: 具体实践和落地: ...

随机推荐

  1. day06-codes and exercise in class

    # Author: Ghost # Email: jiaci.liu@gmail.com ''' 1-Review of last week 2-interface class, abstract c ...

  2. Python中的封装,继承和多态

    面向对象的三大特性:封装,继承和多态 封装:在类的内部定义属性和方法,通过对象或类名来访问属性和方法,隐藏功能的实现细节,也可以设置访问权限. 广义的封装:实例化一个对象,给对象空间封装一些属性:狭义 ...

  3. python基础 抽象类(接口类)

    Python中没有接口.接口类,抽象类:定义 制定一个规范 #必须要导入from abc import ABCMeta,abstractmethod class Payment(metaclass = ...

  4. Django搭配Celery进行异步/定时任务(一)初步搭建

    以下需求场景很常见: 1. 用户点击页面按钮,请求后台进行一系列耗时非常高的操作,页面没有响应/一直Loading,用户体验非常不好. 2. 某些数据需要预先处理,每天凌晨的时候进行运算,大约半小时到 ...

  5. 分享Centos6.5升级glibc过程

    默认的Centos6.5 glibc版本最高为2.12, 而在进行Nodejs开发时项目所依赖的包往往需要更高版本的glibc库支持, 因此在不升级系统的前提下, 需要主动更新系统glibc库. 一般 ...

  6. 【8086汇编-Day5】第二次实验

    debug的使用 偷个懒,之前写过了这里不再赘述 实验 1)实验1 要求:用e将一些数据写入内存,用a写入一段程序,t 逐条执行 观察具体参数变化,并探究现象 1.e写入,d检查 2.a写入程序 3. ...

  7. 20145234黄斐《Java程序设计》第十周学习总结

    教材学习内容总结 网络概述 概述 网络编程技术是当前一种主流的编程技术,随着联网趋势的逐步增强以及网络应用程序的大量出现,所以在实际的开发中网络编程技术获得了大量的使用. 计算机网络概述 IP地址: ...

  8. Caliburn.Micro 杰的入门教程6, Screens 和 Conductors 简介

    Caliburn.Micro 杰的入门教程1(翻译)Caliburn.Micro 杰的入门教程2 ,了解Data Binding 和 Events(翻译)Caliburn.Micro 杰的入门教程3, ...

  9. 优步北京B组奖励政策

    用户组:优步北京B组(2015年7月20日前激活的部分司机) 更新日期:2015年8月4日 滴滴快车单单2.5倍,注册地址:http://www.udache.com/ 如何注册Uber司机(全国版最 ...

  10. 武汉Uber优步司机奖励政策(12月21日-12.27日)

    滴快车单单2.5倍,注册地址:http://www.udache.com/ 如何注册Uber司机(全国版最新最详细注册流程)/月入2万/不用抢单:http://www.cnblogs.com/mfry ...