在Amazon S3中处理数据

Databricks为连接AWS S3维护了优化的驱动程序。Amazon S3是用于存储大量非结构化对象数据(如文本或二进制数据)的服务。

本文将介绍如何访问AWS S3桶。

重要的

  • S3A文件系统默认启用缓存,并在' filessystem .close() '上释放资源。为了避免其他线程错误地使用缓存文件系统的引用,不要显式地使用` filessystem .close()。

  • S3A文件系统在关闭输出流时不删除目录标记。基于Hadoop版本的遗留应用程序不包含hadoop - 13230即使里面有文件,也可能误解为空目录。

请注意

如果要查找有关使用挂载的S3数据的信息,请参见在Databricks上挂载云对象存储

使用Unity Catalog外部位置访问S3桶

Unity Catalog管理访问S3桶中的数据使用外部位置.管理员主要使用外部位置来配置Unity Catalog外部表,但也可以使用可用的特权将访问权限委托给用户或组(文件文件,创建表格).

使用完全限定的S3 URI访问Unity Catalog保护的数据。因为权限是由Unity Catalog管理的,所以您不需要为身份验证传递任何额外的选项或配置。

警告

Unity Catalog在访问由外部位置管理的数据时忽略Spark配置设置。

阅读的例子:

dbutilsfsls“s3: / /桶/外部位置的路径/ /数据”火花格式“铺”负载“s3: / /桶/外部位置的路径/ /数据”火花sql"SELECT * FROM parquet. ' s3://my-bucket/external-location/path/to/data ' "

写作的例子:

dbutilsfsmv“s3: / /桶/外部位置的路径/ /数据”“s3: / /桶/外部位置的路径/ /新位置”df格式“铺”保存“s3: / /桶/外部位置的路径/ /新位置”

创建外部表的例子:

df选项“路径”“s3: / /桶/外部位置的路径/ /表”saveAsTable“my_table”火花sql”“”创建表my_table位置“s3: / /桶/外部位置的路径/ /表”As (select *)从parquet. s3: / /桶/外部位置的/道路/ /数据”)”“”

使用实例配置文件访问S3桶

您可以在Databricks中将IAM角色加载为实例配置文件,并将实例配置文件附加到集群以控制对S3的数据访问。Databricks建议当Unity Catalog对您的环境或工作负载不可用时使用实例配置文件。看到使用实例概要配置S3访问

使用uri和AWS密钥访问S3桶

该方法允许Spark worker使用AWS密钥直接访问S3桶中的对象。它使用Databricks秘密用来存储密钥。

access_keydbutils秘密得到范围“aws”关键“aws-access-key”secret_keydbutils秘密得到范围“aws”关键“aws-secret-key”sc_jschadoopConfiguration()“fs.s3a.access.key”access_keysc_jschadoopConfiguration()“fs.s3a.secret.key”secret_key如果您使用自动加载器文件通知模式来加载文件,请提供AWS区域ID。aws_region“aws-region-id”sc_jschadoopConfiguration()“fs.s3a.endpoint”“s3。”+aws_region+“.amazonaws.com”myRDDsc文本文件“s3a: / /% s/…………”aws_bucket_namemyRDD()

配置KMS加密s3a: / /路径

步骤1:配置实例配置文件

在“数据库”中创建实例配置文件

步骤2:将实例概要文件添加为配置中提供的KMS密钥的密钥用户

  1. 在AWS系统下,进入KMS服务。

  2. 单击要添加权限的键。

  3. 在“关键用户”区域,单击添加

  4. 选中IAM角色旁边的复选框。

  5. 点击添加

步骤3:设置加密属性

中设置全局KMS加密属性火花配置设置或使用init脚本.配置spark.hadoop.fs.s3a.server-side-encryption.key钥匙与您自己的钥匙ARN。

火花配置

spark.hadoop.fs.s3a.server-side-encryption.keyarn:aws:kms:::key/spark.hadoop.fs.s3a。server-side-encryption-algorithm SSE-KMS

您还可以配置每桶KMS加密

Init脚本

通过在笔记本单元格中运行以下代码来创建init脚本,配置全局加密设置set-kms.sh而且配置集群运行脚本。

dbutilsfs“砖/脚本/ set-kms.sh””“”#!/bin/bashcat >/databricks/driver/conf/aes-encrypt-custom-spark-conf.conf </databricks/driver/conf/aes-encrypt-custom-spark-conf.conf(司机){“spark.hadoop.fs.s3a.server-side-encryption。关键" = "arn:aws:kms:::key/"“spark.hadoop.fs.s3a。服务器端加密算法" = "SSE-KMS"终点”“”真正的

验证加密是否有效后,请在所有集群上使用全局初始化脚本

配置

Databricks Runtime 7.3 LTS及以上版本支持配置S3A文件系统开源Hadoop选项.可以配置全局属性和每桶属性。

全局配置

# S3全局配置spark.hadoop.fs.s3a.aws.credentials。供应商< aws-credentials-provider-class >spark.hadoop.fs.s3a。端点< aws-endpoint >spark.hadoop.fs.s3a。server-side-encryption-algorithm SSE-KMS

一桶配置

您可以使用语法配置每个桶的属性spark.hadoop.fs.s3a.bucket。< bucket名> . <配置键>.这允许您设置具有不同凭证、端点等的存储桶。

例如,除了全局S3设置外,您还可以使用以下键单独配置每个bucket:

#为特定桶设置认证和端点spark.hadoop.fs.s3a.bucket。< bucket名> .aws.credentials。供应商< aws-credentials-provider-class >spark.hadoop.fs.s3a.bucket。< bucket名>。端点< aws-endpoint >#配置不同桶的KMS加密密钥spark.hadoop.fs.s3a.bucket。< bucket名> .server-side-encryption。关键< aws-kms-encryption-key >

访问请求者支付桶

启用访问请求者支付桶,将下面的行添加到集群的桶中火花配置

spark.hadoop.fs.s3a.requester-pays。使真正的

请注意

Databricks不支持Delta Lake写入请求者支付桶。