引入集群级Init脚本
今年夏天,我在砖作为一个软件工程实习生在集群团队。作为我的实习项目的一部分,我设计和实现集群级init脚本,提高可扩展性和易用性。
在这个博客中,我将讨论各种好处的集群级init脚本,在砖后跟我的实习经验,在我的个人和职业发展的影响。
集群级Init脚本
Init脚本是shell脚本运行在每个集群节点的启动前的火花司机或工人JVM开始。砖等各种目的的客户使用init脚本安装自定义库,启动后台进程,或申请企业安全策略。这些新的脚本提供了一些改进之前的,现在已经弃用。
Init脚本现在集群配置的一部分
最大的一个客户痛点,init脚本用于集群没有集群配置的一部分,并没有出现在用户界面。正因为如此,init脚本应用到一个集群是不直观,编辑或克隆一个集群不会保存init脚本配置。集群级init脚本解决这个问题包括一个“Init脚本”小组的集群配置页面的UI,并将一个“init_scripts”字段添加到公共API。这也使得利用init脚本集群访问控制。
curl - n - x - h“application / json内容类型:- d”{“cluster_id”:“1202 - 211320 brick1”," cluster_log_conf ": {" dbfs ": {“目的地”:“dbfs: / cluster-logs”}},“init_scripts”: [{" dbfs ": {“目的地”:“dbfs: /砖/ <目录> / postgresql-install.sh”}})}'https:/ / < databricks-instance > / api / 2.0 /集群/编辑</ databricks-instance > < /目录>
现在工作岗位集群Init脚本
以前的init脚本依赖与集群名称将脚本存储在一个文件夹。这可以防止它们被用于工作集群,集群的名称在哪里生成。因为集群级init脚本是集群配置的一部分,他们可以应用于工作集群,嗯,有相同的接口通过UI和API。
环境变量的初始化脚本
Init脚本现在提供对列出的某些环境变量的访问在这里。这样可以减少很多的复杂性init脚本需要访问信息,如节点是否司机或执行者和集群id。
访问控制的init脚本
用户现在可以提供一个DBFS或S3路径的init脚本,它可以存储在任意位置。使用S3时,我的角色可以用来为init脚本提供访问控制,防止恶意或错误的访问/变更init脚本。阅读更多有关如何设置这个细节在这里。
简化的日志
日志现在更符合对集群级init脚本集群日志交付,可以发现在同一根文件夹作为集群的驱动程序和执行程序日志。
额外的集群事件
Init脚本现在暴露出两个新的集群事件:INIT_SCRIPTS_STARTED INIT_SCRIPTS_FINISHED。这些帮助用户确定init脚本执行的时间和提供额外的清晰集群在给定时刻的状态。
结论
工作在这个项目上暴露了我设计的过程中,实现和测试一个面向用户的功能。我学会了如何编写健壮的、可维护的代码和评估执行语义。我记得我分布式系统教授声称,一个好的设计可以简化工程努力数量级,导致短,不易清洁代码错误。然而,我从未想过这一点就会回家仅仅几个月后,在一个行业设置。
我发现砖工程师是极有帮助的,不断的学习和提高的愿望,以及耐心教导。领导是非常开放的员工和不断寻求反馈,甚至从实习生。实习项目也有很多有趣的活动,以及教育的事件让我们了解其他领域的公司(例如,销售、安装工程、客户成功)。
最后,我想感谢集群团队在我的项目为他们的鼓励和支持。特别喊出我的经理Ihor Leshko始终在需要的时候,迈克林完全改变我的方式方法前端工程,和我的导师陈Haogang教我宝贵的技能,使我能够写简单的,毕业工作代码构建健壮、生产就绪的系统。