- 1、本文档共15页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
数据转换工具sqoop
1. Sqoop工具介绍
Sqoop
Sqoop是Apache顶级项目,主要用来在Hadoop和关系数据库中传递数据。通过sqoop,我们可以方便的将数据从关系数据库导入到HDFS,或者将数据从HDFS导出到关系数据库。
sqoop主要通过JDBC和关系数据库进行交互,理论上支持JDBC的database都可以使用sqoop。
1.1 Sqoop介绍:兼容数据库
Sqoop主要通过mapreduce把数据从关系型数据库中导入数据到HDFS,目前测试兼容的数据库。
对oracle数据库的处理,复制jdbc驱动ojdbc6.jar 到sqoop的lib目录即可。
数据库
版本支持
直接支持
MySQL??
5.0+
Yes
Oracle
10.2.0+
No
PostgreSQL
8.3+(只支持导入)
Yes
HSQLDB
1.8.0+
No
Teradata
13.0+
No
1.2 工作原理:总体架构
1.2 工作原理: 工作流程(1)
Sqoop架构非常简单,其整合了Hive、Hbase和Oozie,通过map-reduce任务来传输数据,从而提供并发特性和容错。
Sqoop可以通过命令行先创建一个任务名,并描述该任务的导入或者导出工作,然后执行即可。其主要工作流程如下:
读取要导入数据的表结构,生成运行类,默认是QueryResult,打成jar包,然后提交给Hadoop;
1.2 工作原理: 工作流程(2)
设置好mapreduce的job,主要包括如下参数:
(1) InputFormatClass : 设置输入格式;
(2) OutputFormatClass: 设置输出格式,包括:文本、SequenceFile和AvroDataFile三种格式;
(3) Mapper: 设置执行mapreduce任务的mapper类;
(4) taskNumbers: 设置执行mapreduce的并行任务数。
1.2 工作原理: 工作流程(3)
3. 由Hadoop来执行MapReduce任务完成Import工作:
1)首先要对数据进行切分,记录划分范围并读取;
2)然后创建RecordReader从数据库中读取数据;
3)创建Map,RecordReader一行一行从关系型数据库中读取数据,设置好Map的Key和Value;
4)运行map。
1.3 数据导入Import特性
1.支持文本文件、avro、SequenceFiles格式, 默认为文本。
2.支持数据追加,通过apend指定。
3.支持table列选取(column),支持数据选取(where、 join)。
4.支持map任务数定制和数据压缩。
5. 提供参数将关系数据库中的数据导入到HBase ,导入HBase分二部:1)导入数据到HDFS; 2)调用HBase put操作逐行将数据写入表。
1.4 数据导出Export特性
1. 支持将数据导出到表(table)或者调用存储过程(call)。
2. 支持insert、update模式。
3. 支持并发控制。
1.5 增量备份(1)
一般情况下,关系数据表存在于线上环境的备份环境,需要每天进行数据导入。如果数据表较大,我们通常不可能每次都进行全表的导入,而sqoop提供了增量导入数据的机制。
控制增量导入主要由三个参数控制:
--check-column (col):表明当判断哪些行要被导入时需要检查的列;?
--incremental (mode):表明Sqoop是如何判断哪些行是新的,mode主要包括append(增量)和lastmodified(上次备份后修改过的)两个模式;
--last-value (value):表明上次导入之后check-column(被检查列)的最大值(已排序的)。
1.5 增量备份(2)
还有一个问题,每天导入时last value值都不一样,如何做到每天动态的读取新的last value呢?这点sqoop也想到了,sqoop支持把一条sqoop命令变为一个job查找最新的last value,然后自动地更换last value的值。
我们只要设置一个每天增量导
文档评论(0)