[
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: [email protected]
For additional commands, e-mail: [email protected]