我有许多火花批处理作业,每一个需要每x小时运行一次。我敢肯定这肯定是一个普遍的问题,但是在互联网上关于设置此问题的最佳做法似乎相对较少。我当前的设置如下:
生成系统(sbt)生成一个tar.gz,其中包含一个胖子jar +一个将调用spark-submit的脚本。
一旦测试通过,CI系统(Jenkins)将tar.gz复制到hdfs。
我设置了一个chronos作业,将tar.gz解压缩到本地文件系统,然后运行提交到spark的脚本。
此设置相当不错,但是我不喜欢第3步的某些方面。特别:
我需要一个单独的脚本(由chronos执行),该脚本从hdfs复制,解压缩并运行spark-submit任务。据我所知,chrons无法运行来自hdfs的脚本,因此我必须在每个mesos worker上都有一个此脚本的副本,这会使部署更加复杂,就像所有内容都只存在于hdfs上一样。
我感觉自己的活动部件过多。例如,我想知道是否可以创建一个可执行的jar来提交自身(args是spark master和main类),在这种情况下,我将至少删除其中一个包装脚本。不幸的是我还没有找到一个好的方法
因为这是每个人都面临的问题,所以我想知道是否有人可以提供更好的解决方案。
最佳答案
要下载和提取存档,您可以通过设置uris字段在Chronos作业配置中指定Mesos fetcher来使用它。
要在执行程序端执行相同的过程,可以在默认的Spark conf中设置spark.executor.uri参数。