Sqoop使用笔记(转载)
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用户目录
123456sqoop 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新建表结构并导入数据
123456DROP 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表授权
12GRANT ALL PRIVILEGES ON *.* TO 'geocodingdb'@'%' IDENTIFIED BY 'geocodingdb' with grant option;FLUSH PRIVILEGES;hive-import命令
注意导入MySQL表结构字段顺序需与Hive表结构字段顺序一致123456sqoop 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使用笔记(转载)的更多相关文章
- jQuery官方基础教程笔记(转载)
本文转载于阮一峰的博文,内容基础,结构清晰,是jquery入门不可多得的资料,非常好,赞一个. 阮一峰:jQuery官方基础教程笔记 jQuery是目前使用最广泛的javascript函数库. 据统计 ...
- js学习笔记—转载(闭包问题)
---恢复内容开始--- 闭包(closure)是Javascript语言的一个难点,也是它的特色,很多高级应用都要依靠闭包实现. 一.变量的作用域 要理解闭包,首先必须理解Javascrip ...
- swing读书笔记转载
(swing读书笔记)Swing Look And Feel(1) http://blog.csdn.net/cszhao1980/article/details/7343524 (swing读书笔记 ...
- MySQL全文检索笔记 转载
1. MySQL 4.x版本及以上版本提供了全文检索支持,但是表的存储引擎类型必须为MyISAM,以下是建表SQL,注意其中显式设置了存储引擎类型 CREATE TABLE articles ( id ...
- Flume+Sqoop+Azkaban笔记
大纲(辅助系统) 离线辅助系统 数据接入 Flume介绍 Flume组件 Flume实战案例 任务调度 调度器基础 市面上调度工具 Oozie的使用 Oozie的流程定义详解 数据导出 sqoop基础 ...
- sqoop 使用笔记
好久没有更新自己技术博客,现在开始工作了,把自己遇到的问题写到这里边来 主要把自己的问题写出来,分享给大家 sqoop 导入数据时候 有时候会遇到mysql 中有sql 中的关键字 这时候如果直接导出 ...
- 【大数据】Sqoop学习笔记
第1章 Sqoop简介 Sqoop是一款开源的工具,主要用于在Hadoop(Hive)与传统的数据库(mysql.postgresql...)间进行数据的传递,可以将一个关系型数据库(例如 : MyS ...
- sqoop学习笔记
#################################################################################################### ...
- 软件架构自学笔记-- 转载“虎牙在全球 DNS 秒级生效上的实践”
虎牙在全球 DNS 秒级生效上的实践 这次分享的是全球 DNS 秒级生效在虎牙的实践,以及由此产生的一些思考,整体上,分为以下 5 各部分: 背景介绍: 方案设计和对比: 高可用: 具体实践和落地: ...
随机推荐
- telent connection refused
1.问题场景 Centos7 做flume案例时,telnet hadoop-senior03.itguigu.com 44444 总是Connection redused, Trying 192.1 ...
- 『Python基础-8』列表
『Python基础-8』列表 1. 列表的基本概念 列表让你能够在一个地方存储成组的信息,其中可以只包含几个 元素,也可以包含数百万个元素. 列表由一系列按特定顺序排列的元素组成.你可以创建包含字母表 ...
- Java8 Comparator 排序方法
Java8 中 Comparator 接口提供了一些静态方法,可以方便于我们进行排序操作,下面通过例子讲解下如何使用 对整数列表排序(升序) List<Integer> list = Ar ...
- [NOIP2017]逛公园(DP)
先spfa一遍处理出d[]数组,(从n开始bfs一遍标记可以达到n的点) 题意即,在走最短路的基础上,可以最多多走K长度的路径, 考虑DP,每次剩余可走的长度会因决策而改变,所以考虑dp[i][j]为 ...
- plsql解决中文乱码
进入 我的电脑,属性,高级,环境变量,添加2项: 1.LANG=zh_CN.GBK 2.NLS_LANG=SIMPLIFIED CHINESE_CHINA.ZHS16GBK
- join_tab计算代价
此路不通,还是需要按照顺序进行计算
- git的一些操作指令
1. mkdir learn 创建learn文件夹(也可不用命令创建,直接右击新建即可) cd learn进入learn文件夹 git init 把learn文件夹 变成 可以用git管理的 ...
- Qt-QML-Loader初步接触
先说说为什么用到了QML的Loader,这里我就要先扯点别的,那就是QML自带的ColorDialog,QML的机制 是优先调用系统提供的ColorDialog,如果系统的ColorDialog的不可 ...
- 180615-精度计算BigDecimal
文章链接:https://liuyueyi.github.io/hexblog/2018/06/15/180615-精度计算BigDecimal/ 180615-精度计算BigDecimal 目前接触 ...
- Java开发工程师(Web方向) - 03.数据库开发 - 第3章.SQL注入与防范
第3章--SQL注入与防范 SQL注入与防范 经常遇到的问题:数据安全问题,尤其是sql注入导致的数据库的安全漏洞 国内著名漏洞曝光平台:WooYun.org 数据库泄露的风险:用户信息.交易信息的泄 ...