我正在运行CDH4.5。我试图使用distcp s3n但是因为我升级到4.5而遇到了问题。 我试图让s3distcp启动并运行,但是我遇到了问题。我下载了它,并且正在运行此命令:
hadoop jar /usr/lib/hadoop/lib/s3distcp.jar --src hdfs://NN:8020/path/to/destination/folder --dest s3n://acceseKeyId:secretaccesskey@mybucket/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)
然后我将访问密钥和id放入我的core-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文件或执行错误?
感谢您的帮助
答案 0 :(得分:1)
有同样的问题。修复是从s3n更改为s3a。
# change from this
--dest s3n://acceseKeyId:secretaccesskey@mybucket/destination/
# to this
--dest s3a://acceseKeyId:secretaccesskey@mybucket/destination/
另见:S3 Support in Apache Hadoop
s3已被弃用s3n未被维护,因此请继续使用s3a。
S3A是Hadoop 2.7及更高版本的推荐S3客户端
S3 Native:s3n://文件系统的继承者,S3a:系统使用 亚马逊的图书馆与S3互动。这允许S3a支持 较大的文件(不超过5GB限制),更高的性能操作和 更多。文件系统旨在替代/后继 S3 Native:从s3n:// URL可访问的所有对象也应该是 只需替换URL架构即可从s3a访问。
未维护:S3N文件系统(URI方案:s3n://)
S3N是Hadoop 2.6及更早版本的S3客户端。来自Hadoop 2.7+, 切换到s3a
用于在S3.With上读写常规文件的本机文件系统 这个文件系统是你可以访问S3上写的文件 与其他工具。相反,其他工具可以访问写入的文件 使用Hadoop。 S3N代码是稳定且广泛使用的,但事实并非如此 添加任何新功能(这就是它保持稳定的原因)。
S3N需要在类路径上使用兼容版本的jets3t JAR。
自Hadoop 2.6以来,S3集成的所有工作都与S3A有关。 S3N是 除了安全风险之外没有维护 - 这有助于保证 安全。针对S3N的大多数错误报告将以WONTFIX和 文本&#34;使用S3A&#34;。如果可以的话,请切换到S3A,然后尝试一下 在提交针对S3N的错误报告之前。
(已弃用)S3 Block FileSystem(URI scheme:s3://)
答案 1 :(得分:-1)
您需要AWS SDK for Java。从http://aws.amazon.com/de/sdkforjava/抓取它,然后将jar放入/usr/lib/hadoop/lib
或使用-libjars
选项传递它。假设AWS SDK的1.7.1版本,该命令将如下所示:
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:secretaccesskey@mybucket/destination/
参考文献: