sqoop 的job使用方式及密码保存

sqoop 的job使用方式

基本使用说明

job参数说明

功能简单明了。

ArgumentDescription
--create <job-id>Define a new saved job with the specified job-id (name). A second Sqoop command-line, separated by a -- should be specified; this defines the saved job.
--delete <job-id>Delete a saved job.
--exec <job-id>Given a job defined with --create, run the saved job.
--show <job-id>Show the parameters for a saved job.
--listList all saved jobs
创建job
$ sqoop job --create myjob \
    -- import --connect jdbc:mysql://example.com/db \
    --table mytable \

注意这里有个坑,-- import之间有个空格。这里–空格之后表示给job添加参数,而恰好import又不需要–,所以这个空格很容易被忽略。

查看job
[admin@centos7x3 software]$ sqoop job --list
2019-12-20 14:09:47,971 INFO sqoop.Sqoop: Running Sqoop version: 1.4.7
Available jobs:
  myjob
显示job
[admin@centos7x3 software]$ sqoop job --show myjob
2019-12-20 13:10:51,328 INFO sqoop.Sqoop: Running Sqoop version: 1.4.7
Job: myjob
Tool: import
Options:
----------------------------
verbose = false
hcatalog.drop.and.create.table = false
codegen.output.delimiters.escape = 0
codegen.output.delimiters.enclose.required = false
codegen.input.delimiters.field = 0
split.limit = null
......
删除job
[admin@centos7x3 software]$ sqoop job --delete myjob

2019-12-20 13:13:03,634 INFO sqoop.Sqoop: Running Sqoop version: 1.4.7
运行job
$ sqoop job --exec myjob
10/08/19 13:08:45 INFO tool.CodeGenTool: Beginning code generation

重载(override)参数运行job,

$ sqoop job --exec myjob -- --username someuser -P
Enter password:
...
保存密码

保存的job里并没有保存明文的password,所以每次使用job,都会要求你提供密码【-P交互式】。

而在使用Oozie这种自动化调度的时候,是没有机会输入password的。所以需要保存你的password。

保存password有两种方式,

1、使用–password-file文件

You should save the password in a file on the users home directory with 400 permissions and specify the path to that file using the –password-file argument, and is the preferred method of entering credentials. Sqoop will then read the password from the file and pass it to the MapReduce cluster using secure means with out exposing the password in the job configuration. The file containing the password can either be on the Local FS or HDFS

文件的权限应该是400,位置在${user.home}/.password,支持本地文件和HDFS。

#生成文件
echo -n "secret" > password.file
#本地文件
--password-file file:///home/username/.password.file \
#hdfs
--password-file hdfs://user/username/.password.file \

例如

sqoop import \
--connect jdbc:mysql://node3:3306/datatest \
--username admin \
--password-file hdfs:///user/admin/.password.file \
--table user \
--target-dir /user/admin/datatest6 \
--fields-terminated-by '\t'  \
-m 1

2、保存在sqoop元数据里

You can enable passwords in the metastore by setting sqoop.metastore.client.record.password to true in the configuration.

配置文件在conf/sqoop-site.xml里,设置之后的第一次运行,需要提供密码。

job的增量导入

If an incremental import is run from a saved job, this value will be retained in the saved job. Subsequent runs of sqoop job --exec someIncrementalJob will continue to import only newer rows than those previously imported.

如果通过job来运行增量导入,一些信息会被保留在job里。接着再运行job时,会接着前一次的跑,只导入新增的数据。

使用示例

使用job增量导入到HIVE。

首先完整导入到HIVE

sqoop import  \
--connect jdbc:mysql://node3:3306/datatest \
--username admin \
--password 123456 \
--table user  \
--fields-terminated-by "\t"  \
--lines-terminated-by "\n"  \
--hive-import  \
--hive-overwrite  \
--create-hive-table  \
--delete-target-dir \
--hive-database  sqoop \
--hive-table sqoop_user
-m 1

新建一个增量job,这里使用append方式。

$ sqoop job --create job_user \
    -- import \
    --connect jdbc:mysql://node3:3306/datatest \
    --username admin \
    --password 123456 \
    --table user \
    --hive-import  \
    --hive-table sqoop.sqoop_user \
    --fields-terminated-by "\t" \
    --incremental  append  \
    --check-column  id \
    --last-value 13  \
    -m 1

