我们在apachespark之上构建了一个配置驱动的etl框架,我们正在设计一个公共shell脚本,用于执行spark提交。
我们查看了各种博客文章和spark文档以获得一些工作方向,但是我们看到的只是spark submit的规范(就像unix手册页一样),但是我们要寻找的是一些指导性文章或最佳实践,可以在为spark submit设计公共shell脚本时遵循这些规范。
这是我们目前的计划。
为了设置shell脚本的上下文,假设我们的项目中有许多应用程序,并且每个应用程序都有许多作业。
环境详细信息:spark版本:2.3.2,部署模式:集群,编程语言:scala,scala版本:2.11.8,集群管理:yarn
我们脚本的核心是使用 --properties-file
spark submit命令附带的选项。我们设置的所有配置 "--conf"
应该来自配置文件,我们可以利用 --properties-file
选项将配置文件作为输入传递。通过这种方式,我们使shell脚本不受配置更改的影响。
为了能够动态地选择配置,我们计划有如下所列的许多配置文件
基于内存-我们将为每个与内存相关的类别(x-small、small、medium、large、x-large)提供许多文件。所有与内存相关的属性,如内核以及基于类别的驱动程序和执行器的内存,都在这里。
公共-所有公共属性,如(jar、convertmatastoreparquet和任何其他公共配置)都在这里。
特定于应用程序规范的属性或覆盖可以在这里找到。
我们将获得应用程序名称、内存大小类别作为shell脚本的输入,并根据内存类别选择相应的conf文件。其中的内容附加在公共conf文件中,如果存在特定于应用程序的覆盖(可选),则特定于应用程序的文件也附加在现有配置中。最后,合并文件作为输入传递给 --properties-file
选项。
我想知道的是
是否有博客/视频列出了设计shell脚本的最佳实践。
我们计划使用动态内存分配,因此不通过配置文件设置示例参数。在生产集群中使用动态内存分配除了在运行时配置/停用资源所花费的额外时间之外,还有什么缺点吗。
谢谢
暂无答案!
目前还没有任何答案,快来回答吧!