Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/amazon-s3/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
S3N和S3A distcp在Hadoop 2.6.0中不起作用 总结_Hadoop_Amazon S3_Hadoop2 - Fatal编程技术网

S3N和S3A distcp在Hadoop 2.6.0中不起作用 总结

S3N和S3A distcp在Hadoop 2.6.0中不起作用 总结,hadoop,amazon-s3,hadoop2,Hadoop,Amazon S3,Hadoop2,Stock hadoop2.6.0安装为scheme:s3n提供了无文件系统。将hadoop aws.jar添加到类路径中,现在可以得到ClassNotFoundException:org.apache.hadoop.fs.s3a.S3AFileSystem 细节 我已经安装了hadoop-2.6.0的大部分库存。我只设置了目录,并设置了以下环境变量: export JAVA_HOME=/usr/lib/jvm/java-7-openjdk-amd64/jre export HADOOP_COM

Stock hadoop2.6.0安装为scheme:s3n提供了
无文件系统。将
hadoop aws.jar
添加到类路径中,现在可以得到
ClassNotFoundException:org.apache.hadoop.fs.s3a.S3AFileSystem

细节 我已经安装了hadoop-2.6.0的大部分库存。我只设置了目录,并设置了以下环境变量:

export JAVA_HOME=/usr/lib/jvm/java-7-openjdk-amd64/jre
export HADOOP_COMMON_HOME=/opt/hadoop
export HADOOP_HOME=$HADOOP_COMMON_HOME
export HADOOP_HDFS_HOME=$HADOOP_COMMON_HOME
export HADOOP_MAPRED_HOME=$HADOOP_COMMON_HOME
export HADOOP_OPTS=-XX:-PrintWarnings
export PATH=$PATH:$HADOOP_COMMON_HOME/bin
hadoop类路径是:

/opt/hadoop/etc/hadoop:/opt/hadoop/share/hadoop/common/lib/*:/opt/hadoop/share/hadoop/common/*:/opt/hadoop/share/hadoop/hdfs:/opt/hadoop/share/hadoop/hdfs/lib/*:/opt/hadoop/share/hadoop/hdfs/*:/opt/hadoop/share/hadoop/yarn/lib/*:/opt/hadoop/share/hadoop/yarn/*:/opt/hadoop/share/hadoop/mapreduce/lib/*:/opt/hadoop/share/hadoop/mapreduce/*:/contrib/capacity-scheduler/*.jar:/opt/hadoop/share/hadoop/tools/lib/*
当我尝试运行hadoop distcp-update时hdfs:///files/to/backup s3n://${S3KEY}:${S3SECRET}@bucket/files/to/backup
我得到
错误:java.io.Exception,scheme:s3n没有文件系统
。如果我使用s3a,我会收到与s3a相同的错误

他们告诉我,默认情况下,
hadoop aws.jar
不是类路径的一部分。我在
/opt/hadoop/etc/hadoop/hadoop env.sh
中添加了以下行:

HADOOP_CLASSPATH=$HADOOP_CLASSPATH:$HADOOP_COMMON_HOME/share/hadoop/tools/lib/*
现在,
hadoop类路径
附加了以下内容:

:/opt/hadoop/share/hadoop/tools/lib/*
其中应包括
/opt/hadoop/share/hadoop/tools/lib/hadoop-aws-2.6.0.jar
。现在我得到:

Caused by: java.lang.ClassNotFoundException:
Class org.apache.hadoop.fs.s3a.S3AFileSystem not found
jar文件包含找不到的类:

unzip -l /opt/hadoop/share/hadoop/tools/lib/hadoop-aws-2.6.0.jar |grep S3AFileSystem
28349  2014-11-13 21:20   org/apache/hadoop/fs/s3a/S3AFileSystem.class

是否有添加这些JAR的命令,或者我是否遗漏了其他重要内容?

您可以通过在
核心站点.xml中添加以下行来解决s3n问题

<property>
<name>fs.s3n.impl</name>
<value>org.apache.hadoop.fs.s3native.NativeS3FileSystem</value>
<description>The FileSystem for s3n: (Native S3) uris.</description>
</property>

fs.s3n.impl
org.apache.hadoop.fs.s3native.NativeS3FileSystem
s3n:(本机S3)URI的文件系统。
它应该在添加该属性后工作


编辑:如果它不能解决您的问题,那么您必须在类路径中添加JAR。能否检查mapred-site.xml是否具有mapreduce.application.classpath:/usr/hdp//hadoop-mapreduce/*。它将在classpath中包含其他相关JAR:)

根据阿披舍克对其答案的评论,我需要做的唯一更改是映射到mapred site.xml:

<property>
  <!-- Add to the classpath used when running an M/R job -->
  <name>mapreduce.application.classpath</name>
  <value>$HADOOP_MAPRED_HOME/share/hadoop/mapreduce/*,$HADOOP_MAPRED_HOME/share/hadoop/mapreduce/lib/*,$HADOOP_MAPRED_HOME/share/hadoop/tools/lib/*</value>
</property>

mapreduce.application.classpath
$HADOOP\u MAPRED\u HOME/share/HADOOP/mapreduce/*,$HADOOP\u MAPRED\u HOME/share/HADOOP/mapreduce/lib/*,$HADOOP\u MAPRED\u HOME/share/HADOOP/tools/lib/*

无需更改任何其他xml或sh文件。

在当前的Hadoop(3.1.1)中,这种方法不再有效。您可以通过取消对etc/HADOOP/HADOOP-env.sh文件中的HADOOP_OPTIONAL_TOOLS行的注释来修复此问题。在其他工具中,这将启用hadoop aws库。

运行带有
s3n
url的
distcp
,我得到
java.lang.ClassNotFoundException:Class org.apache.hadoop.fs.s3native.natives3文件系统未找到
,即使该确切的类位于
hadoop-aws-2.6.0.jar中
您必须在类路径中添加jar。能否检查mapred-site.xml是否具有mapreduce.application.classpath:/usr/hdp//hadoop-mapreduce/*。它将在classpathAbhishek中包含其他Relatt JAR,看起来mapreduce.application.classpath是正确的路径(并且是唯一需要的更改)。如果您发布/编辑带有该内容的答案,我将接受并删除我的。@SteveArmstrong编辑并在我的答案中添加注释:)