job里明文保存的–password会失效,生成环境改成–password-file比较好。

hive (sqoop)> select * from sqoop_user;
OK
sqoop_user.id	sqoop_user.name	sqoop_user.age	sqoop_user.sex	sqoop_user.addr	sqoop_user.time
1	张三	18	男	addr1	2019-12-01 15:16:03.0
2	张二	18	男	addr1	2019-12-02 15:16:11.0
3	李四	19	女	addr1	2019-12-03 15:16:14.0
4	王五	20	男	addr2	2019-12-04 15:16:18.0
5	赵六	21	男	addr3	2019-12-05 15:16:22.0
6	钱七	22	女	addr3	2019-12-06 15:16:26.0
7	孙八	23	女	addr4	2019-12-07 15:16:29.0
8	吴九	24	男	addr5	2019-12-08 15:16:33.0
11	周十	26	男	addr6	2019-12-09 15:16:36.0
12	郑十一	30	女	addr12	2019-12-10 15:16:41.0
13	刘十二	31	女	addr13	2019-12-12 16:14:42.0

mysql里新增两行数据,然后运行job

[admin@centos7x3 software]$ sqoop job --exec job_user
Enter password: 

从hive里查看新的数据已经加入到hive(14、15)

sqoop_user.id	sqoop_user.name	sqoop_user.age	sqoop_user.sex	sqoop_user.addr	sqoop_user.time
1	张三	18	男	addr1	2019-12-01 15:16:03.0
2	张二	18	男	addr1	2019-12-02 15:16:11.0
3	李四	19	女	addr1	2019-12-03 15:16:14.0
14	张新	28	男	addr14	2019-12-13 15:00:00.0
15	张新新	34	女	addr15	2019-12-13 16:00:00.0
4	王五	20	男	addr2	2019-12-04 15:16:18.0
5	赵六	21	男	addr3	2019-12-05 15:16:22.0
6	钱七	22	女	addr3	2019-12-06 15:16:26.0
7	孙八	23	女	addr4	2019-12-07 15:16:29.0
8	吴九	24	男	addr5	2019-12-08 15:16:33.0
11	周十	26	男	addr6	2019-12-09 15:16:36.0
12	郑十一	30	女	addr12	2019-12-10 15:16:41.0
13	刘十二	31	女	addr13	2019-12-12 16:14:42.0
Time taken: 4.198 seconds, Fetched: 13 row(s)

mysql里再次增加两行数据,然后运行job

mysql> insert into user values
(0,"李新",40,"男","addr40","2019-12-14 08:00:00"),
(0,"李新新",41,"女","addr41","2019-12-14 08:01:00");

hive查询数据。

hive (sqoop)> select * from sqoop_user;
OK
sqoop_user.id	sqoop_user.name	sqoop_user.age	sqoop_user.sex	sqoop_user.addr	sqoop_user.time
1	张三	18	男	addr1	2019-12-01 15:16:03.0
2	张二	18	男	addr1	2019-12-02 15:16:11.0
3	李四	19	女	addr1	2019-12-03 15:16:14.0
14	张新	28	男	addr14	2019-12-13 15:00:00.0
15	张新新	34	女	addr15	2019-12-13 16:00:00.0
16	李新	40	男	addr40	2019-12-14 08:00:00.0
17	李新新	41	女	addr41	2019-12-14 08:01:00.0
4	王五	20	男	addr2	2019-12-04 15:16:18.0
5	赵六	21	男	addr3	2019-12-05 15:16:22.0
6	钱七	22	女	addr3	2019-12-06 15:16:26.0
7	孙八	23	女	addr4	2019-12-07 15:16:29.0
8	吴九	24	男	addr5	2019-12-08 15:16:33.0
11	周十	26	男	addr6	2019-12-09 15:16:36.0
12	郑十一	30	女	addr12	2019-12-10 15:16:41.0
13	刘十二	31	女	addr13	2019-12-12 16:14:42.0
Time taken: 5.135 seconds, Fetched: 15 row(s)

什么原理呢?

show一下这个job。发现incremental.last.value = 17这一条参数已经自动修改保存了。

[admin@centos7x3 software]$ sqoop job --show job_user
Enter password: 
Job: job_user
Tool: import
Options:
----------------------------
verbose = false
hcatalog.drop.and.create.table = false
incremental.last.value = 17
......
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值