迁移指南:EMRFS 到 S3A 文件系统 - Amazon EMR

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

迁移指南:EMRFS 到 S3A 文件系统

从 EMR-7.10.0 版本开始,S3A 文件系统是所有 S3 文件方案 EMR 集群的默认 filesystem/s3 连接器,包括以下项:

  • s3:///

  • s3n://

  • s3a://

此更改适用于所有 EMR 部署(包括 EC2、EKS 和 EMR Serverless)。

如果您想继续使用 EMRFS,则可以通过向 core-site.xml 配置文件添加以下属性进行配置:

<property> <name>fs.s3.impl</name> <value>com.amazon.ws.emr.hadoop.fs.EmrFileSystem</value> </property>

将现有 EMRFS 配置迁移到 S3A 配置

注意

当满足特定条件时,Amazon EMR 会在 EMRFS 和 S3A 之间实施自动配置映射。当未定义 S3A 配置,但存在相应的 EMRFS 配置时,会自动发生映射过程。此自动映射功能会扩展到存储桶级别配置,从而实现 EMRFS 和 S3A 设置之间的无缝集成。例如,当您在 EMRFS 中使用值为“XYZ”的“fs.s3.bucket.amzn-s3-demo-bucket1.serverSideEncryption.kms.keyId”配置特定于存储桶的加密设置时,系统会通过将指定存储桶 amzn-s3-demo-bucket1 的“fs.s3a.encryption.key”设置为“XYZ”来自动将其映射到等效 S3A 配置。

以下预定义的 EMRFS 配置集将自动转换为相应的 S3A 配置等效项。目前通过集群或作业覆盖实现的任何配置都将无缝转换为 S3A 文件系统,无需额外的手动配置或修改。

默认情况下,此配置映射功能会自动激活。希望禁用此自动转换的用户可以通过向 core-site.xml 配置文件添加以下属性来实现。

<property> <name>fs.s3a.emrfs.compatibility.enable</name> <value>false</value> </property>
注意

只有当任一文件系统上启用了 SSE-KMS 或 CSE-KMS 加密时,才会发生从 EMRFS(fs.s3.serverSideEncryption.kms.keyId 或 fs.s3.cse.kms.keyId)到 S3A (fs.s3a.encryption.key) 的加密密钥映射。

