本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
迁移指南: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 配置名称 |
|---|---|
| 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 配置名称 | 不支持的原因 |
|---|---|
| fs.s3.consistent | Amazon S3 提供强大的先写后读一致性 |
| 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 |