使用Sqoop job工具同步数据

本文涉及的产品
云数据库 RDS MySQL Serverless,0.5-2RCU 50GB
简介:

我们使用的是Sqoop-1.4.4,在进行关系型数据库与Hadoop/Hive数据同步的时候,如果使用--incremental选项,如使用append模式,我们需要记录一个--last-value的值,如果每次执行同步脚本的时候,都需要从日志中解析出来这个--last-value的值,然后重新设置脚本参数,才能正确同步,保证从关系型数据库同步到Hadoop/Hive的数据不发生重复的问题。
而且,我们我们需要管理我们使用的这些脚本,每次执行之前可能要获取指定参数值,或者修改参数。Sqoop也提供了一种比较方面的方式,那就是直接创建一个Sqoop job,通过job来管理特定的同步任务。就像我们前面提到的增量同步问题,通过创建sqoop job可以保存上一次同步时记录的--last-value的值,也就不用再费劲去解析获取了,每次想要同步,这个job会自动从job保存的数据中获取到。

sqoop job命令使用

Sqoop job相关的命令有两个:

  • bin/sqoop job
  • bin/sqoop-job

使用这两个都可以。我们先看看sqoop job命令的基本用法:

  • 创建job:--create
  • 删除job:--delete
  • 执行job:--exec
  • 显示job:--show
  • 列出job:--list

下面,我们基于增量同步数据这个应用场景,创建一个sqoop job,命令如下所示:

1 bin/sqoop job --create your-sync-job -- import --connect jdbc:mysql://10.95.3.49:3306/workflow --table project --username shirdrn -P --hive-import --incremental append --check-column id --last-value 1 -- --default-character-set=utf-8

创建了job,id为“your-sync-job”,它是将MySQL数据库workflow中的project表同步到Hive表中,而且--incremental append选项使用append模式,--last-value为1,从MySQL表中自增主键id=1开始同步。然后我们根据这个job的id去查询job详细配置情况:

1 bin/sqoop job --show your-sync-job

结果示例,如下所示:

01 Job: your-sync-job
02 Tool: import
03 Options:
04 ----------------------------
05 verbose = false
06 incremental.last.value = 1
07 db.connect.string = jdbc:mysql://10.95.3.49:3306/workflow
08 codegen.output.delimiters.escape = 0
09 codegen.output.delimiters.enclose.required = false
10 codegen.input.delimiters.field = 0
11 hbase.create.table = false
12 db.require.password = true
13 hdfs.append.dir = true
14 db.table = project
15 import.fetch.size = null
16 codegen.input.delimiters.escape = 0
17 codegen.input.delimiters.enclose.required = false
18 db.username = shirdrn
19 codegen.output.delimiters.record = 10
20 import.max.inline.lob.size = 16777216
21 hcatalog.create.table = false
22 db.clear.staging.table = false
23 incremental.col = id
24 codegen.input.delimiters.record = 0
25 enable.compression = false
26 hive.overwrite.table = false
27 hive.import = true
28 codegen.input.delimiters.enclose = 0
29 hive.drop.delims = false
30 codegen.output.delimiters.enclose = 0
31 hdfs.delete-target.dir = false
32 codegen.output.dir = .
33 codegen.auto.compile.dir = true
34 mapreduce.num.mappers = 4
35 import.direct.split.size = 0
36 export.new.update = UpdateOnly
37 codegen.output.delimiters.field = 1
38 incremental.mode = AppendRows
39 hdfs.file.format = TextFile
40 codegen.compile.dir = /tmp/sqoop-shirdrn/compile/a1ed2c6097c4534d20f2ea981662556e
41 direct.import = false
42 hive.fail.table.exists = false
43 tool.arguments.0 = --default-character-set=utf-8
44 db.batch = false

通过incremental.last.value = 1可以看到,通过该选项来控制增量同步开始记录。
接着,可以使用创建的这个job id来运行它,执行如下命令:

1 bin/sqoop job --exec your-sync-job

可以查询,MySQL数据库workflow中的project表中的数据被同步到Hive表中。
这时,可以通过bin/sqoop job --show your-sync-job命令,查看当前的sqoop job配置情况,可以看到如下变化:

1 incremental.last.value = 7

从MySQL表中增量同步的起始id变为7,下次同步就会把id大于7的记录同步到Hive表中。可以在MySQL表中再INSERT一条记录,再次执行your-sync-job,能够正确地进行增量同步。

Sqoop job安全配置

默认情况下,创建的每个job在运行的时候都不会进行安全的认证。如果我们希望限制指定的sqoop job的执行,只有经过认证以后才能执行,这时候可以使用sqoop job的安全选项。Sqoop安装目录下,通过修改配置文件conf/sqoop-site.xml可以对job进行更高级的配置。实际上,我们使用了Sqoop的metastore工具,它能够对Sqoop进行细粒度的配置。
我们要将MySQL数据库中的数据同步到Hive表,每次执行sqoop job都需要输入访问MySQL数据库的连接账号信息,可以设置sqoop.metastore.client.record.password的值为true。如果在conf/sqoop-site.xml中增加如下配置,会将连接账号信息存储到Sqoop的metastore中:

1 <property>
2 <name>sqoop.metastore.client.record.password</name>
3 <value>true</value>
4 <description>If true, allow saved passwords in the metastore. </description>
5 </property>

