我正在尝试在本地计算机上重现 Amazon EMR 集群。为此,我安装了目前 Hadoop 的最新稳定版本 - 2.6.0 http://ftp.cixug.es/apache/hadoop/common/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,但我不知道从哪里可以获得这些。任何朝这个方向的指示将不胜感激。