Uploaded image for project: 'Hadoop Common'
  1. Hadoop Common
  2. HADOOP-12689

S3 filesystem operations stopped working correctly

    Details

    • Type: Bug
    • Status: Resolved
    • Priority: Major
    • Resolution: Fixed
    • Affects Version/s: 2.7.0
    • Fix Version/s: 2.8.0, 3.0.0-alpha1
    • Component/s: tools
    • Labels:
    • Target Version/s:

      Description

      HADOOP-10542 was resolved by replacing "return null;" with throwing IOException. This causes several S3 filesystem operations to fail (possibly more code is expecting that null return value; these are just the calls I noticed):

      S3FileSystem.getFileStatus() (which no longer raises FileNotFoundException but instead IOException)
      FileSystem.exists() (which no longer returns false but instead raises IOException)
      S3FileSystem.create() (which no longer succeeds but instead raises IOException)

      Run command:

      hadoop distcp hdfs://localhost:9000/test s3://xxx:yyy@com.bar.foo/

      Resulting stack trace:

      2015-12-11 10:04:34,030 FATAL [IPC Server handler 6 on 44861] org.apache.hadoop.mapred.TaskAttemptListenerImpl: Task: attempt_1449826461866_0005_m_000006_0 - exited : java.io.IOException: /test doesn't exist
      at org.apache.hadoop.fs.s3.Jets3tFileSystemStore.get(Jets3tFileSystemStore.java:170)
      at org.apache.hadoop.fs.s3.Jets3tFileSystemStore.retrieveINode(Jets3tFileSystemStore.java:221)
      at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
      at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
      at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
      at java.lang.reflect.Method.invoke(Method.java:606)
      at org.apache.hadoop.io.retry.RetryInvocationHandler.invokeMethod(RetryInvocationHandler.java:187)
      at org.apache.hadoop.io.retry.RetryInvocationHandler.invoke(RetryInvocationHandler.java:102)
      at com.sun.proxy.$Proxy17.retrieveINode(Unknown Source)
      at org.apache.hadoop.fs.s3.S3FileSystem.getFileStatus(S3FileSystem.java:340)
      at org.apache.hadoop.tools.mapred.CopyMapper.map(CopyMapper.java:230)
      at org.apache.hadoop.tools.mapred.CopyMapper.map(CopyMapper.java:50)
      at org.apache.hadoop.mapreduce.Mapper.run(Mapper.java:146)
      at org.apache.hadoop.mapred.MapTask.runNewMapper(MapTask.java:787)
      at org.apache.hadoop.mapred.MapTask.run(MapTask.java:341)
      at org.apache.hadoop.mapred.YarnChild$2.run(YarnChild.java:164)
      at java.security.AccessController.doPrivileged(Native Method)
      at javax.security.auth.Subject.doAs(Subject.java:415)
      at org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1657)
      at org.apache.hadoop.mapred.YarnChild.main(YarnChild.java:158)

      changing the "raise IOE..." to "return null" fixes all of the above code sites and allows distcp to succeed.

        Attachments

          Issue Links

            Activity

              People

              • Assignee:
                mattpaduano Matthew Paduano
                Reporter:
                mattpaduano Matthew Paduano
              • Votes:
                0 Vote for this issue
                Watchers:
                5 Start watching this issue

                Dates

                • Created:
                  Updated:
                  Resolved: