[
https://issues.apache.org/jira/browse/HADOOP-882?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel#action_12469117
]
[EMAIL PROTECTED] commented on HADOOP-882:
------------------------------------------
I updated jets3t to the 0.5.0 release. I had to make the below edits. The
API has probably changed in other ways but I've not spent the time verifying.
Unless someone else is working on a patch that includes the new version of the
jets3t lib and complimentary changes to s3 fs, I can give it a go (retries are
necessary it seems if you're trying to upload anything more than a few
kilobytes).
Related, after adding the new lib and making below changes, uploads ('puts')
would fail with below complaint.
07/01/31 00:47:13 WARN service.S3Service: Encountered 1 S3 Internal Server
error(s), will retry in 50ms
put: Input stream is not repeatable as 1048576 bytes have been written,
exceeding the available buffer size of 131072
I found the 131072 buffer in jets3t. Turns out the buffer size is
configurable. Dropping a jets3t.properties file into ${HADOOP_HOME}/conf
directory (so a lookup on CLASSPATH succeeds) with amended
s3service.stream-retry-buffer-size got me over the 'put: Input stream...' hump.
I set it to the value of dfs.block.size so it could replay a full-block if it
had to.
Then I noticed that the blocks written to S3 were of 1MB in size. I'm
uploading tens of Gs so that made for tens of thousands of blocks. No harm I
suppose but I was a little stumped that block size in S3 wasn't the value of
dfs.block.size. I found the fs.s3.block.size property in the S3 fs code.
Shouldn't this setting be bubbled up into hadoop-default with a default of
value of ${dfs.block.size}? (Setting this in my config. made for 64MB S3
blocks).
I can add the latter items to the wiki on S3 or can include an
jets3t.properties and s3.block.size in patch. What do others think?
Index: src/java/org/apache/hadoop/fs/s3/Jets3tFileSystemStore.java
===================================================================
--- src/java/org/apache/hadoop/fs/s3/Jets3tFileSystemStore.java (revision
501895)
+++ src/java/org/apache/hadoop/fs/s3/Jets3tFileSystemStore.java (working copy)
@@ -133,7 +133,7 @@
S3Object object = s3Service.getObject(bucket, key);
return object.getDataInputStream();
} catch (S3ServiceException e) {
- if (e.getErrorCode().equals("NoSuchKey")) {
+ if (e.getS3ErrorCode().equals("NoSuchKey")) {
return null;
}
if (e.getCause() instanceof IOException) {
@@ -149,7 +149,7 @@
null, byteRangeStart, null);
return object.getDataInputStream();
} catch (S3ServiceException e) {
- if (e.getErrorCode().equals("NoSuchKey")) {
+ if (e.getS3ErrorCode().equals("NoSuchKey")) {
return null;
}
if (e.getCause() instanceof IOException) {
> S3FileSystem should retry if there is a communication problem with S3
> ---------------------------------------------------------------------
>
> Key: HADOOP-882
> URL: https://issues.apache.org/jira/browse/HADOOP-882
> Project: Hadoop
> Issue Type: Improvement
> Components: fs
> Affects Versions: 0.10.1
> Reporter: Tom White
> Assigned To: Tom White
>
> File system operations currently fail if there is a communication problem
> (IOException) with S3. All operations that communicate with S3 should retry a
> fixed number of times before failing.
--
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.