将HDFS从本地磁盘替换为s3获取错误(org.apache.hadoop.service.AbstractService)

将HDFS从本地磁盘替换为s3获取错误(org.apache.hadoop.service.AbstractService),hadoop,amazon-s3,hdfs,Hadoop,Amazon S3,Hdfs,我们正在尝试设置Cloudera 5.5,其中HDFS将只在s3上工作,因为我们已经在Core-site.xml中配置了必需的属性 <property> <name>fs.s3a.access.key</name> <value>################</value> </property> <property> <name>fs.s3a.secret.key<

我们正在尝试设置Cloudera 5.5,其中HDFS将只在s3上工作,因为我们已经在Core-site.xml中配置了必需的属性

<property>
    <name>fs.s3a.access.key</name>
    <value>################</value>
</property>
<property>
    <name>fs.s3a.secret.key</name>
    <value>###############</value>
</property>
<property>
    <name>fs.default.name</name>
    <value>s3a://bucket_Name</value>
</property>
<property>
    <name>fs.defaultFS</name>
    <value>s3a://bucket_Name</value>
</property>
<property>
  <name>fs.s3a.impl</name>
  <value>org.apache.hadoop.fs.s3a.S3AFileSystem</value>
  <description>The implementation class of the S3A Filesystem</description>
</property>
<property>
    <name>fs.AbstractFileSystem.s3a.impl</name>
    <value>org.apache.hadoop.fs.s3a.S3AFileSystem</value>
    <description>The FileSystem for  S3A Filesystem</description>
</property>
它显示了仅在s3上可用的文件

但是,当我们启动Thread services JobHistory服务器时,由于以下错误而无法启动,并且在启动pig作业时,我们得到了相同的错误

PriviledgedActionException as:mapred (auth:SIMPLE) cause:org.apache.hadoop.fs.UnsupportedFileSystemException: No AbstractFileSystem for scheme: s3a
ERROR   org.apache.hadoop.mapreduce.v2.jobhistory.JobHistoryUtils   
Unable to create default file context [s3a://kyvosps]
org.apache.hadoop.fs.UnsupportedFileSystemException: No AbstractFileSystem for scheme: s3a
    at org.apache.hadoop.fs.AbstractFileSystem.createFileSystem(AbstractFileSystem.java:154)
    at org.apache.hadoop.fs.AbstractFileSystem.get(AbstractFileSystem.java:242)
    at org.apache.hadoop.fs.FileContext$2.run(FileContext.java:337)
    at org.apache.hadoop.fs.FileContext$2.run(FileContext.java:334)
    at java.security.AccessController.doPrivileged(Native Method)
    at javax.security.auth.Subject.doAs(Subject.java:415)
在Internet上搜索时,我们发现需要在core-site.xml中设置以下属性

<property>
    <name>fs.s3a.access.key</name>
    <value>################</value>
</property>
<property>
    <name>fs.s3a.secret.key</name>
    <value>###############</value>
</property>
<property>
    <name>fs.default.name</name>
    <value>s3a://bucket_Name</value>
</property>
<property>
    <name>fs.defaultFS</name>
    <value>s3a://bucket_Name</value>
</property>
<property>
  <name>fs.s3a.impl</name>
  <value>org.apache.hadoop.fs.s3a.S3AFileSystem</value>
  <description>The implementation class of the S3A Filesystem</description>
</property>
<property>
    <name>fs.AbstractFileSystem.s3a.impl</name>
    <value>org.apache.hadoop.fs.s3a.S3AFileSystem</value>
    <description>The FileSystem for  S3A Filesystem</description>
</property>

问题不在于罐子的位置

问题在于设置:

<property>
    <name>fs.AbstractFileSystem.s3a.impl</name>
    <value>org.apache.hadoop.fs.s3a.S3AFileSystem</value>
    <description>The FileSystem for  S3A Filesystem</description>
</property>
以下异常清楚地表明,它无法找到具有
URI
配置
参数的
S3AFileSystem
的构造函数

java.lang.RuntimeException: java.lang.NoSuchMethodException: org.apache.hadoop.fs.s3a.S3AFileSystem.<init>(java.net.URI, org.apache.hadoop.conf.Configuration)

这将解决您的问题。

jar文件的位置是什么?它们在所有节点上都位于同一位置吗?@DurgaViswanathGadiraju位置是“/opt/cloudera/parcels/CDH-5.5.0-1.cdh5.5.0.p0.8/lib/hadoop”,是的,它们在所有节点上都位于同一位置我也尝试过,这给了我错误“PriviledgedActionException as:mapred(auth:SIMPLE)原因:org.apache.hadoop.fs.UnsupportedFileSystemException:scheme:s3a没有抽象文件系统“正因为如此,我在core-stie.xml中添加了属性,我还会更新我的问题,你能告诉我,你从哪里为s3a文件系统取jar吗?那么,我一定能解决你的问题。我在这里看到了实现:,它只是实现了FileSystem.jar,它位于cloudera的默认位置,即“/opt/cloudera/parcels/CDH-5.5.0-1.cdh5.5.0.p0.8/lib/hadoop”jar的名称是hadoop-aws-2.6.0-cdh5.5.0.jar感谢您的努力和时间,我们非常感谢itI使用hadoop 2.6.0,所以我们需要等到2.8.0。谢谢你的帮助和时间
S3AFileSystem(URI theUri, Configuration conf);
java.lang.RuntimeException: java.lang.NoSuchMethodException: org.apache.hadoop.fs.s3a.S3AFileSystem.<init>(java.net.URI, org.apache.hadoop.conf.Configuration)
<property>
    <name>fs.AbstractFileSystem.s3a.impl</name>
    <value>org.apache.hadoop.fs.s3a.S3A</value>
</property>