本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
遷移指南:EMRFS 到 S3A 檔案系統
從 EMR-7.10.0 版本開始,S3A Filesystem 是所有 S3 檔案結構描述之 EMR 叢集的預設檔案系統/s3 連接器,包括下列項目:
s3://
s3n://
s3a://
此變更適用於所有 EMR 部署,包括 EC2、EKS 和 EMR Serverless、Glue ETL 環境。
如果您想要繼續使用 EMRFS,您可以將下列屬性新增至core-site.xml
組態檔案來設定此屬性:
<property> <name>fs.s3.impl</name> <value>com.amazon.ws.emr.hadoop.fs.EmrFileSystem</value> </property>
將現有 EMRFS 組態遷移至 S3A 組態
下列預先定義的一組 EMRFS 組態會自動轉譯為其對應的 S3A 組態對等項目。目前透過叢集或任務覆寫實作的任何組態都會順暢地轉換為 S3A 檔案系統,而不需要額外的手動組態或修改。
根據預設,此組態映射功能會自動啟用。想要停用此自動轉譯的使用者可以透過將下列屬性新增至 core-site.xml 組態檔案來執行此操作。
<property> <name>fs.s3a.emrfs.compatibility.enable</name> <value>false</value> </property>
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.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 |
考量事項與限制
-
所有 EMR 引擎 – Spark、MapReduce、Flink、Tez、Hive 等將使用 S3A 作為預設 S3 連接器,但 Trino 和 Presto 引擎除外。
-
EMR S3A 不支援與 EMR Ranger 整合。考慮遷移至 AWS Lake Formation。
-
AWS 不支援使用 RecordServer for EMR Spark 搭配 S3A 的 Lake Formation 支援 - 請考慮使用 Spark 原生 FGAC。
-
不支援AWS S3 Select。
-
S3A 不提供定期清除未完成分段上傳 (MPU) 的選項 - 請考慮設定 S3 儲存貯體生命週期政策來清除懸置MPUs。
-
為了在使用 S3 CSE-CUSTOM 加密時從 EMRFS 遷移到 S3A,自訂金鑰提供者需要從 EMRFSRSAEncryptionMaterialsProvider
界面重寫到 Keyring 界面。 S3 如需詳細資訊,請參閱設定 S3A CSE-CUSTOM。 使用 EMRFS 建立的 Amazon S3 目錄會以 '_$folder$' 尾碼標示,而使用 S3A 檔案系統建立的目錄則以 '/' 尾碼結尾,這與透過 AWS S3 主控台建立的目錄一致。
若要使用自訂 S3 憑證提供者,請使用先前在 EMRFS 組態 中使用的
fs.s3a.aws.credentials.provider
相同憑證提供者類別來設定 S3A 組態屬性fs.s3.customAWSCredentialsProvider
。
不支援的 EMRFS 組態
下列 EMRFS 組態已識別為不支援或已淘汰,因此不會將直接映射提供給其 S3A 組態對等部分。這些特定組態不會在遷移至 S3A 檔案系統期間自動翻譯或轉移。
EMRFS Config 名稱 | 不支援的原因 |
---|---|
fs.s3.consistent | Amazon S3 提供強大的read-after-write一致性 |
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 | 定期清除不完整的分段上傳 (MPU) 不適用於 S3A - 而是設定 S3 儲存貯體生命週期政策來清除懸置MPUs。 |
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 | 這些是 S3A 中由於功能和架構差異而不需要的 EMRFS 特定組態。 |
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 |