我试图在本地机器上复制一个amazon emr集群。为此,我安装了hadoop的最新稳定版本-2.6.0。现在我想访问一个s3存储桶,就像我在emr集群中所做的那样。
我在core-site.xml中添加了aws凭据:
<property>
<name>fs.s3.awsAccessKeyId</name>
<value>some id</value>
</property>
<property>
<name>fs.s3n.awsAccessKeyId</name>
<value>some id</value>
</property>
<property>
<name>fs.s3.awsSecretAccessKey</name>
<value>some key</value>
</property>
<property>
<name>fs.s3n.awsSecretAccessKey</name>
<value>some key</value>
</property>
注意:由于键上有一些斜杠,我用%2f对它们进行了转义
如果我尝试列出桶中的内容:
hadoop fs -ls s3://some-url/bucket/
我得到这个错误:
ls:方案s3没有文件系统
我再次编辑了core-site.xml,并添加了与fs相关的信息:
<property>
<name>fs.s3.impl</name>
<value>org.apache.hadoop.fs.s3.S3FileSystem</value>
</property>
<property>
<name>fs.s3n.impl</name>
<value>org.apache.hadoop.fs.s3native.NativeS3FileSystem</value>
</property>
这次我得到了一个不同的错误:
-ls: Fatal internal error
java.lang.RuntimeException: java.lang.ClassNotFoundException: Class org.apache.hadoop.fs.s3.S3FileSystem not found
at org.apache.hadoop.conf.Configuration.getClass(Configuration.java:2074)
at org.apache.hadoop.fs.FileSystem.getFileSystemClass(FileSystem.java:2578)
at org.apache.hadoop.fs.FileSystem.createFileSystem(FileSystem.java:2591)
不知何故,我怀疑Yarn分布没有必要的jar能够读取s3,但我不知道从哪里得到这些。任何这方面的指示都将不胜感激。
5条答案
按热度按时间nom7f22z1#
@ashrith的回答对我有一个修改:我必须使用
$HADOOP_PREFIX
而不是$HADOOP_HOME
在ubuntu上运行v2.6时。也许这是因为听起来$HADOOP_HOME
不赞成吗?export HADOOP_CLASSPATH=$HADOOP_CLASSPATH:${HADOOP_PREFIX}/share/hadoop/tools/lib/*
话虽如此,这两个版本在我的mac上都不起作用,我的mac是通过自制软件安装v2.6的。在这种情况下,我使用了这个非常笨拙的导出:export HADOOP_CLASSPATH=$HADOOP_CLASSPATH:$(brew --prefix hadoop)/libexec/share/hadoop/tools/lib/*
ki0zmccv2#
vmjh9lq93#
如果您使用的是hdp2.x或更高版本,可以尝试在ambari的mapreduce2配置设置中修改以下属性。
mapreduce.application.classpath
将以下值附加到现有字符串的末尾:
/usr/hdp/${hdp.version}/hadoopMap减少/*
bxpogfeg4#
不知什么原因,jar
hadoop-aws-[version].jar
其中包含NativeS3FileSystem
不存在于classpath
在2.6和2.7版本中默认使用hadoop的。因此,尝试通过在中添加以下行将其添加到类路径hadoop-env.sh
位于$HADOOP_HOME/etc/hadoop/hadoop-env.sh
:假设您使用的是ApacheHadoop2.6或2.7
顺便说一下,您可以使用以下方法检查hadoop的类路径:
iszxjhcz5#
为了解决这个问题,我尝试了以上所有方法,但都失败了(无论如何,对于我的环境)。
不过,通过将上面提到的两个jar从tools dir复制到common/lib中,我可以让它正常工作。
在那之后工作得很好。