集群节点初始化脚本
请注意
CLI特性在谷歌Cloud的Databricks上是不可用的。
init脚本是在每个集群节点启动期间运行的shell脚本之前Apache Spark驱动程序或worker JVM启动。
init脚本执行的一些任务示例包括:
安装Databricks Runtime中未包含的包和库。要安装Python包,请使用Databricks
皮普
二进制位于/砖/ python / bin /皮普
确保Python包安装到Databricks Python虚拟环境,而不是系统Python环境。例如,/砖/ python / bin /皮普安装<包名称>
.中的JVM系统类路径修改特殊情况.
设置JVM使用的系统属性和环境变量。
修改Spark配置参数。
初始化脚本类型
Databricks支持两种初始化脚本:集群范围的和全局的。
集群级:在配置了脚本的每个集群上运行。这是运行init脚本的推荐方式。
全球:在工作区的每个集群上运行。它们可以帮助您在工作空间中强制执行一致的集群配置。小心使用它们,因为它们可能会导致意想不到的影响,比如库冲突。只有admin用户可以创建全局init脚本。
请注意
要在当前版本中管理全局init脚本,必须使用全局初始化脚本API 2.0.
无论何时更改任何类型的init脚本,都必须重新启动受该脚本影响的所有集群。
环境变量
集群范围和全局初始化脚本支持以下环境变量:
DB_CLUSTER_ID
:脚本所在的集群ID。看到集群API 2.0.DB_CONTAINER_IP
: Spark运行容器的私网IP地址。init脚本在此容器中运行。看到SparkNode.DB_IS_DRIVER
:脚本是否在驱动节点上运行。DB_DRIVER_IP
:驱动节点IP地址。DB_INSTANCE_TYPE
:主机虚拟机的实例类型。DB_CLUSTER_NAME
:脚本正在执行的集群的名称。DB_IS_JOB_CLUSTER
:是否创建集群运行作业。看到创造一个工作.
例如,如果你想只在驱动节点上运行脚本的一部分,你可以写这样的脚本:
回声DB_IS_DRIVER美元如果[[DB_IS_DRIVER美元=“真正的”]];然后<只在驱动器>上运行此部分其他的<只在工人>上运行此部分fi<在司机和工人上运行此部分>
您还可以配置自定义环境变量并在初始化脚本中引用这些变量。
在环境变量中使用秘密
在引用秘密时,可以使用任何有效的变量名。对环境变量中引用的秘密的访问由配置集群的用户的权限决定。存储在环境变量中的秘密可以被集群的所有用户访问,但是会以正常方式从明文显示中编校,作为在其他地方引用的秘密。
详情请参见在环境变量中引用秘密.
日志记录
初始化脚本启动和完成事件在集群事件日志中捕获。详细信息在集群日志中捕获。全局init脚本创建、编辑和删除事件也在帐户级审计日志中捕获。
初始化脚本事件
集群事件日志捕获两个初始化脚本事件:INIT_SCRIPTS_STARTED
而且INIT_SCRIPTS_FINISHED
,指示哪些脚本计划执行,哪些脚本已成功完成。INIT_SCRIPTS_FINISHED
还捕获执行持续时间。
集群范围的初始化脚本由键指示“集群”
.
请注意
集群事件日志不会记录每个集群节点的初始化脚本事件;只选择一个节点来表示所有节点。
初始化脚本日志
如果集群日志传递为集群配置时,init脚本日志写入到/ < cluster-log-path > / < cluster-id > / init_scripts
.集群中每个容器的日志都被写入名为init_scripts / < cluster_id > _ < container_ip >
.例如,如果cluster-log-path
设置为cluster-logs
,特定容器的日志路径为:dbfs: / cluster-logs / < cluster-id > / init_scripts / < cluster_id > _ < container_ip >
.
如果集群被配置为将日志写入DBFS,则可以使用文件系统实用程序(dbutls .fs).
每次集群启动时,它都会向init脚本日志文件夹写入日志。
重要的
创建集群并启用集群日志传递的任何用户都可以查看stderr
而且stdout
全局初始化脚本的输出。您应该确保全局初始化脚本不输出任何敏感信息。
集群范围的初始化脚本
集群范围的初始化脚本是在集群配置中定义的初始化脚本。集群范围的初始化脚本适用于您创建的集群和为运行作业而创建的集群。由于脚本是集群配置的一部分,集群访问控制允许您控制谁可以更改脚本。
您可以使用UI或调用Clusters API来配置集群范围的初始化脚本。本节重点介绍使用UI执行这些任务。有关API,请参见集群API 2.0.
您可以添加任意数量的脚本,这些脚本将按照提供的顺序依次执行。
如果集群范围的init脚本返回非零退出码,则启动集群失败.通过配置,可以对集群范围的初始化脚本进行故障排除集群日志传递检查初始化脚本日志.
集群范围的初始化脚本示例
本节将展示两个初始化脚本示例。
示例:安装PostgreSQL JDBC驱动程序
下面在Python笔记本中运行的代码段创建了一个init脚本,用于安装PostgreSQL JDBC驱动程序。
创建一个用于存储初始化脚本的DBFS目录。这个例子使用了
dbfs: /砖/脚本
.dbutils.fs.mkdir(“dbfs: /砖/脚本/”)
创建一个名为
postgresql-install.sh
在这个目录下:dbutils.fs.把(“砖/脚本/ postgresql-install.sh”,”“”#!/bin/bashwget——quiet -O /mnt/driver-daemon/jars/postgresql-42.2.2.jar https://repo1.maven.org/maven2/org/postgresql/postgresql/42.2.2/postgresql-42.2.2.jar""",真正的)
检查脚本是否存在。
显示(dbutils.fs.ls(“dbfs: /砖/脚本/ postgresql-install.sh”))
示例:使用conda安装Python库
在Databricks Runtime 9.0及以上版本中,不能使用conda安装Python库。有关如何在集群上安装Python包的说明,请参见库.
重要的
Anaconda公司更新了他们的服务条款将于2020年9月在anaconda.org频道发布。根据新的服务条款,如果您依赖Anaconda的包装和分销,您可能需要商业许可证。看到水蟒商业版常见问题解答获取更多信息。你使用的任何蟒蛇通道是由他们的服务条款.
作为这个更改的结果,Databricks已经删除了Conda包管理器的默认通道配置。这是一个突破性的变化。必须更新初始化脚本中conda命令的用法,以指定使用的通道- c
.如果没有指定通道,conda命令将失败PackagesNotFoundError
.
在Databricks Runtime 8.4 ML及以下版本中,使用Conda包管理器来安装Python包。要在集群初始化时安装Python库,可以使用如下脚本:
#!/bin/bash集-ex /databricks/python/bin/python/databricks/conda/etc/profile.d/conda.sh conda activate /databricks/python conda install -c conda-forge -y astropy .sh
配置一个集群范围的初始化脚本
您可以通过UI或API配置集群运行初始化脚本。
重要的
该脚本必须存在于配置的位置。如果脚本不存在,集群将无法启动或无法自动扩展。
初始化脚本不能大于64KB。如果脚本超过这个大小,集群将无法启动,集群日志中将出现一条失败消息。
全局初始化脚本
全局init脚本运行在工作区中创建的每个集群上。当您希望强制组织范围的库配置或安全屏幕时,全局init脚本非常有用。只有管理员可以创建全局初始化脚本。您可以使用UI或REST API创建它们。
重要的
小心使用全局初始化脚本:
很容易添加库或进行其他修改,从而导致无法预料的影响。尽可能使用集群范围的初始化脚本。
创建集群并启用集群日志传递的任何用户都可以查看
stderr
而且stdout
全局初始化脚本的输出。您应该确保全局初始化脚本不输出任何敏感信息。
可以通过配置全局初始化脚本进行故障排除集群日志传递检查初始化脚本日志.
使用UI添加全局初始化脚本
使用管理控制台配置全局初始化脚本:
转到管理控制台并单击全局初始化脚本选项卡。
点击+添加.
命名脚本,并通过键入、粘贴或拖动文本文件到脚本字段。
请注意
初始化脚本不能大于64KB。如果脚本超过该大小,则在尝试保存时出现错误消息。
如果您为工作区配置了多个全局init脚本,请设置新脚本运行的顺序。
如果您希望在保存后为所有新的和重新启动的集群启用该脚本,请切换启用.
重要的
当您添加全局init脚本或更改名称、运行顺序或启用init脚本时,这些更改直到重新启动集群才会生效。
点击添加.
使用Terraform添加全局初始化脚本
方法添加全局初始化脚本Databricks Terraform提供商而且databricks_global_init_script.
使用API配置全局初始化脚本
控件,管理员可以在工作区中添加、删除、重新排序和获取有关全局init脚本的信息全局初始化脚本API 2.0.