学习
实践
活动
工具
TVP
写文章

Spark实战(6)_spark-sql-e-f-i命令的整合和spark-sql日常作业开发流程总结

背景介绍

在日常工作中,我们可以在一个shell脚本里面利用执行sql脚本,而且可以传参数,但是存在一个问题,shell脚本对格式要求严格,而且shell脚本和spark-sql的脚本混在一起,内容庞大凌乱,不好管理。而可以执行一个hql文件,但是不能传参数进去,这就引出了一个问题,有没有一种方法,既可以把shell和hql脚本分开,shell负责调度hql脚本,并且可以在shell中把参数传递到hql中,hql脚本文件只负责写hql。

sparkF功能开发的思路

开发一个sparkF的功能,用法同spark-sql -f,但支持传参,使用格式:

sparkF aa.sql

sparkF aa.sql -date 2015-01-02

sparkF aa.sql -date 2015-01-02 -date1 2015-01-03

其中,aa.sql里通过的方式对接替换为想传递的参数值。

sparkF开发思路

最终的使用方式,sparkF aa.sql -date 2015-01-02

难点,把Java程序的输出结果直接放到shell脚本里运行

例如,运行,

首先,Java运行jar,把参数传进来,shell脚本里接收参数。参数是哪里传的呢?哪里传给sparkF的呢?是shell脚本传过来的,,交给java来处理,把sql脚本里的占位参数替换为传递的参数值后,打印的str由cmd来接收,再用执行。

/export/project/lib/sparkF.jar,路径可以不写死,可以给它配一个环境变量。

,作为一个公共的UDF文件,在中通过调用,在-e执行之前,用-i进行初始化。

添加maven插件,打包SparkF.jar。

执行验证结果,

spark-sql日常作业开发流程

以为例,

在aa.hql脚本中编写业务逻辑处理脚本,如果有参数,假设参数是dt,在脚本中用占位符代替(取决于开发SparkF.jar时的定义),然后通过aa.sh调度aa.hql,如,并且在aa.sh中利用我们开发的sparkF的功能,如。

这样,可以实现hql业务处理逻辑和shell脚本分离,并且可以把自定义的UDF统一放在一个hql文件中统一管理,在sparkF命令中通过统一引用。如:

本文首发于steem,感谢阅读,转载请注明。

https://steemit.com/@padluo

微信公众号「padluo」,分享数据科学家的自我修养,既然遇见,不如一起成长。

数据分析

读者交流电报群

https://t.me/sspadluo

知识星球交流群

知识星球读者交流群

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20180524G1TWBS00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码关注腾讯云开发者

领取腾讯云代金券