ich eine distcp Wirkung haben wie folgtOozie distcp s3 s3 Kopie ungültig Argumente org.jets3t.service.impl.rest.HttpException
<action name="ExecuteDataCopyS3ToHDFS">
<distcp xmlns="uri:oozie:distcp-action:0.2">
<arg>-Dmapred.job.queue.name=dev</arg>
<arg>-Dhadoop.security.credential.provider.path=jceks://hdfs/user/ABC/oneaws.jceks</arg>
<arg>-update</arg>
<arg>s3a://XXXX/</arg>
<arg>s3n://XXXX/XXXX/</arg>
</distcp>
<ok to="end"/>
<error to="create-error-file" />
</action>
ich zwei Anmeldeinformationen an die JCEKS Datei hinzugefügt als
hadoop credential create fs.s3a.access.key -provider localjceks://file/home/XXX/oneaws.jceks
hadoop credential create fs.s3a.secret.key -provider localjceks://file/home/XXX/oneaws.jceks
hadoop credential create fs.s3n.access.key -provider localjceks://file/home/XXX/oneaws.jceks
hadoop credential create fs.s3n.secret.key -provider localjceks://file/home/XXX/oneaws.jceks
folgt
Die s3a-Anmeldeinformationen beziehen sich auf den Quell-aws-Speicherort und s3n-Anmeldeinformationen auf das Ziel.
Wenn ich die Oozie-Aktion ausführen bekomme ich eine Ausnahme und hier ist der Stack-Trace.
2016-12-15 17:31:21,933 ERROR [main] org.apache.hadoop.tools.DistCp: Invalid arguments:
org.apache.hadoop.security.AccessControlException: Permission denied: s3n://XXX/XXX/XXX
at org.apache.hadoop.fs.s3native.Jets3tNativeFileSystemStore.processException(Jets3tNativeFileSystemStore.java:449)
at org.apache.hadoop.fs.s3native.Jets3tNativeFileSystemStore.processException(Jets3tNativeFileSystemStore.java:427)
at org.apache.hadoop.fs.s3native.Jets3tNativeFileSystemStore.handleException(Jets3tNativeFileSystemStore.java:411)
at org.apache.hadoop.fs.s3native.Jets3tNativeFileSystemStore.retrieveMetadata(Jets3tNativeFileSystemStore.java:181)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:497)
at org.apache.hadoop.io.retry.RetryInvocationHandler.invokeMethod(RetryInvocationHandler.java:256)
at org.apache.hadoop.io.retry.RetryInvocationHandler.invoke(RetryInvocationHandler.java:104)
at org.apache.hadoop.fs.s3native.$Proxy28.retrieveMetadata(Unknown Source)
at org.apache.hadoop.fs.s3native.NativeS3FileSystem.getFileStatus(NativeS3FileSystem.java:476)
at org.apache.hadoop.fs.FileSystem.exists(FileSystem.java:1424)
at org.apache.hadoop.tools.DistCp.setTargetPathExists(DistCp.java:217)
at org.apache.hadoop.tools.DistCp.run(DistCp.java:116)
at org.apache.hadoop.util.ToolRunner.run(ToolRunner.java:76)
at org.apache.hadoop.util.ToolRunner.run(ToolRunner.java:90)
at org.apache.oozie.action.hadoop.DistcpMain.run(DistcpMain.java:64)
at org.apache.oozie.action.hadoop.LauncherMain.run(LauncherMain.java:47)
at org.apache.oozie.action.hadoop.DistcpMain.main(DistcpMain.java:34)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:497)
at org.apache.oozie.action.hadoop.LauncherMapper.map(LauncherMapper.java:241)
at org.apache.hadoop.mapred.MapRunner.run(MapRunner.java:54)
at org.apache.hadoop.mapred.MapTask.runOldMapper(MapTask.java:453)
at org.apache.hadoop.mapred.MapTask.run(MapTask.java:343)
at org.apache.hadoop.mapred.YarnChild$2.run(YarnChild.java:168)
at java.security.AccessController.doPrivileged(Native Method)
at javax.security.auth.Subject.doAs(Subject.java:422)
at org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1709)
at org.apache.hadoop.mapred.YarnChild.main(YarnChild.java:162)
Caused by: org.jets3t.service.impl.rest.HttpException
at org.jets3t.service.impl.rest.httpclient.RestStorageService.performRequest(RestStorageService.java:519)
at org.jets3t.service.impl.rest.httpclient.RestStorageService.performRequest(RestStorageService.java:281)
at org.jets3t.service.impl.rest.httpclient.RestStorageService.performRestHead(RestStorageService.java:942)
at org.jets3t.service.impl.rest.httpclient.RestStorageService.getObjectImpl(RestStorageService.java:2148)
at org.jets3t.service.impl.rest.httpclient.RestStorageService.getObjectDetailsImpl(RestStorageService.java:2075)
at org.jets3t.service.StorageService.getObjectDetails(StorageService.java:1093)
at org.jets3t.service.StorageService.getObjectDetails(StorageService.java:548)
at org.apache.hadoop.fs.s3native.Jets3tNativeFileSystemStore.retrieveMetadata(Jets3tNativeFileSystemStore.java:174)
Wenn ich Distcp von der Kommandozeile mit den gleichen Anmeldeinformationen getestet, funktioniert es einwandfrei.
Es stellt sich heraus, dass Distcp gut mit diesen Eigenschaften funktioniert. -Dfs.s3n.awsAccessKeyId = Schlüssel -Dfs.s3n.awsSecretAccessKey = geheim . Ich bin mir immer noch nicht sicher, warum es nicht die Anmeldeberechtigung hätte. –