2013-12-12 91 views
2

我正在运行CDH4.5。我试图使用distcp s3n,但自从我升级到4.5后就遇到了问题。 我试图让s3distcp启动并运行,但正在解决问题。我下载了它,并正在运行以下命令:s3distcp不适用于我CDH4.5

hadoop jar /usr/lib/hadoop/lib/s3distcp.jar --src hdfs://NN:8020/path/to/destination/folder --dest s3n://acceseKeyId:[email protected]/destination/ 

,但我得到的错误:

INFO mapred.JobClient: map 100% reduce 0% 
INFO mapred.JobClient: Task Id : attempt_201312042223_10889_r_000001_0, Status : FAILED 
Error: java.lang.ClassNotFoundException: com.amazonaws.services.s3.AmazonS3 
    at java.net.URLClassLoader$1.run(URLClassLoader.java:202) 
    at java.security.AccessController.doPrivileged(Native Method) 
    at java.net.URLClassLoader.findClass(URLClassLoader.java:190) 
    at java.lang.ClassLoader.loadClass(ClassLoader.java:306) 
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301) 
    at java.lang.ClassLoader.loadClass(ClassLoader.java:247) 
    at com.amazon.external.elasticmapreduce.s3distcp.CopyFilesReducer.executeDownloads(CopyFilesReducer.java:209) 
    at com.amazon.external.elasticmapreduce.s3distcp.CopyFilesReducer.reduce(CopyFilesReducer.java:196) 
    at com.amazon.external.elasticmapreduce.s3distcp.CopyFilesReducer.reduce(CopyFilesReducer.java:30) 
    at org.apache.hadoop.mapred.ReduceTask.runOldReducer(ReduceTask.java:506) 
    at org.apache.hadoop.mapred.ReduceTask.run(ReduceTask.java:447) 
    at org.apache.hadoop.mapred.Child$4.run(Child.java:268) 
    at java.security.AccessController.doPrivileged(Native Method) 
    at javax 

INFO mapred.JobClient: Job Failed: NA 
13/12/12 13:55:25 INFO s3distcp.S3DistCp: Try to recursively delete hdfs:/tmp/985ffdb0-1bc8-4d00-aba6-fd9b18e905f1/tempspace 
Exception in thread "main" java.lang.RuntimeException: Error running job 
    at com.amazon.external.elasticmapreduce.s3distcp.S3DistCp.run(S3DistCp.java:586) 
    at com.amazon.external.elasticmapreduce.s3distcp.S3DistCp.run(S3DistCp.java:216) 
    at org.apache.hadoop.util.ToolRunner.run(ToolRunner.java:70) 
    at org.apache.hadoop.util.ToolRunner.run(ToolRunner.java:84) 
    at com.amazon.external.elasticmapreduce.s3distcp.Main.main(Main.java:12) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) 
    at java.lang.reflect.Method.invoke(Method.java:597) 
    at org.apache.hadoop.util.RunJar.main(RunJar.java:208) 
Caused by: java.io.IOException: Job failed! 
    at org.apache.hadoop.mapred.JobClient.runJob(JobClient.java:1388) 
    at com.amazon.external.elasticmapreduce.s3distcp.S3DistCp.run(S3DistCp.java:568) 

我然后把快捷键和身份证到我的核心-site.xml中的所有数据和名称节点:

<property> 
    <name>fs.s3.awsSecretAccessKey</name> 
    <value>bippitybopityboo</value> 
    </property> 
    <property> 
    <name>fs.s3.awsAccessKeyId</name> 
    <value>supercalifragilisticexpialadoscious</value> 
    </property> 
    <property> 
    <name>fs.s3n.awsSecretAccessKey</name> 
    <value>bippitybopityboo</value> 
    </property> 
    <property> 
    <name>fs.s3n.awsAccessKeyId</name> 
    <value>supercalifragilisticexpialadoscious</value> 
    </property> 

,仍然得到了同样的错误,当我试图这样的:

hadoop jar /usr/lib/hadoop/lib/s3distcp.jar --src hdfs://NN:8020/path/to/destination/folder --dest s3n://mybucket/destination/ 

有一些配置我应该做,或者我错过了一些jar文件或执行不正确?

感谢您的任何帮助

回答

-1

您需要适用于Java的AWS开发工具包。从http://aws.amazon.com/de/sdkforjava/中获取它,然后将罐子放入/usr/lib/hadoop/lib或将其与-libjars选项一起传递。假设版本1.7.1的AWS SDK的命令会再像:

hadoop jar /usr/lib/hadoop/lib/s3distcp.jar \ 
    -libjars aws-java-sdk-1.7.1/lib/aws-java-sdk-1.7.1.jar \ 
    --src hdfs://NN:8020/path/to/destination/folder \ 
    --dest s3n://acceseKeyId:[email protected]/destination/ 

参考文献:

0

有同样的问题。解决的办法是从s3n改为s3a。

# change from this 
--dest s3n://acceseKeyId:[email protected]/destination/ 
# to this 
--dest s3a://acceseKeyId:[email protected]/destination/ 

也见这里:S3 Support in Apache Hadoop

S3已被弃用S3N不能维持这样使用S3A前进。

S3A是推荐S3客户端的Hadoop 2.7及更高版本

继承了S3本地,S3N://文件系统,该器S3a:系统采用 亚马逊的图书馆与S3交互。这允许S3a支持更大的文件(不超过5GB限制),更高的性能操作和更多 。该文件系统旨在替代或继承 S3 Native:从s3n:// URL访问的所有对象也应该是 ,只需通过替换URL模式即可从s3a访问。

Unmainteained:S3N文件系统(URI方案:S3N://)

S3N是S3客户端的Hadoop 2.6和更早版本。从Hadoop的2.7+, 开关S3A

一个本地文件系统进行读取和S3.With 这个文件系统写一般的文件是,你可以对用其他工具编写 S3访问文件。相反,其他工具可以使用Hadoop访问编写为 的文件。 S3N代码是稳定和广泛使用的,但并不是 添加任何新功能(这就是为什么它保持稳定)。

S3N要求类路径上的jets3t JAR兼容版本。

由于Hadoop 2.6,S3集成的所有工作都与S3A一起工作。 S3N是 除了安全风险外,没有维护 - 这有助于保证 的安全。针对S3N的大多数错误报告都将作为WONTFIX和 关闭“使用S3A”文本。如果可以的话,请切换到S3A,并在提交针对S3N的错误报告之前尝试使用 。

(已弃用)S3块的文件系统(URI方案:S3://)