Sqoop 之 job 工具
本文成型的历史原因来源于使用 shell
脚本封装单个 sqoop
的脑壳疼操作
在执行定时任务的时候,如果需要执行的 sqoop
足够多,我们可以将他们封装在一个 shell
脚本中,再使用 crontab
进行定时任务调用。
而如果同一时间需要执行的 sqoop
数量仅仅只有一两个,那我们完全没有必要为了它写一个 shell
脚本,当然只是按场景选择不同策略,并不代表哪种方法更差。
对于不想多建 shell 脚本的同学,还有 sqoop job
这条路。
job 语法
1 | sqoop job (generic-args) (job-args) [-- [subtool-name] (subtool-args)] |
sqoop job
的语法如上所示,而其后追加的命令参数也无需按顺序堆砌。
命令参数
Argument | Description |
---|---|
--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. |
--list |
List all saved jobs |
用法
创建
一条同步的命令大致是长这个样子
1 | sqoop import |
建立 sqoop job
所需要的操作只需要把上面的参数追加在下面这条命令下就可以了
1 | sqoop job --create user_log -- import |
删除
1 | sqoop job -delete user_log |
执行
1 | sqoop job --exec user_log |
查看详情
1 | sqoop job --show user_log |
查看 job 列表
1 | sqoop job --list |
如何制定定时任务?
1 | crontab -e |
仅仅是一个 crontab
的调用语句,简单高效。
每次执行都需要输入数据库密码?
sqoop
将它们存储数据的 metastore
定义为不安全的地方,所以它并没有将数据库密码存入 metastore
,这十分合理,但如果你觉得这无所谓,可以开启存储密码的选项。
1 | vi ${SQOOP_HOME}/conf/sqoop-site.xml |
增加如下内容
sqoop.metastore.client.record.password true If true, allow saved passwords in the metastore.
只需要在第一次执行时输入密码,之后密码就存储在 metastore
中了。