警告
Spark Submit任务已弃用并即将被移除。 对于新用例,不允许使用此任务类型,强烈建议不要对现有客户使用。 有关此任务类型的原始文档,请参阅 Spark Submit(旧 版)。 继续阅读迁移说明。
为什么 Spark Submit 已弃用?
由于 JAR、Notebook 或 Python 脚本任务中不存在的技术限制和功能差距,Spark 提交任务类型已被弃用。 这些任务提供与 Databricks 功能更好的集成、改进的性能和可靠性。
弃用措施
Databricks 正在实施与即将淘汰相关的以下措施:
- 受限创建:仅从 2025 年 11 月开始使用 Spark 提交 任务的用户才能创建新的 Spark 提交 任务。 如果您需要特殊豁免,请联系您的账户支持。
- API 弃用通知:尝试创建或编辑 Spark 提交 任务的 API 请求可能会被随机拒绝,以处理弃用通知。 重试具有相同参数的请求,直到它们成功。
- DBR 版本限制: Spark 提交 使用仅限于现有 DBR 版本和维护版本。 使用 Spark Submit 的现有 DBR 版本将继续接收安全和 bugfix 维护版本,直到功能完全关闭。 DBR 17.3+ 和 18.x+ 不支持此任务类型。
- UI 警告:整个 Databricks UI 中会出现警告,当 Spark 提交 任务在使用时,通信将发送给属于现有用户帐户的工作区管理员。
将 JVM 工作负荷迁移到 JAR 任务
对于 JVM 工作负荷,请将 Spark 提交 任务迁移到 JAR 任务。 JAR 任务提供更好的功能支持和与 Databricks 的集成。
按照以下步骤迁移:
- 在作业中创建新的 JAR 任务。
- 在 Spark 提交 任务参数中,标识前三个参数。 它们通常遵循以下模式:
["--class", "org.apache.spark.mainClassName", "dbfs:/path/to/jar_file.jar"] - 删除
--class参数。 - 将主类名称(例如)
org.apache.spark.mainClassName设置为 JAR 任务的 Main 类 。 - 在 JAR 任务配置中提供 JAR 文件的路径(例如
dbfs:/path/to/jar_file.jar)。 - 将 Spark 提交 任务中的任何剩余参数复制到 JAR 任务参数。
- 运行 JAR 任务并验证它是否按预期工作。
有关配置 JAR 任务的详细信息,请参阅 JAR 任务。
迁移 R 工作负荷
如果要直接从 Spark 提交 任务启动 R 脚本,则可以使用多个迁移路径。
选项 A:使用笔记本任务
将 R 脚本迁移到 Databricks 笔记本。 笔记本任务支持一组完整的功能,包括群集自动缩放,并更好地与 Databricks 平台集成。
选项 B:从笔记本任务启动 R 脚本
使用 Notebook 任务启动 R 脚本。 使用以下代码创建笔记本,并将 R 文件引用为作业参数。 根据需要修改以添加 R 脚本使用的参数:
dbutils.widgets.text("script_path", "", "Path to script")
script_path <- dbutils.widgets.get("script_path")
source(script_path)
查找使用 Spark Submit 任务的作业
您可以使用以下 Python 脚本来识别工作区中您可查看的包含 Spark 提交任务的所有作业。 这有助于清点受影响的作业并规划迁移。 需要有效的 个人访问或其他令牌 ,并且应使用 工作区 URL 。
#!/usr/bin/env python3
"""
Requirements:
databricks-sdk>=0.20.0
Usage:
export DATABRICKS_HOST="https://your-workspace.cloud.databricks.com"
export DATABRICKS_TOKEN="your-token"
python list_spark_submit_jobs.py
Output:
CSV format with columns: Job ID, Owner ID/Email, Job Name
Incorrect:
export DATABRICKS_HOST="https://your-workspace.cloud.databricks.com/?o=12345678910"
"""
import csv
import os
import sys
from databricks.sdk import WorkspaceClient
def main():
# Get credentials from environment
workspace_url = os.environ.get("DATABRICKS_HOST")
token = os.environ.get("DATABRICKS_TOKEN")
if not workspace_url or not token:
print("Error: Set DATABRICKS_HOST and DATABRICKS_TOKEN environment variables", file=sys.stderr)
sys.exit(1)
# Initialize client
client = WorkspaceClient(host=workspace_url, token=token)
# Scan workspace for jobs with Spark Submit tasks
print("Scanning workspace for jobs with Spark Submit tasks... (this will take a while)", file=sys.stderr)
jobs_with_spark_submit = []
total_jobs = 0
for job in client.jobs.list(expand_tasks=True):
total_jobs += 1
# Check if job has any Spark Submit tasks
if job.settings and job.settings.tasks:
has_spark_submit = any(
task.spark_submit_task is not None
for task in job.settings.tasks
)
if has_spark_submit:
job_name = job.settings.name or f"Unnamed Job {job.job_id}"
owner_email = job.creator_user_name or "Unknown"
jobs_with_spark_submit.append({
'job_id': job.job_id,
'owner_email': owner_email,
'job_name': job_name
})
# Print summary to stderr
print(f"Scanned {total_jobs} jobs total", file=sys.stderr)
print(f"Found {len(jobs_with_spark_submit)} jobs with Spark Submit tasks", file=sys.stderr)
print("", file=sys.stderr)
# Output CSV to stdout
if jobs_with_spark_submit:
writer = csv.DictWriter(
sys.stdout,
fieldnames=['job_id', 'owner_email', 'job_name'],
quoting=csv.QUOTE_MINIMAL
)
writer.writeheader()
writer.writerows(jobs_with_spark_submit)
else:
print("No jobs with Spark Submit tasks found.", file=sys.stderr)
if __name__ == "__main__":
main()
需要帮助?
如果需要其他帮助,请联系帐户支持人员。