[ https://issues.apache.org/jira/browse/HADOOP-12020?focusedWorklogId=766633&page=com.atlassian.jira.plugin.system.issuetabpanels:worklog-tabpanel#worklog-766633 ]
ASF GitHub Bot logged work on HADOOP-12020: ------------------------------------------- Author: ASF GitHub Bot Created on: 05/May/22 13:18 Start Date: 05/May/22 13:18 Worklog Time Spent: 10m Work Description: steveloughran commented on code in PR #3877: URL: https://github.com/apache/hadoop/pull/3877#discussion_r865894994 ########## hadoop-tools/hadoop-aws/src/site/markdown/tools/hadoop-aws/index.md: ########## @@ -1671,6 +1671,25 @@ To enable this feature within S3A, configure the `fs.s3a.requester.pays.enabled` </property> ``` +## <a name="storage_classes"></a>Storage Classes + +Amazon S3 offers a range of [Storage Classes](https://aws.amazon.com/s3/storage-classes/) +that you can choose from based on behavior of your applications. By using the right +storage class, you can reduce the cost of your bucket. + +S3A uses Standard storage class for PUT object requests by default, which is suitable for +general use cases. To use a specific storage class, set the value in `fs.s3a.storage.class` property to +the storage class you want. + +```xml +<property> + <name>fs.s3a.storage.class</name> + <value>intelligent_tiering</value> +</property> +``` + +Please note that S3A does not support reading from archive storage classes at the moment. Review Comment: can you add that if someone tries this, they will get access denied with InvalidObjectState. or add the error/trace to the troubleshooting section where the other exceptions are. ########## hadoop-tools/hadoop-aws/src/main/java/org/apache/hadoop/fs/s3a/S3AFileSystem.java: ########## @@ -963,7 +965,15 @@ protected RequestFactory createRequestFactory() { // Any encoding type String contentEncoding = getConf().getTrimmed(CONTENT_ENCODING, null); - String storageClass = getConf().getTrimmed(STORAGE_CLASS, null); + StorageClass storageClass; + try { + String storageClassConf = getConf() + .getTrimmed(STORAGE_CLASS, "") + .toUpperCase(Locale.US); + storageClass = StorageClass.fromValue(storageClassConf); + } catch (IllegalArgumentException e) { + storageClass = null; Review Comment: good q here. i wonder what to do. I would recommend logging at info/warn on the unknown value and then continuing. so the try/catch would only surround line 973 and log the value of storageClassConf in the error. Issue Time Tracking ------------------- Worklog Id: (was: 766633) Time Spent: 50m (was: 40m) > Support AWS S3 reduced redundancy storage class > ----------------------------------------------- > > Key: HADOOP-12020 > URL: https://issues.apache.org/jira/browse/HADOOP-12020 > Project: Hadoop Common > Issue Type: Sub-task > Components: fs/s3 > Affects Versions: 2.7.0 > Environment: Hadoop on AWS > Reporter: Yann Landrin-Schweitzer > Assignee: Monthon Klongklaew > Priority: Major > Labels: pull-request-available > Time Spent: 50m > Remaining Estimate: 0h > > Amazon S3 uses, by default, the NORMAL_STORAGE class for s3 objects. > This offers, according to Amazon's material, 99.99999999% reliability. > For many applications, however, the 99.99% reliability offered by the > REDUCED_REDUNDANCY storage class is amply sufficient, and comes with a > significant cost saving. > HDFS, when using the legacy s3n protocol, or the new s3a scheme, should > support overriding the default storage class of created s3 objects so that > users can take advantage of this cost benefit. > This would require minor changes of the s3n and s3a drivers, using > a configuration property fs.s3n.storage.class to override the default storage > when desirable. > This override could be implemented in Jets3tNativeFileSystemStore with: > S3Object object = new S3Object(key); > ... > if(storageClass!=null) object.setStorageClass(storageClass); > It would take a more complex form in s3a, e.g. setting: > InitiateMultipartUploadRequest initiateMPURequest = > new InitiateMultipartUploadRequest(bucket, key, om); > if(storageClass !=null ) { > initiateMPURequest = > initiateMPURequest.withStorageClass(storageClass); > } > and similar statements in various places. -- This message was sent by Atlassian Jira (v8.20.7#820007) --------------------------------------------------------------------- To unsubscribe, e-mail: common-issues-unsubscr...@hadoop.apache.org For additional commands, e-mail: common-issues-h...@hadoop.apache.org