如果想要限制从外部调用执行Sqoop job,如将Sqoop job提交给Oozie调度程序,也会通过上面Sqoop的metastore配置的内容来进行验证。
另外,Sqoop的metastore工具,可以允许我们指定为外部,例如使用外部主机上的MySQL数据库来存储元数据,可以在conf/sqoop-site.xml配置如下:

01 <property>
02 <name>sqoop.metastore.client.autoconnect.url</name>
03 <value>jdbc:mysql://10.95.3.49:3306/sqoop_metastore</value>
04 <description>The connect string to use when connecting to a
05 job-management metastore. If unspecified, uses ~/.sqoop/.
06 You can specify a different path here.
07 </description>
08 </property>
09 <property>
10 <name>sqoop.metastore.client.autoconnect.username</name>
11 <value>shirdrn</value>
12 <description>The username to bind to the metastore.
13 </description>
14 </property>
15 <property>
16 <name>sqoop.metastore.client.autoconnect.password</name>
17 <value>108loIOL</value>
18 <description>The password to bind to the metastore.
19 </description>
20 </property>

还有一个可与选择的配置项是,可以设置是否自动连接到外部metastore数据库,通过如下配置指定:

1 <property>
2 <name>sqoop.metastore.client.enable.autoconnect</name>
3 <value>false</value>
4 <description>If true, Sqoop will connect to a local metastore for job management when no other metastore arguments are provided.
5 </description>
6 </property>

这样,你可以通过MySQL的授权机制,来限制指定的用户和主机(或IP地址)访问Sqoop的metadata,也能起到一定的安全访问限制。

相关实践学习
基于CentOS快速搭建LAMP环境
本教程介绍如何搭建LAMP环境,其中LAMP分别代表Linux、Apache、MySQL和PHP。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
相关文章
|
14天前
|
SQL 分布式计算 监控
Sqoop数据迁移工具使用与优化技巧:面试经验与必备知识点解析
【4月更文挑战第9天】本文深入解析Sqoop的使用、优化及面试策略。内容涵盖Sqoop基础,包括安装配置、命令行操作、与Hadoop生态集成和连接器配置。讨论数据迁移优化技巧,如数据切分、压缩编码、转换过滤及性能监控。此外,还涉及面试中对Sqoop与其他ETL工具的对比、实际项目挑战及未来发展趋势的讨论。通过代码示例展示了从MySQL到HDFS的数据迁移。本文旨在帮助读者在面试中展现Sqoop技术实力。
27 2
|
9月前
|
数据采集 SQL 分布式计算
数据处理 、大数据、数据抽取 ETL 工具 DataX 、Kettle、Sqoop
数据处理 、大数据、数据抽取 ETL 工具 DataX 、Kettle、Sqoop
992 0
|
3月前
|
数据采集 消息中间件 分布式计算
Sqoop与其他数据采集工具的比较分析
Sqoop与其他数据采集工具的比较分析
|
3月前
|
分布式计算 关系型数据库 Hadoop
使用Sqoop将数据从Hadoop导出到关系型数据库
使用Sqoop将数据从Hadoop导出到关系型数据库
|
4月前
Sqoop Job报错日志
Sqoop Job报错日志
24 0
|
10月前
|
数据采集 关系型数据库 MySQL
大数据数据采集的数据迁移(同步/传输)的Sqoop之DataX
在大数据领域中,数据迁移是一个非常重要的任务。而Sqoop是一款流行且实用的数据迁移工具,但是它对于某些特定场景的数据迁移并不太方便。为了解决这个问题,阿里巴巴集团开发了一款开源的数据集成工具DataX,提供了更多的数据迁移方式和功能。本文将介绍DataX的基本原理和使用方法,希望能够为大家提供一些参考和帮助。
278 0
|
10月前
|
存储 数据采集 分布式计算
大数据数据采集的数据迁移(同步/传输)的Sqoop之数据传输实战
在大数据领域,数据迁移(同步/传输)也是非常重要的一环。Sqoop作为一个开源的数据迁移工具,可以帮助我们轻松地实现关系型数据库与Hadoop之间的数据迁移。本文将介绍如何使用Sqoop进行数据传输实战。
246 0
|
10月前
|
存储 数据采集 SQL
大数据数据采集的数据迁移(同步/传输)的Sqoop之基本命令和使用的job作业
在大数据领域中,Sqoop是一款非常流行的数据迁移工具。它可以将关系型数据库中的数据快速地移动到Hadoop生态系统中,方便我们进行更深入的分析和处理。本文将介绍Sqoop的基本命令及如何使用Sqoop来创建和运行job作业,希望能够为大家提供一些参考和帮助。
106 0
|
10月前
|
SQL 数据采集 分布式计算
大数据数据采集的数据迁移(同步/传输)的Sqoop之基本命令和使用的导入/导出数据
在大数据领域,数据迁移(同步/传输)也是非常重要的一环。Sqoop作为一个开源的数据迁移工具,可以帮助我们轻松地实现关系型数据库与Hadoop之间的数据迁移。本文将会对Sqoop的基本命令和使用进行详细介绍。
172 1
|
10月前
|
SQL 分布式计算 Oracle
大数据数据采集的数据迁移(同步/传输)的Sqoop之概念
在大数据领域,数据迁移(同步/传输)也是非常重要的一环。Sqoop作为一个开源的数据迁移工具,可以帮助我们轻松地实现关系型数据库与Hadoop之间的数据迁移。本文将会对Sqoop进行详细介绍。
283 1