开始
加载和管理数据
处理数据
政府
参考资料及资源
2023年1月13日更新
给我们反馈
本文包含演示如何使用Databricks REST API的示例。
在下面的示例中,替换< databricks-instance >与工作空间的URL您的Databricks部署。
< databricks-instance >
请注意
作为安全最佳实践,当使用自动化工具、系统、脚本和应用程序进行身份验证时,Databricks建议您使用属于的访问令牌服务主体而不是工作空间用户。要为服务主体创建访问令牌,请参见管理服务主体的访问令牌。
要了解如何对REST API进行身份验证,请查看使用Databricks个人访问令牌进行身份验证。
本文中的示例假设您正在使用Databricks个人访问令牌。在下面的示例中,替换< your-token >使用您的个人访问令牌。的旋度示例假设您将Databricks API凭据存储在. netrc。Python示例使用持票人身份验证。尽管示例显示了在代码中存储令牌,但为了在Databricks中安全地利用凭据,我们建议您遵循保密管理用户指南。
< your-token >
旋度
本例使用Databricks REST API 2.0版本。
旋度-n -H“接受编码:gzip”https://< databrickks -instance>/api/2.0/clusters/list > clusters.gz
单个API调用上传的数据量不能超过1MB。要将大于1MB的文件上传到DBFS,请使用streaming API,它是创建,addBlock,关闭。
创建
addBlock
关闭
下面是如何使用Python执行此操作的示例。本例使用Databricks REST API 2.0版本。
进口json进口请求进口base64域=' < databricks-instance >”令牌=' < your-token >”BASE_URL=“https://% s/ api / 2.0 / dbfs /”%(域)defdbfs_rpc(行动,身体):一个辅助函数,用于发出DBFS API请求,请求/响应被编码/解码为JSON """响应=请求。帖子(BASE_URL+行动,头={“授权”:不记名的% s'%令牌},json=身体)返回响应。json()#创建一个句柄,用于添加块处理=dbfs_rpc(“创造”,{“路径”:“/ temp / upload_large_file”,“覆盖”:“真正的”}) (“处理”]与开放(' / /地方/文件')作为f:而真正的:#一个块最多可以是1MB块=f。读(1<<20.)如果不块:打破数据=base64。standard_b64encode(块)dbfs_rpc(“addblock”,{“处理”:处理,“数据”:数据})#关闭手柄以完成上传dbfs_rpc(“关闭”,{“处理”:处理})
下面的示例展示了如何使用Databricks REST API和请求Python HTTP库。本例使用Databricks REST API 2.0版本。
进口请求域=' < databricks-instance >”令牌=' < your-token >”响应=请求。帖子(“https://% s/ api / 2.0 /集群/创建”%(域),头={“授权”:不记名的% s'%令牌},json={“cluster_name”:“my-cluster”,“spark_version”:“5.5.x-scala2.11”,“node_type_id”:“i3.xlarge”,“spark_env_vars”:{“PYSPARK_PYTHON”:“砖/ python3 / bin / python3”},“num_workers”:25})如果响应。status_code==200:打印(响应。json() (“cluster_id”])其他的:打印("启动群集错误:% s:% s"%(响应。json() (“error_code”],响应。json() (“消息”)))
下面的示例展示了如何启动高并发模式集群使用Databricks REST API。本例使用Databricks REST API 2.0版本。
curl -n -X POST -H“application / json内容类型:- d”{:“cluster_name high-concurrency-cluster”,:“spark_version 7.3.x-scala2.12”,:“node_type_id i3.xlarge”," spark_conf ": {:“spark.databricks.cluster.profile serverless”,:“spark.databricks.repl.allowedLanguages sql, python, r”}," aws_attributes ": {:“zone_id us-west-2c”,“first_on_demand”:1、“可用性”:“SPOT_WITH_FALLBACK”,“spot_bid_price_percent”:100}," custom_tags ": {:“ResourceClass Serverless”},"自动定量":{“min_workers”:1、“max_workers”:2},“autotermination_minutes”:10} 'https:// < databricks-instance > / api / 2.0 /集群/创建
本节展示如何创建Python、spark submit和JAR作业,以及如何运行JAR作业并查看其输出。
这个例子展示了如何创建一个Python作业。它使用Apache Spark Python Spark Pi估计。本例使用Databricks REST API 2.0版本。
下载Python文件包含示例并将其上传到什么是数据库文件系统(DBFS)?使用Databricks CLI设置和文档。
DBFS:/docs/pi.py
创建工作。
以下示例演示如何使用砖运行时和光砖。
砖运行时
curl -n -X POST -H“application / json内容类型:- d\”{"name": "SparkPi Python作业"," new_cluster ": {:“spark_version 7.3.x-scala2.12”,:“node_type_id i3.xlarge”,“num_workers”:2}," spark_python_task ": {:“python_file dbfs: / docs / pi.py”,“参数”:(“10”]}} 'https:// < databricks-instance > / api / 2.0 /工作/创建
光砖
curl -n -X POST -H“application / json内容类型:- d\”{"name": "SparkPi Python作业"," new_cluster ": {:“spark_version apache-spark-2.4.x-scala2.11”,:“node_type_id i3.xlarge”,“num_workers”:2}," spark_python_task ": {:“python_file dbfs: / docs / pi.py”,“参数”:(“10”]}} 'https:// < databricks-instance > / api / 2.0 /工作/创建
这个例子展示了如何创建spark-submit作业。它使用Apache SparkSparkPi例子和Databricks REST API 2.0版本。
下载JAR包含示例并将JAR上传到什么是数据库文件系统(DBFS)?使用Databricks CLI设置和文档。
dbfs:/docs/sparkpi.jar
curl - n\-x post -h“application / json内容类型:- d\”{"name": "SparkPi spark-submit job"," new_cluster ": {:“spark_version 7.3.x-scala2.12”,:“node_type_id r3.xlarge”,"aws_attributes": {"availability": "ON_DEMAND"},“num_workers”:2}," spark_submit_task ": {“参数”:(”——阶级”,“org.apache.spark.examples.SparkPi”,“dbfs: / docs / sparkpi.jar”,“10”]}} 'https:// < databricks-instance > / api / 2.0 /工作/创建
这个例子展示了如何创建一个spark-submit作业来运行R脚本。本例使用Databricks REST API 2.0版本。
将R文件上传到什么是数据库文件系统(DBFS)?使用Databricks CLI设置和文档。
DBFS cp your_codeRdbfs:/path/to/your_code.R
如果代码使用SparkR,则必须首先安装该包。Databricks Runtime包含SparkR源代码。在本地目录下安装SparkR包,示例如下:
install.packages(“/砖/火花/ R /包裹”,回购=零)图书馆(SparkR)sparkR.session()n<-nrow(createDataFrame(虹膜))write.csv(n,“/ dbfs /道路/ / num_rows.csv”)
Databricks Runtime从CRAN安装最新版本的sparklyr。如果代码使用了sparklyr,则必须在spark_connect。要形成Spark主URL,请使用SPARK_LOCAL_IP环境变量获取IP,并使用默认端口7077。例如:
spark_connect
SPARK_LOCAL_IP
图书馆(sparklyr)主<-粘贴(“火花:/ /”,Sys.getenv(“SPARK_LOCAL_IP”),”:7077”,9月=”“)sc<-spark_connect(主)iris_tbl<-copy_to(sc,虹膜)write.csv(iris_tbl,“/ dbfs /道路/ / sparklyr_iris.csv”)
curl - n\-x post -h“application / json内容类型:\- d”{"name": "R script spark-submit job"," new_cluster ": {:“spark_version 7.3.x-scala2.12”,:“node_type_id i3.xlarge”,"aws_attributes": {"availability": "SPOT"},“num_workers”:2}," spark_submit_task ": {"parameters": ["dbfs:/path/to/your_code. "R”)}} 'https:// < databricks-instance > / api / 2.0 /工作/创建
这将返回作业标识然后可以使用它来运行作业。
作业标识
命令运行作业作业标识。
curl - n\-x post -h“application / json内容类型:\- d'{"job_id": }'https:// < databricks-instance > / api / 2.0 /工作/运行
这个例子展示了如何创建和运行一个JAR作业。它使用Apache SparkSparkPi例子和Databricks REST API 2.0版本。
下载JAR包含示例的。
使用API将JAR上传到你的Databricks实例:
curl - n\- ffiledata=@“SparkPi-assembly-0.1.jar”\- f路径=“/ docs / sparkpi.jar”\- f覆盖=真正的\https:// < databricks-instance > / api / 2.0 / dbfs /把
一个成功的电话返回{}。否则,您将看到一条错误消息。
{}
在创建作业之前获取所有Spark版本的列表。
Curl -n https://< databrickks -instance>/api/2.0/clusters/spark-versions . html
这个例子使用7.3.x-scala2.12。看到运行时版本字符串以获取有关Spark集群版本的更多信息。
7.3.x-scala2.12
创建工作。JAR被指定为一个库,主类名在Spark JAR任务中被引用。
curl -n -X POST -H“application / json内容类型:\- d”{"name": "SparkPi JAR job"," new_cluster ": {:“spark_version 7.3.x-scala2.12”,:“node_type_id r3.xlarge”,"aws_attributes": {"availability": "ON_DEMAND"},“num_workers”:2},"libraries": [{"jar": "dbfs:/docs/sparkpi.jar"}]," spark_jar_task ": {:“main_class_name org.apache.spark.examples.SparkPi”,“参数”:“10”}} 'https:// < databricks-instance > / api / 2.0 /工作/创建
使用以下命令运行作业运行现在:
运行现在
导航到https:// < databricks-instance > / #工作/ <作业id >您将能够看到您的工作正在运行。
https:// < databricks-instance > / #工作/ <作业id >
您还可以使用从前一个请求返回的信息从API检查它。
Curl -n https://< databrickks -instance>/api/2.0/jobs/runs/get=<运行id >|金桥
它应该返回如下内容:
{“job_id”:35,“run_id”:30.,“number_in_job”:1,“original_attempt_run_id”:30.,“状态”:{“life_cycle_state”:“终止”,“result_state”:“成功”,“state_message”:”“},“任务”:{“spark_jar_task”:{“jar_uri”:”“,“main_class_name”:“org.apache.spark.examples.SparkPi”,“参数”:(“10”],“run_as_repl”:真正的}},“cluster_spec”:{“new_cluster”:{“spark_version”:“7.3.x-scala2.12”,“node_type_id”:“<节点类型>”,“enable_elastic_disk”:假,“num_workers”:1},“库”:({“罐子”:“dbfs: / docs / sparkpi.jar”}]},“cluster_instance”:{“cluster_id”:“0412 - 165350 type465”,“spark_context_id”:“5998195893958609953”},“start_time”:1523552029282,“setup_duration”:211000,“execution_duration”:33000,“cleanup_duration”:2000,“触发”:“ONE_TIME”,“creator_user_name”:“…”,“run_name”:“SparkPi JAR job”,“run_page_url”:“< databricks-instance > / ?o = 3901135158661429 # 35 /运行/工作/ 1”,“run_type”:“JOB_RUN”}
要查看作业输出,请访问作业运行详情页面。
执行命令,时间=1523552263909.π是约3.13973913973914
要创建启用表访问控制的集群,请指定以下内容spark_conf属性。本例使用Databricks REST API 2.0版本。
spark_conf
curl -X POST https://< databrickks -instance>/api/2.0/clusters/create'{:“cluster_name my-cluster”,:“spark_version 7.3.x-scala2.12”,:“node_type_id i3.xlarge”," spark_conf ": {“spark.databricks.acl.dfAclsEnabled”:没错,“spark.databricks.repl。allowedLanguages”:“python, sql”}," aws_attributes ": {“可用性”:“点”,:“zone_id us-west-2a”},“num_workers”:1、" custom_tags ": {“costcenter”:“标签”,:“applicationname Tags1”}} '
除了可以在Spark UI中查看Spark驱动和执行日志外,Databricks还可以将日志发送到DBFS和S3目的地。请参见以下示例。
下面的cURL命令创建一个名为cluster_log_dbfs并请求Databricks将其日志发送到dbfs: /日志以集群ID作为路径前缀。本例使用Databricks REST API 2.0版本。
cluster_log_dbfs
dbfs: /日志
curl -n -X POST -H“application / json内容类型:- d\”{:“cluster_name cluster_log_dbfs”,:“spark_version 7.3.x-scala2.12”,:“node_type_id i3.xlarge”,“num_workers”:1、" cluster_log_conf ": {" dbfs ": {“目的地”:“dbfs: /日志”}}} 'https:// < databricks-instance > / api / 2.0 /集群/创建
响应应该包含集群ID:
{“cluster_id”:“1111 - 223344 abc55”}
创建集群后,Databricks每5分钟向目标同步一次日志文件。它上传驱动程序日志到dbfs: /日志/ 1111 - 223344 abc55 /司机执行者登录到dbfs: /日志/ 1111 - 223344 abc55 /执行人。
dbfs: /日志/ 1111 - 223344 abc55 /司机
dbfs: /日志/ 1111 - 223344 abc55 /执行人
Databricks支持使用集群实例配置文件将日志传递到S3位置。下面的命令创建一个名为cluster_log_s3并请求Databricks将其日志发送到s3: / /桶/日志使用指定的实例配置文件。本例使用Databricks REST API 2.0版本。
cluster_log_s3
s3: / /桶/日志
curl -n -X POST -H“application / json内容类型:d\”{:“cluster_name cluster_log_s3”,:“spark_version 7.3.x-scala2.12”," aws_attributes ": {“可用性”:“点”,:“zone_id us-west-2c”,:“instance_profile_arn攻击:aws:我::12345678901234:instance-profile / YOURIAM”},“num_workers”:1、" cluster_log_conf ": {" s3 ": {“目的地”:“s3: / /桶/日志”,“地区”:“us-west-2”}}} 'https:// < databricks-instance > / api / 2.0 /集群/创建
Databricks使用相应的实例配置文件将日志发送到S3目的地。Databricks支持Amazon S3-Managed Keys (SSE-S3)和AWS KMS-Managed Keys (SSE-KMS)加密。看到S3桶中的数据加密获取详细信息。
重要的
您应该确保实例配置文件的IAM角色具有将日志上传到S3目的地并在之后读取它们的权限。使用canned_acl在API请求中更改默认权限。
canned_acl
您可以通过API检索带有日志交付状态的集群信息。本例使用Databricks REST API 2.0版本。
旋度-n -H“application / json内容类型:- d\”{“cluster_id”:“1111 - 223344 abc55”} 'https:// < databricks-instance > / api / 2.0 /集群/
如果最近一批日志上传成功,响应应该只包含最后一次尝试的时间戳:
{“cluster_log_status”:{“last_attempted”:1479338561}}
如果出现错误,则会在响应中出现错误消息:
{“cluster_log_status”:{“last_attempted”:1479338561,“last_exception”:“例外:拒绝访问……”}}
下面是一些使用Workspace API列出、获取有关、创建、删除、导出和导入工作空间对象的示例。
下面的cURL命令列出了工作空间中的路径。本例使用Databricks REST API 2.0版本。
curl -n -X GET -H“application / json内容类型:- d\”{“路径”:“/用户/ user@example.com/”} 'https:// < databricks-instance > / api / 2.0 /工作区/列表
响应应包含状态列表:
{“对象”:({“object_type”:“目录”,“路径”:“/用户/ user@example.com/folder”},{“object_type”:“笔记本”,“语言”:“巨蟒”,“路径”:“/用户/ user@example.com/notebook1”},{“object_type”:“笔记本”,“语言”:“SCALA”,“路径”:“/用户/ user@example.com/notebook2”}]}
如果路径是一个笔记本,则响应包含一个数组,其中包含输入笔记本的状态。
下面的cURL命令获取工作区中路径的状态。本例使用Databricks REST API 2.0版本。
curl -n -X GET -H“application / json内容类型:- d\”{“路径”:“/用户/ user@example.com/”} 'https:// < databricks-instance > / api / 2.0 / workspace /获得状态
响应应该包含输入路径的状态:
{“object_type”:“目录”,“路径”:“/用户/ user@example.com”}
下面的cURL命令创建一个文件夹。它像这样递归地创建文件夹mkdir- p。如果文件夹已经存在,它将不执行任何操作并成功执行。本例使用Databricks REST API 2.0版本。
mkdir- p
curl -n -X POST -H“application / json内容类型:- d\”{“路径”:“/用户/ user@example.com/new/folder”} 'https:// < databricks-instance > / api / 2.0 / workspace / mkdir
如果请求成功,将返回一个空JSON字符串。
下面的cURL命令删除一个笔记本或文件夹。你可以启用递归递归删除非空文件夹。本例使用Databricks REST API 2.0版本。
递归
curl -n -X POST -H“application / json内容类型:- d\”{“路径”:“/用户/ user@example.com/new/folder”,“递归”:“假”} 'https:// < databricks-instance > / api / 2.0 / workspace /删除
如果请求成功,则返回一个空JSON字符串。
下面的cURL命令导出一个笔记本。导出笔记本的格式如下:源,超文本标记语言,JUPYTER,DBC。导出的文件夹类型只能为DBC。本例使用Databricks REST API 2.0版本。
源
超文本标记语言
JUPYTER
DBC
curl -n -X GET\- d'{"path": "/Users/user@example.com/notebook", "format": "SOURCE"}'\https:// < databricks-instance > / api / 2.0 /工作区/出口
响应包含base64编码的笔记本内容。
{“内容”:“Ly8gRGF0YWJyaWNrcyBub3RlYm9vayBzb3VyY2UKcHJpbnQoImhlbGxvLCB3b3JsZCIpCgovLyBDT01NQU5EIC0tLS0tLS0tLS0KCg = = "}
您也可以直接下载导出的笔记本。
curl -n -X GET“https:// < databricks-instance > / api / 2.0 / workspace /出口?格式= SOURCE&direct_download =正确道路= /用户/ user@example.com/notebook”
响应将是导出的笔记本内容。
下面的cURL命令在工作区中导入一个笔记本。多种格式(源,超文本标记语言,JUPYTER,DBC)。如果格式是源,您必须指定语言。的内容参数包含base64编码的笔记本内容。你可以启用覆盖覆盖现有的笔记本。本例使用Databricks REST API 2.0版本。
格式
语言
内容
覆盖
curl -n -X POST -H“application / json内容类型:- d\”{“路径”:“/用户/ user@example.com/new-notebook”,“格式”:“源”,“语言”:“SCALA”,“内容”:“Ly8gRGF0YWJyaWNrcyBub3RlYm9vayBzb3VyY2UKcHJpbnQoImhlbGxvLCB3b3JsZCIpCgovLyBDT01NQU5EIC0tLS0tLS0tLS0KCg = = ",“覆盖”:“假”} 'https:// < databricks-instance > / api / 2.0 / workspace /导入
或者,您可以通过多部分表单导入笔记本。
curl -n -X POST https://< databrickks -instance>/api/2.0/workspace/import\- f路径=“/用户/ user@example.com/new-notebook”- f格式=源- f语言=SCALA - f覆盖=真正的- f内容=@notebook.scala