我有许多火花批处理作业,每个作业需要每x小时运行一次。我确定这一定是一个常见的问题,但互联网上似乎没有什么最好的做法来设置它。我目前的设置如下:
构建系统(sbt)构建一个包含胖jar的tar.gz +一个将调用spark-submit的脚本。
测试通过后,CI系统(Jenkins)将tar.gz复制到hdfs。
我设置了chronos作业,将tar.gz解压缩到本地文件系统,然后运行提交给spark的脚本。
这种设置工作得相当好,但步骤3)的某些方面我并不喜欢。具体做法是:
我需要一个单独的脚本(由chronos执行),它从hdfs复制,解包并运行spark-submit任务。据我所知,chrons无法从hdfs运行脚本,所以我必须在每个mesos worker上都有一个这个脚本的副本,这使得部署变得更加复杂,如果所有内容都只存在于hdfs上。
我觉得我有太多活动部件。例如,我想知道我是否可以创建一个可以提交自己的可执行jar(args将是spark主和主类),在这种情况下,我将取消至少一个包装脚本。不幸的是,我还没有找到一个很好的方法来做到这一点
由于这是每个人都面临的问题,我想知道是否有人能提供更好的解决方案。
答案 0 :(得分:0)
要下载和解压缩存档,您可以通过设置 uris 字段在Chronos作业配置中指定它来使用Mesos fetcher。 要在执行程序端执行相同的过程,您可以在默认的Spark conf中设置s park.executor.uri 参数