EMRFS 到 S3A 配置映射
EMRFS 配置名称 S3A 配置名称
fs.s3.aimd.adjustWindow fs.s3a.aimd.adjustWindow
fs.s3.aimd.enabled fs.s3a.aimd.enabled
fs.s3.aimd.increaseIncrement fs.s3a.aimd.increaseIncrement
fs.s3.aimd.initialRate fs.s3a.aimd.initialRate
fs.s3.aimd.maxAttempts fs.s3a.aimd.maxAttempts
fs.s3.aimd.minRate fs.s3a.aimd.minRate
fs.s3.aimd.reductionFactor fs.s3a.aimd.reductionFactor
fs.s3.sts.endpoint fs.s3a.assumed.role.sts.endpoint
fs.s3.sts.sessionDurationSeconds fs.s3a.assumed.role.session.duration
fs.s3.authorization.roleMapping fs.s3a.authorization.roleMapping
fs.s3.authorization.ugi.groupName.enabled fs.s3a.authorization.ugi.groupName.enabled
fs.s3.credentialsResolverClass fs.s3a.credentials.resolver
fs.s3n.multipart.uploads.enabled fs.s3a.multipart.uploads.enabled
fs.s3n.multipart.uploads.split.size fs.s3a.multipart.size
fs.s3.serverSideEncryption.kms.customEncryptionContext fs.s3a.encryption.context
fs.s3.enableServerSideEncryption fs.s3a.encryption.algorithm
fs.s3.serverSideEncryption.kms.keyId / fs.s3.cse.kms.keyId fs.s3a.encryption.key
fs.s3.cse.kms.region fs.s3a.encryption.cse.kms.region
fs.s3.authorization.audit.enabled fs.s3a.authorization.audit.enabled
fs.s3.buckets.create.enabled fs.s3a.bucket.probe
fs.s3.delete.maxBatchSize fs.s3a.bulk.delete.page.size
fs.s3.filestatus.metadata.enabled fs.s3a.metadata.cache.enabled
fs.s3.maxConnections fs.s3a.connection.maximum
fs.s3.maxRetries fs.s3a.retry.limit
fs.s3.metadata.cache.expiration.seconds fs.s3a.metadata.cache.expiration.seconds
fs.s3.buffer.dir fs.s3a.buffer.dir
fs.s3.canned.acl fs.s3a.acl.default
fs.s3.positionedRead.optimization.enabled fs.s3a.positionedRead.optimization.enabled
fs.s3.readFullyIntoBuffers.optimization.enabled fs.s3a.readFullyIntoBuffers.optimization.enabled
fs.s3.signerType fs.s3a.signing-algorithm
fs.s3.storageClass fs.s3a.create.storage.class
fs.s3.threadpool.maxSize fs.s3a.threads.max
fs.s3.useRequesterPaysHeader fs.s3a.requester.pays.enabled
fs.s3n.block.size fs.s3a.block.size
fs.s3n.endpoint fs.s3a.endpoint
fs.s3n.ssl.enabled fs.s3a.connection.ssl.enabled
fs.s3.open.acceptsFileStatus fs.s3a.open.acceptsFileStatus
fs.s3.connection.maxIdleMilliSeconds fs.s3a.connection.idle.time
fs.s3.s3AccessGrants.enabled fs.s3a.access.grants.enabled
fs.s3.s3AccessGrants.fallbackToIAM fs.s3a.access.grants.fallback.to.iam

注意事项和限制

  • 除了 Trino 和 Presto 引擎之外,所有 EMR 引擎(Spark、MapReduce、Flink、Tez、Hive 等)都将使用 S3A 作为默认 S3 连接器。

  • EMR S3A 不支持与 EMR Ranger 集成。请考虑迁移到 AWS Lake Formation。

  • AWS Lake Formation 对 RecordServer 的支持,不支持带有 S3A 的 EMR Spark - 请考虑使用 Spark 原生 FGAC。

  • 不支持 AWS S3 Select。

  • S3A 不提供定期清理未完成分段上传 (MPU) 的选项 - 请考虑配置 S3 存储桶生命周期策略来清理悬挂的 MPU。

  • 为了在使用 S3 CSE-CUSTOM 加密时从 EMRFS 迁移到 S3A,需要将自定义密钥提供程序从 EMRFSRSAEncryptionMaterialsProvider 接口重写为 Keyring 接口。有关更多信息,请参阅 setting up S3A CSE-CUSTOM

  • 使用 EMRFS 创建的 Amazon S3 目录以“_$folder$”后缀标记,而使用 S3A 文件系统创建的目录以“/”后缀结尾,这与通过 AWS S3 控制台创建的目录一致。

  • 要使用自定义 S3 凭证提供程序,请将 S3A 配置属性 fs.s3a.aws.credentials.provider 设置为与之前在 EMRFS 配置 fs.s3.customAWSCredentialsProvider 中使用的凭证提供程序类相同的类。

不支持的 EMRFS 配置

以下 EMRFS 配置已被识别为不受支持或已过时,因此不会提供与其对应的 S3A 配置的直接映射。这些特定配置在迁移到 S3A 文件系统时不会自动转换或延续。

