使用Amazon S3中的数据
砖保持优化的驱动程序连接到AWS S3。Amazon S3是一个服务来存储大量的非结构化的对象数据,如文本或二进制数据。
本文解释了如何访问AWS S3 bucket。
重要的
S3A文件系统启用默认缓存和释放资源的FileSystem.close ()”。为了避免其他线程使用缓存的引用文件系统错误,没有明确使用“FileSystem.close ()。
S3A文件系统不移除目录标记时关闭输出流。遗留应用程序基于Hadoop版本不包括hadoop - 13230可以误解他们即使里面有文件为空目录。
请注意
如果你正在寻找信息处理安装S3数据时,看到的安装云对象存储在砖上。
访问S3 bucket统一目录外的位置
统一目录管理访问S3 bucket中的数据使用外部位置。管理员主要使用外部位置配置统一目录外部表,但也可以委托使用可用的特权(访问用户或组读文件
,写文件
,创建表
)。
使用完全限定的S3的URI来访问数据安全与统一目录。由于统一权限管理目录,您不需要传递任何附加选项或配置进行身份验证。
警告
统一目录访问数据时忽略了火花配置设置由外部的位置。
阅读的例子:
dbutils。fs。ls(“s3: / /桶/外部位置的路径/ /数据”)火花。读。格式(“铺”)。负载(“s3: / /桶/外部位置的路径/ /数据”)火花。sql(“SELECT * FROM parquet. s3: / /桶/外部位置的/道路/ /数据的“)
写作的例子:
dbutils。fs。mv(“s3: / /桶/外部位置的路径/ /数据”,“s3: / /桶/外部位置的路径/ /新位置”)df。写。格式(“铺”)。保存(“s3: / /桶/外部位置的路径/ /新位置”)
创建外部表的例子:
df。写。选项(“路径”,“s3: / /桶/外部位置的路径/ /表”)。saveAsTable(“my_table”)火花。sql(”“”创建表my_table位置“s3: / /桶/外部位置的路径/ /表”(SELECT *从parquet. s3: / /桶/外部位置的/道路/ /数据”)”“”)
使用实例配置文件访问S3 bucket
可以加载我的角色在砖和附加实例配置文件的配置文件实例集群控制数据访问S3。砖时建议使用实例配置文件统一目录不可用对你的环境或工作负载。看到S3访问配置实例配置文件。
访问S3 bucket uri和AWS键
这种方法允许引发工人直接访问一个对象在一个S3 bucket使用AWS钥匙。它使用砖秘密存储键。
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。数()
配置公里加密s3a: / /
路径
步骤1:配置实例配置文件
在砖,创建一个实例配置文件。
步骤3:设置加密属性
建立全球公里加密属性火花配置设置或使用一个init脚本。配置spark.hadoop.fs.s3a.server-side-encryption.key
关键是用你自己的关键。
火花配置
spark.hadoop.fs.s3a.server-side-encryption.keyarn:aws:kms:::key/ spark.hadoop.fs.s3a。server-side-encryption-algorithm SSE-KMS
您还可以配置一桶公里加密。
Init脚本
配置全球加密设置在笔记本电池运行下面的代码来创建初始化脚本set-kms.sh
和配置一个集群运行脚本。
dbutils。fs。把(“砖/脚本/ set-kms.sh”,”“”# ! / bin / bash猫> / conf / aes-encrypt-custom-spark-conf /砖/驱动程序。参看< <生物(司机){“spark.hadoop.fs.s3a.server-side-encryption。关键" = "arn:aws:kms:::key/" “spark.hadoop.fs.s3a。server-side-encryption-algorithm SSE-KMS“=}终点”“”,真正的)
一旦你确认加密工作,配置在所有集群使用加密全球init脚本。
配置
砖运行时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设置您可以配置每个桶分别使用以下键:
#设置身份验证和端点为一个特定的桶spark.hadoop.fs.s3a.bucket。< bucket名> .aws.credentials。供应商< aws-credentials-provider-class >spark.hadoop.fs.s3a.bucket。< bucket名>。端点< aws-endpoint >#配置不同的公里加密密钥为一个特定的桶spark.hadoop.fs.s3a.bucket。< bucket名> .server-side-encryption。关键< aws-kms-encryption-key >