总有人问Greenplum如何跑定时任务,Greenplum为何没有内部集成定时任务。第二个话题有点太大,我不是核心开发人员回答不了,愚以为在MPP里面跑太多内置定时任务潜在风险太高,另外分析环境中,这种一般都是交由外部系统控制的吧。
今天给大家分享一个最简单的定时任务样例:采用Linux Crontab定时调度。
不太了解Crontab的同学可以去:https://www.runoob.com/linux/linux-comm-crontab.html 简单了解一下,这里我就不做搬运工了。
下面是样例的简单逻辑:
1、存储过程编写
存储过程用来编写业务逻辑,封装一些我们想在mpp中定时执行的内容。
我这里就简单采用version()这个函数,假装作为我们自己编写的存储过程。
2、测试调用
存储过程编写完成后,在gpdb里面和linux命令行均进行测试,如下:
[gposs6@centos7 ~]$ psql
psql (9.4.24)
Type "help" for help.
postgres=# select version();
version
--------------------------------------------------------------------------------------------------------------------------------------------------
-------------------------------------------
PostgreSQL 9.4.24 (Greenplum Database 6.0.0-beta.1 build dev) on x86_64-unknown-linux-gnu, compiled by gcc (GCC) 4.8.5 20150623 (Red Hat 4.8.5-39
), 64-bit compiled on Sep 11 2020 14:35:28
(1 row)
postgres=# \q
[gposs6@centos7 ~]$ psql -d postgres -c "select version()"
version
--------------------------------------------------------------------------------------------------------------------------------------------------
-------------------------------------------
PostgreSQL 9.4.24 (Greenplum Database 6.0.0-beta.1 build dev) on x86_64-unknown-linux-gnu, compiled by gcc (GCC) 4.8.5 20150623 (Red Hat 4.8.5-39
), 64-bit compiled on Sep 11 2020 14:35:28
(1 row)
[gposs6@centos7 ~]$
3、Crontab配置
上面步骤2中,如果测试均没有问题,就可以配置定时任务,注意两点:
- 需要配置在数据库用户下,不要配置在root用户下,root权限太大,生产有风险;
- 为了避免环境变量及命令调度问题,建议采用绝对路径;
样例如下:
[gposs6@centos7 ~]$ whereis psql
psql: /usr/bin/psql.bak /home/gposs6/gpdb/bin/psql /usr/share/man/man1/psql.1.gz
[gposs6@centos7 ~]$ crontab -l
* * * * * source /home/gposs6/gpdb/greenplum_path;/home/gposs6/gpdb/bin/psql -d postgres -c "select version()" >> /home/gposs6/version.log 2>&1
[gposs6@centos7 ~]$ tail -f version.log
version
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
PostgreSQL 9.4.24 (Greenplum Database 6.0.0-beta.1 build dev) on x86_64-unknown-linux-gnu, compiled by gcc (GCC) 4.8.5 20150623 (Red Hat 4.8.5-39), 64-bit compiled on Sep 11 2020 14:35:28
(1 row)
注意:如果定义了Crontab但是过了时间没反应,没有日志生成,请仔细检查命令,或参考/var/log下的cron、maillog日志信息。
本文从CSDN(点击查看原文)转载而来。不代表烟海拾贝立场,如若转载,请注明出处:https://somirror.com/3688.html