首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >s3distcp不在CDH4.5上为我工作

s3distcp不在CDH4.5上为我工作
EN

Stack Overflow用户
提问于 2013-12-12 19:33:07
回答 2查看 1.8K关注 0票数 2

我在运行CDH4.5。我试图将distcp应用于s3n,但自从升级到4.5之后,我就遇到了一些问题。我正在尝试让s3distcp启动并运行,但是我遇到了一些问题。我下载了它,并运行以下命令:

代码语言:javascript
运行
复制
hadoop jar /usr/lib/hadoop/lib/s3distcp.jar  --src hdfs://NN:8020/path/to/destination/folder --dest s3n://acceseKeyId:secretaccesskey@mybucket/destination/

但我得到的错误是:

代码语言:javascript
运行
复制
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放入我的核心-site.xml中:

代码语言:javascript
运行
复制
<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>

当我尝试这样做的时候仍然会犯同样的错误:

代码语言:javascript
运行
复制
hadoop jar /usr/lib/hadoop/lib/s3distcp.jar  --src hdfs://NN:8020/path/to/destination/folder --dest s3n://mybucket/destination/

是否有一些我应该做的配置,还是我丢失了一些jar文件,或者不正确地执行它?

谢谢你的帮助

EN

回答 2

Stack Overflow用户

发布于 2017-01-15 21:37:49

也有同样的问题。修复方法是从s3n更改为s3a。

代码语言:javascript
运行
复制
# change from this
--dest s3n://acceseKeyId:secretaccesskey@mybucket/destination/
# to this
--dest s3a://acceseKeyId:secretaccesskey@mybucket/destination/

另见此处:Apache中的S3支持

s3是废弃的,s3n是不被维护的,所以继续使用s3a。

S3A是Hadoop2.7及更高版本推荐的S3客户端

作为S3本机s3n://文件系统的继承者,S3a: system使用S3a的库与S3交互。这允许S3a支持更大的文件(不超过5GB限制)、更高的性能操作等等。文件系统旨在替代/继承S3本机:从s3n:// URL访问的所有对象也应该通过替换s3a模式从s3a访问。 S3N FileSystem (URI方案: s3n://) S3N是Hadoop2.6及更早版本的S3客户机。从Hadoop 2.7+转到s3a 一个用于在S3上读取和写入常规文件的本机文件系统。使用这个文件系统,您可以访问用其他工具编写的S3上的文件。相反,其他工具可以访问使用Hadoop编写的文件。S3N代码是稳定和广泛使用的,但没有添加任何新特性(这就是为什么它保持稳定)。 S3N需要类路径上的jets3t JAR的兼容版本。 从Hadoop2.6开始,所有关于S3集成的工作都是用S3A完成的。除了安全风险之外,S3N是不被维护的,-this有助于保证安全性。大多数针对S3N的错误报告将以WONTFIX和文本“使用S3A”的形式关闭。如果您可以使用S3A,请切换到-and,在向S3N提交错误报告之前进行尝试。 S3块FileSystem (URI方案: s3://)

票数 1
EN

Stack Overflow用户

发布于 2014-02-27 10:44:21

您需要。从http://aws.amazon.com/de/sdkforjava/抓取它,或者将jar放入/usr/lib/hadoop/lib,或者用-libjars选项传递它。假设AWS的版本为1.7.1,则命令如下所示:

代码语言:javascript
运行
复制
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/

参考文献:

  • AWS:http://aws.amazon.com/de/sdkforjava/
  • libjars选项:http://grepalex.com/2013/02/25/hadoop-libjars/
票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20552541

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档