2016-12-15 5 views
0

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.

+0

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. –

Antwort

0

Der Grund Credential Provider nicht für s3 arbeiten oder S3N war, weil es sucht Paar fs.s3n.awsAccessKeyId & fs.s3n.awsSecretAccessKey wenn Sie S3N verwenden, nicht fs.s3n.access.key und fs.s3n .geheimer Schlüssel. Die AWS-Bibliothek ist nicht konsistent.

Das zweite Problem ist, auch wenn wir das richtige Schlüssel-Wert-Paar übergeben, speichert Credentials-Dienstprogramm alle Schlüssel in Kleinbuchstaben. Wenn wir den Credential Provider mit "fs.s3n.awsAccessKeyId" erstellen, wird er als "fs.s3n.awsaccesskeyid" gespeichert. Wenn wir diesen Berechtigungsanbieter verwenden, findet er nicht den richtigen Schlüssel, da er immer noch nach einem Wert für "fs.s3n.awsAccessKeyId" sucht.

Sie den Fehler hier sehen: http://grepcode.com/file/repo1.maven.org/maven2/org.apache.hadoop/hadoop-common/2.7.1/org/apache/hadoop/security/alias/AbstractJavaKeyStoreProvider.java?av=f

Es wird einige Behelfslösung sein, wenn wir https://issues.apache.org/jira/browse/HADOOP-12548 haben.

Verwandte Themen