View a markdown version of this page

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

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

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

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

  • 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> <property> <name>fs.s3n.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.server” 配置特定于存储桶的加密设置时,系统会自动将其映射到等效的 S3A 配置,方法是将指定存储桶 amzn-s3-demo-bucket1 SideEncryption.kms.keyId 的 “fs.s3a.encryption.key” 设置为 “XYZ”。

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

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

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

从 EMRFS(fs.s3.server SideEncryption.kms.keyId 或 fs.s3.cse.kms.keyID)到 S3A(fs.s3a.encryption.key.key)的加密密钥映射仅在任一文件系统上启用或加密时才会发生。 SSE-KMS CSE-KMS

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.session DurationSeconds fs.s3a.assumed.role.session.duration
fs.s3.authorization.roleMapping fs.s3a.authorization.roleMapping
fs.s3.authorization.ugi.group Name.enabled fs.s3a.authorization.ugi.group Name.enabled
fs.s3. 凭证 ResolverClass 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.server SideEncryption.kms.customEncryptionContext fs.s3a.encryption.context
fs.s3.enable ServerSideEncryption fs.s3a.encryption.algorithm
fs.s3.server/fs.s3.cse.kms.keyid SideEncryption.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.max BatchSize 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.posited Read.optimization.enabled fs.s3a.posited Read.optimization.enabled
fs.s3.read FullyIntoBuffers.optimization.enabled fs.s3a.read FullyIntoBuffers.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.use RequesterPaysHeader 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.acceptes FileStatus fs.s3a.open.acceptes FileStatus
fs.s3.connection.max IdleMilliSeconds fs.s3a.connection.idle.time
fs.s3.s3 AccessGrants.enabled fs.s3a.access.grants.enabled
fs.s3.s3 AccessGrants.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 不支持带有 S3A RecordServer 的 EMR 的 Spark 的 Lake Formation 支持——可以考虑使用 Spark Native FGAC。

  • AWS 不支持 S3 选择。

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

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

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

  • 要使用自定义 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. 一致.fast FirstRetrySeconds
fs.s3.consistent.fastList
fs.s3. 一致.fast List.batchSize
fs.s3. 一致.fast List.prefetchMetadata
fs.s3.consistent.metadata.accessKey
fs.s3.consistent.metadata.autoCreate
fs.s3.consistent.metadata.capacity.autoIncrease
fs.s3. 一致性.metadata.capacity.auto Increase.factor
fs.s3. 一致性.metadata.capacity.auto Increase.maxRead
fs.s3. 一致性.metadata.capacity.auto Increase.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. 一致的通知。 CloudWatch
fs.s3.consistent.notification.SQS
fs.s3. 一致的通知。 SQS.batchSize
fs.s3. 一致的通知。 SQS.customMsg
fs.s3. 一致的通知。 SQS.pathReportLimit
fs.s3. 一致的通知。 SQS.pullWaitTimeSeconds
fs.s3. 一致的通知。 SQS.queueName
fs.s3.consistent.retryCount
fs.s3.cse.crypto StorageMode 与使用 S AWS DK V1 的 EMRFS 不同。S3A 使用不支持这些选项的 AWS SDK V2。
fs.s3.cse.crypto StorageMode.deleteInstructionFiles.enabled
fs.s3.cse.encryption V2.enabled
fs.s3.cse.materials Description.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.instance Profile.retryCount 这些是 EMRFS 特有的配置,由于功能和架构差异,S3A 不需要这些配置。
fs.s3.instance Profile.retryPeriodSeconds
fs.s3.external StagedFiles.maxActiveTasks
fs.s3.folder Object.autoAction.disabled
fs.s3.folder Object.autoInsert
fs.s3.get Object.initialSocketTimeoutMilliseconds
fs.s3.list Files.incrementalFetch.enabled
fs.s3.list FilesInOrder.includeDescendantsOfFiles
fs.s3.list Objects.encodingType
fs.s3.buckets.create.region
fs.s3.configuration.load.enablebled
fs.s3.create.allow FileNameEndsWithFolderSuffix
fs.s3.open.lazy Connection.enabled
fs.s3.region.fallback
fs.s3.region.retryCount
fs.s3.region.retry PeriodSeconds
fs.s3.rename.algorithm.version
fs.s3.request Handler.classNames
fs.s3.request Statistics.enabled
fs.s3.request Statistics.sinks
fs.s3.retry PeriodSeconds
fs.s3.seekStrategy
fs.s3.threadpool.buffer.size
fs.s3.threadpool.maxSize
fs.s3.use DirectoryHeaderAsFolderObject
fs.s3n.filestatuscache.enable
fs.s3.delete.retryCount
fs.s3.s3 AccessGrants.cacheSize
fs.s3.s3 AccessGrants.retryDelayBase
fs.s3.s3 AccessGrants.throttledRetryDelayBase
fs.s3.s3 AccessGrants.maxRetries