在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配置设置。
阅读的例子:
dbutils.fs.ls(“s3: / /桶/外部位置的路径/ /数据”)火花.读.格式(“铺”).负载(“s3: / /桶/外部位置的路径/ /数据”)火花.sql("SELECT * FROM parquet. ' s3://my-bucket/external-location/path/to/data ' ")
写作的例子:
dbutils.fs.mv(“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_key=dbutils.秘密.得到(范围=“aws”,关键=“aws-access-key”)secret_key=dbutils.秘密.得到(范围=“aws”,关键=“aws-secret-key”)sc._jsc.hadoopConfiguration().集(“fs.s3a.access.key”,access_key)sc._jsc.hadoopConfiguration().集(“fs.s3a.secret.key”,secret_key)如果您使用自动加载器文件通知模式来加载文件,请提供AWS区域ID。aws_region=“aws-region-id”sc._jsc.hadoopConfiguration().集(“fs.s3a.endpoint”,“s3。”+aws_region+“.amazonaws.com”)myRDD=sc.文本文件(“s3a: / /% s/…………”%aws_bucket_name)myRDD.数()
配置KMS加密s3a: / /
路径
步骤1:配置实例配置文件
在“数据库”中创建实例配置文件.
步骤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
而且配置集群运行脚本。
dbutils.fs.把(“砖/脚本/ 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 >