Snowpark Submit 参考¶
有了 Snowpark Submit,您可以使用熟悉的 Spark 语义在 Snowflake 上运行面向批处理的非交互式 Spark 工作负载。
备注
snowpark-submit 支持的功能与 spark-submit 大致相同。但是,由于在 Snowflake 上运行 Spark 工作负载时不需要某些功能,因此省略了这些功能。
语法¶
snowpark-submit
--name <application_name>
--exclude-packages <package_to_exclude> [, <package_to_exclude>, ...]
--py-files <files_to_place_on_path>
--conf <spark_config_property=value> [<spark_config_property=value> ...]
--properties-file <path_to_properies_file>
--help, -h
--verbose, -v
--version
--account <snowflake_account>
--user <snowflake_user>
--authenticator <snowflake_authenticator>
--token-file-path <snowflake_token_file_path>
--password <snowflake_password>
--role <snowflake_role>
--host <snowflake_host>
--database <snowflake_database_name>
--schema <snowflake_schema_name>
--warehouse <snowflake_warehouse_name>
--compute-pool <snowflake_compute_pool>
--comment <comment>
--snowflake-stage <snowflake_stage>
--external-access-integrations <snowflake_external_access_integrations> [, ...]
--snowflake-log-level <snowflake_log_level>
--snowflake-workload-name <snowflake_workload_name>
--snowflake-connection-name <snowflake_connection_name>
--workload-status
--display-logs
--wait-for-completion
<application.jar | application.py> [<application_arguments>]
实参¶
application.jar | application.py
包含应用程序和依赖项的文件路径。
[application arguments]
传递给应用程序主方法的特定应用程序实参。
选项¶
--name NAME
您的应用程序的名称。
--exclude-packages [EXCLUDE_PACKAGES ...]
以逗号分隔的 groupId:artifactId 对列表,用于在解析
--packages
中提供的依赖关系时将其排除,以避免依赖关系冲突。--py-files PY_FILES
要放在 Python 应用程序的 PYTHONPATH 上的以逗号分隔的
.zip
、.egg
或.py
文件列表。--conf [PROP=VALUEPROP=VALUE ...]
任意 Spark 配置属性。
--properties-file FILE
要从中加载额外属性的文件的路径。如果未指定,将查找 conf/spark-defaults.conf。
--help, -h
显示帮助消息并退出。
--verbose, -v
打印其他调试输出。
--version
打印当前 Spark 版本。
Snowflake 特定选项¶
--account SNOWFLAKE_ACCOUNT
要使用的 Snowflake 账户。如果已指定,则替换
connections.toml
文件中的账户。--user SNOWFLAKE_USER
要使用的 Snowflake 用户。如果已指定,则替换
connections.toml
文件中的用户。--authenticator SNOWFLAKE_AUTHENTICATOR
Snowflake 登录的身份验证器。如果已指定,则替换
connections.toml
文件中的身份验证器。如果未指定,则默认为用户密码身份验证器。--token-file-path SNOWFLAKE_TOKEN_FILE_PATH
包含 Snowflake OAuth 令牌的文件路径。如果已指定,则替换
connections.toml
文件中的令牌文件路径。--password SNOWFLAKE_PASSWORD
Snowflake 用户的密码。如果已指定,则替换
connections.toml
文件中的密码。--role SNOWFLAKE_ROLE
要使用的 Snowflake 角色如果已指定,则替换
connections.toml
文件中的角色。--host SNOWFLAKE_HOST
用于 Snowflake 部署的主机如果已指定,则替换
connections.toml
文件中的主机。--database SNOWFLAKE_DATABASE_NAME
要在会话中使用的 Snowflake 数据库。如果已指定,则替换
connections.toml
文件中的数据库。--schema SNOWFLAKE_SCHEMA_NAME
要在会话中使用的 Snowflake 架构。如果已指定,则替换
connections.toml
文件中的架构。--warehouse SNOWFLAKE_WAREHOUSE_NAME
要在会话中使用的 Snowflake 仓库。如果已指定,则替换
connections.toml
文件中的仓库。--compute-pool SNOWFLAKE_COMPUTE_POOL
用于运行所提供的工作负载的 Snowflake 计算池。如果已指定,则替换
connections.toml
文件中的计算池。--comment COMMENT
与工作负载相关的消息。可用于识别 Snowflake 中的工作负载。
--snowflake-stage SNOWFLAKE_STAGE
上传工作负载文件的 Snowflake 暂存区。
--external-access-integrations [SNOWFLAKE_EXTERNAL_ACCESS_INTEGRATIONS ...]
工作负载所需的 Snowflake 外部访问集成。
--snowflake-log-level SNOWFLAKE_LOG_LEVEL
Snowflake 事件表的日志级别 –
'INFO'
、'ERROR'
、'NONE'
。(默认值:INFO)。--snowflake-workload-name SNOWFLAKE_WORKLOAD_NAME
要在 Snowflake 中运行的工作负载的名称。
--snowflake-connection-name SNOWFLAKE_CONNECTION_NAME
connections.toml
文件中用作基本配置的连接的名称。命令行实参将替换connections.toml
文件中的任何值。--workload-status
打印工作负载的详细状态。
--display-logs
已指定
--workload-status
时,是否将应用程序日志打印到控制台。--wait-for-completion
在集群模式下,已指定时,以阻塞模式运行工作负载并等待完成。
--requirements-file REQUIREMENTS_FILE
包含要在运行工作负载之前安装的 Python 包依赖项的 requirements.txt 文件的路径。需要 PyPI 外部访问集成。
--wheel-files WHEEL_FILES
要在运行 Python 工作负载前安装的以逗号分隔的 .whl 文件列表。用于 PyPI 上不可用的私有依赖项。
常见选项示例¶
应用程序部署¶
Snowflake 的 Snowpark Container Services (SPCS) 是运行 Spark 应用程序的主要基础设施。您需要提前创建 SPCS 计算池。
基本 Python 应用程序¶
要在集群模式下部署基本 Python 应用程序,请执行以下操作:
snowpark-submit \
--snowflake-workload-name MY_PYTHON_JOB \
--snowflake-connection-name MY_CONNECTION_CONFIG_NAME
app.py arg1 arg2
身份验证¶
Snowpark Submit 提供了使用 Snowflake 进行身份验证的各种方法。必须使用至少一种方法。连接配置文件和直接身份验证可以一起使用,也可以单独使用。当命令行选项也存在时,它会替换连接配置文件中的相应字段。
连接配置文件¶
要使用预先配置的 Snowflake 连接配置文件,请执行以下操作:
snowpark-submit \
--snowflake-connection-name my_connection \
--snowflake-workload-name MY_JOB \
app.py
直接身份验证¶
用户名和密码¶
要直接在命令中提供身份验证详细信息,请执行以下操作:
snowpark-submit \
--host myhost \
--account myaccount \
--user myuser \
--password mypassword \
--role myrole \
--snowflake-workload-name MY_JOB \
app.py
OAuth¶
要使用 OAuth 令牌进行身份验证,请执行以下操作:
snowpark-submit \
--host myhost \
--account myaccount \
--authenticator oauth \
--token-file-path /path/to/token.txt \
--snowflake-workload-name MY_JOB \
--compute-pool MY_COMPUTE_POOL \
app.py
Snowflake 资源¶
要为您的作业指定 Snowflake 数据库、架构、仓库和计算池,请执行以下操作:
snowpark-submit \
--database MY_DB \
--schema MY_SCHEMA \
--warehouse MY_WH \
--snowflake-workload-name MY_JOB \
--snowflake-connection-name MY_CONNECTION \
app.py
Snowflake 暂存区¶
您可以使用 Snowpark Submit 直接在 Snowflake 暂存区上存储和访问文件。
要在 Snowflake 暂存区上使用文件提交作业,请执行以下操作:
snowpark-submit \
--snowflake-stage @my_stage \
--snowflake-workload-name MY_JOB \
--snowflake-connection-name MY_CONNECTION \
@my_stage/app.py
依赖项管理¶
您可以管理应用程序的依赖项。
Python 依赖项¶
要指定应用程序所需的其他 Python 文件或存档,请执行以下操作:
snowpark-submit \
--py-files dependencies.zip,module.py \
--snowflake-workload-name MY_PYTHON_JOB \
--snowflake-connection-name MY_CONNECTION \
app.py
监控和控制¶
您可以有效地监控和控制 Snowpark Submit 作业。
等待作业完成¶
默认情况下,Snowpark Submit 会启动作业并立即返回。要在阻塞模式下运行并等待作业完成,请执行以下操作:
snowpark-submit \
--snowflake-connection-name my_connection \
--snowflake-workload-name MY_JOB \
--wait-for-completion \
app.py
wait-for-completion
标志使命令阻塞直到作业完成(成功或失败),显示定期状态更新。这对于需要在继续执行其他任务(例如使用 Apache Airflow 时)前确保任务完成的工作流程很有用。
检查工作负载状态¶
检查工作负载的状态(正在运行或已完成)。
snowpark-submit --snowflake-connection-name my_connection --snowflake-workload-name MY_JOB --workload-status
此命令返回有关工作负载的以下信息:
当前状态(
DEPLOYING
、RUNNING
、SUCCEEDED
、FAILED
)开始时间和持续时间
服务详细信息
查看应用程序日志¶
要查看详细日志以及工作负载状态,请执行以下操作:
snowpark-submit --snowflake-connection-name my_connection --snowflake-workload-name MY_JOB --workload-status --display-logs
display-logs
标志将提取应用程序的输出日志并将其打印到控制台。使用这些日志,您可以执行以下任务:
调试应用程序错误
监控执行进度
查看应用程序输出
备注
日志准备好提取的延迟很小,从几秒钟到一分钟不等。当不使用事件表存储日志数据时,日志仅保留很短的时间,例如五分钟或更短。
高级配置¶
使用高级配置微调 Snowpark Submit 作业。
外部访问集成¶
从 Spark 应用程序连接到外部服务:
snowpark-submit \
--external-access-integrations "MY_NETWORK_RULE,MY_STORAGE_INTEGRATION" \
--snowflake-workload-name MY_JOB \
--snowflake-connection-name my_connection \
app.py
日志记录级别配置¶
控制应用程序在 Snowflake 事件表中的日志记录级别:
snowpark-submit \
--snowflake-log-level INFO \
--snowflake-workload-name MY_JOB \
--snowflake-connection-name MY_CONNECTION \
app.py
--snowflake-log-level 选项:INFO、ERROR、NONE。
添加作业上下文¶
在 Snowflake 中添加描述性注释,以便识别工作负载:
snowpark-submit \
--comment "Daily data processing job" \
--snowflake-workload-name MY_JOB \
--snowflake-connection-name my_connection \
app.py