不支持的 EMRFS 配置和原因
EMRFS 配置名称 不支持的原因
fs.s3.consistent Amazon S3 提供强大的先写后读一致性,因此不需要 EMRFS 一致视图功能。
fs.s3.consistent.dynamodb.endpoint
fs.s3.consistent.fastFirstRetrySeconds
fs.s3.consistent.fastList
fs.s3.consistent.fastList.batchSize
fs.s3.consistent.fastList.prefetchMetadata
fs.s3.consistent.metadata.accessKey
fs.s3.consistent.metadata.autoCreate
fs.s3.consistent.metadata.capacity.autoIncrease
fs.s3.consistent.metadata.capacity.autoIncrease.factor
fs.s3.consistent.metadata.capacity.autoIncrease.maxRead
fs.s3.consistent.metadata.capacity.autoIncrease.maxWrite
fs.s3.consistent.metadata.conditional
fs.s3.consistent.metadata.delete.ttl.enabled
fs.s3.consistent.metadata.delete.ttl.expiration.seconds
fs.s3.consistent.metadata.etag.verification.enabled
fs.s3.consistent.metadata.read.capacity
fs.s3.consistent.metadata.read.capacity.limit
fs.s3.consistent.metadata.secretKey
fs.s3.consistent.metadata.tableName
fs.s3.consistent.metadata.write.capacity
fs.s3.consistent.metadata.write.capacity.limit
fs.s3.consistent.notification.CloudWatch
fs.s3.consistent.notification.SQS
fs.s3.consistent.notification.SQS.batchSize
fs.s3.consistent.notification.SQS.customMsg
fs.s3.consistent.notification.SQS.pathReportLimit
fs.s3.consistent.notification.SQS.pullWaitTimeSeconds
fs.s3.consistent.notification.SQS.queueName
fs.s3.consistent.retryCount
fs.s3.cse.cryptoStorageMode 与使用 AWS SDK V1 的 EMRFS 不同。S3A 使用 AWS SDK V2,而这些选项不受支持。
fs.s3.cse.cryptoStorageMode.deleteInstructionFiles.enabled
fs.s3.cse.encryptionV2.enabled
fs.s3.cse.materialsDescription.enabled
fs.s3.multipart.clean.age.threshold S3A 不支持定期清理未完成分段上传 (MPU) - 请考虑配置 S3 存储桶生命周期策略来清理悬挂的 MPU。
fs.s3.multipart.clean.enabled
fs.s3.multipart.clean.jitter.max 添加该功能以避免分段上传线程卡住或变慢。S3A 不存在类似问题,因此不需要它。
fs.s3.multipart.fraction.part.avg.completion.time
fs.s3.multipart.part.attempts
fs.s3.multipart.th.fraction.parts.completed
fs.s3.instanceProfile.retryCount 这些是 EMRFS 特有的配置,由于功能和架构差异,S3A 不需要这些配置。
fs.s3.instanceProfile.retryPeriodSeconds
fs.s3.externalStagedFiles.maxActiveTasks
fs.s3.folderObject.autoAction.disabled
fs.s3.folderObject.autoInsert
fs.s3.getObject.initialSocketTimeoutMilliseconds
fs.s3.listFiles.incrementalFetch.enabled
fs.s3.listFilesInOrder.includeDescendantsOfFiles
fs.s3.listObjects.encodingType
fs.s3.buckets.create.region
fs.s3.configuration.load.enablebled
fs.s3.create.allowFileNameEndsWithFolderSuffix
fs.s3.open.lazyConnection.enabled
fs.s3.region.fallback
fs.s3.region.retryCount
fs.s3.region.retryPeriodSeconds
fs.s3.rename.algorithm.version
fs.s3.requestHandler.classNames
fs.s3.requestStatistics.enabled
fs.s3.requestStatistics.sinks
fs.s3.retryPeriodSeconds
fs.s3.seekStrategy
fs.s3.threadpool.buffer.size
fs.s3.threadpool.maxSize
fs.s3.useDirectoryHeaderAsFolderObject
fs.s3n.filestatuscache.enable
fs.s3.delete.retryCount
fs.s3.s3AccessGrants.cacheSize
fs.s3.s3AccessGrants.retryDelayBase
fs.s3.s3AccessGrants.throttledRetryDelayBase
fs.s3.s3AccessGrants.maxRetries