将 HDFS 从本地磁盘替换为 s3 出现错误 (org.apache.hadoop.service.AbstractService)
Replace HDFS form local disk to s3 getting error (org.apache.hadoop.service.AbstractService)
我们正在尝试设置 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>
设置完成后,我们可以通过命令浏览 s3 存储桶的文件
hadoop fs -ls /
并且它显示了仅在 s3 上可用的文件。
但是当我们启动 yarn 服务时,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.run(FileContext.java:337)
at org.apache.hadoop.fs.FileContext.run(FileContext.java:334)
at java.security.AccessController.doPrivileged(Native Method)
at javax.security.auth.Subject.doAs(Subject.java:415)
在互联网上搜索我们发现我们还需要在 core-site.xml
中设置以下属性
<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>
设置上述属性后出现以下错误
org.apache.hadoop.service.AbstractService
Service org.apache.hadoop.mapreduce.v2.hs.HistoryFileManager failed in state INITED; cause: java.lang.RuntimeException: java.lang.NoSuchMethodException: org.apache.hadoop.fs.s3a.S3AFileSystem.<init>(java.net.URI, org.apache.hadoop.conf.Configuration)
java.lang.RuntimeException: java.lang.NoSuchMethodException: org.apache.hadoop.fs.s3a.S3AFileSystem.<init>(java.net.URI, org.apache.hadoop.conf.Configuration)
at org.apache.hadoop.fs.AbstractFileSystem.newInstance(AbstractFileSystem.java:131)
at org.apache.hadoop.fs.AbstractFileSystem.createFileSystem(AbstractFileSystem.java:157)
at org.apache.hadoop.fs.AbstractFileSystem.get(AbstractFileSystem.java:242)
at org.apache.hadoop.fs.FileContext.run(FileContext.java:337)
at org.apache.hadoop.fs.FileContext.run(FileContext.java:334)
at java.security.AccessController.doPrivileged(Native Method)
at javax.security.auth.Subject.doAs(Subject.java:415)
at org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1671)
at org.apache.hadoop.fs.FileContext.getAbstractFileSystem(FileContext.java:334)
at org.apache.hadoop.fs.FileContext.getFileContext(FileContext.java:451)
at org.apache.hadoop.fs.FileContext.getFileContext(FileContext.java:473)
at org.apache.hadoop.mapreduce.v2.jobhistory.JobHistoryUtils.getDefaultFileContext(JobHistoryUtils.java:247)
为此所需的 jars 已准备就绪,但仍然出现错误任何帮助都将非常有用。提前致谢
更新
我试图删除 属性 fs.AbstractFileSystem.s3a.impl 但它给了我与我之前得到的相同的第一个异常这是
org.apache.hadoop.security.UserGroupInformation
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://bucket_name]
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.run(FileContext.java:337)
at org.apache.hadoop.fs.FileContext.run(FileContext.java:334)
at java.security.AccessController.doPrivileged(Native Method)
at javax.security.auth.Subject.doAs(Subject.java:415)
at org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1671)
at org.apache.hadoop.fs.FileContext.getAbstractFileSystem(FileContext.java:334)
at org.apache.hadoop.fs.FileContext.getFileContext(FileContext.java:451)
at org.apache.hadoop.fs.FileContext.getFileContext(FileContext.java:473)
问题不在于罐子的位置。
设置有问题:
<property>
<name>fs.AbstractFileSystem.s3a.impl</name>
<value>org.apache.hadoop.fs.s3a.S3AFileSystem</value>
<description>The FileSystem for S3A Filesystem</description>
</property>
不需要此设置。由于此设置,它正在 S3AFileSystem
class 中搜索以下构造函数,但没有这样的构造函数:
S3AFileSystem(URI theUri, Configuration conf);
以下异常清楚地表明它无法找到具有 URI
和 Configuration
参数的 S3AFileSystem
的构造函数。
java.lang.RuntimeException: java.lang.NoSuchMethodException: org.apache.hadoop.fs.s3a.S3AFileSystem.<init>(java.net.URI, org.apache.hadoop.conf.Configuration)
要解决此问题,请从 core-site.xml
中删除 fs.AbstractFileSystem.s3a.impl
设置。只需在 core-site.xml
中设置 fs.s3a.impl
即可解决您的问题。
编辑:
org.apache.hadoop.fs.s3a.S3AFileSystem
只是实现 FileSystem
。
因此,您不能将 fs.AbstractFileSystem.s3a.impl
的值设置为 org.apache.hadoop.fs.s3a.S3AFileSystem
,因为 org.apache.hadoop.fs.s3a.S3AFileSystem
没有实现 AbstractFileSystem
。
我使用的是 Hadoop 2.7.0,在此版本中 s3A
未公开为 AbstractFileSystem
。
有 JIRA 票证:https://issues.apache.org/jira/browse/HADOOP-11262 可以实现相同的,Hadoop 2.8.0 中提供了修复。
假设,您的 jar 已将 s3A
公开为 AbstractFileSystem
,您需要为 fs.AbstractFileSystem.s3a.impl
设置以下内容:
<property>
<name>fs.AbstractFileSystem.s3a.impl</name>
<value>org.apache.hadoop.fs.s3a.S3A</value>
</property>
这将解决您的问题。
我们正在尝试设置 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>
设置完成后,我们可以通过命令浏览 s3 存储桶的文件
hadoop fs -ls /
并且它显示了仅在 s3 上可用的文件。
但是当我们启动 yarn 服务时,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.run(FileContext.java:337)
at org.apache.hadoop.fs.FileContext.run(FileContext.java:334)
at java.security.AccessController.doPrivileged(Native Method)
at javax.security.auth.Subject.doAs(Subject.java:415)
在互联网上搜索我们发现我们还需要在 core-site.xml
中设置以下属性<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>
设置上述属性后出现以下错误
org.apache.hadoop.service.AbstractService
Service org.apache.hadoop.mapreduce.v2.hs.HistoryFileManager failed in state INITED; cause: java.lang.RuntimeException: java.lang.NoSuchMethodException: org.apache.hadoop.fs.s3a.S3AFileSystem.<init>(java.net.URI, org.apache.hadoop.conf.Configuration)
java.lang.RuntimeException: java.lang.NoSuchMethodException: org.apache.hadoop.fs.s3a.S3AFileSystem.<init>(java.net.URI, org.apache.hadoop.conf.Configuration)
at org.apache.hadoop.fs.AbstractFileSystem.newInstance(AbstractFileSystem.java:131)
at org.apache.hadoop.fs.AbstractFileSystem.createFileSystem(AbstractFileSystem.java:157)
at org.apache.hadoop.fs.AbstractFileSystem.get(AbstractFileSystem.java:242)
at org.apache.hadoop.fs.FileContext.run(FileContext.java:337)
at org.apache.hadoop.fs.FileContext.run(FileContext.java:334)
at java.security.AccessController.doPrivileged(Native Method)
at javax.security.auth.Subject.doAs(Subject.java:415)
at org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1671)
at org.apache.hadoop.fs.FileContext.getAbstractFileSystem(FileContext.java:334)
at org.apache.hadoop.fs.FileContext.getFileContext(FileContext.java:451)
at org.apache.hadoop.fs.FileContext.getFileContext(FileContext.java:473)
at org.apache.hadoop.mapreduce.v2.jobhistory.JobHistoryUtils.getDefaultFileContext(JobHistoryUtils.java:247)
为此所需的 jars 已准备就绪,但仍然出现错误任何帮助都将非常有用。提前致谢
更新
我试图删除 属性 fs.AbstractFileSystem.s3a.impl 但它给了我与我之前得到的相同的第一个异常这是
org.apache.hadoop.security.UserGroupInformation
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://bucket_name]
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.run(FileContext.java:337)
at org.apache.hadoop.fs.FileContext.run(FileContext.java:334)
at java.security.AccessController.doPrivileged(Native Method)
at javax.security.auth.Subject.doAs(Subject.java:415)
at org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1671)
at org.apache.hadoop.fs.FileContext.getAbstractFileSystem(FileContext.java:334)
at org.apache.hadoop.fs.FileContext.getFileContext(FileContext.java:451)
at org.apache.hadoop.fs.FileContext.getFileContext(FileContext.java:473)
问题不在于罐子的位置。
设置有问题:
<property>
<name>fs.AbstractFileSystem.s3a.impl</name>
<value>org.apache.hadoop.fs.s3a.S3AFileSystem</value>
<description>The FileSystem for S3A Filesystem</description>
</property>
不需要此设置。由于此设置,它正在 S3AFileSystem
class 中搜索以下构造函数,但没有这样的构造函数:
S3AFileSystem(URI theUri, Configuration conf);
以下异常清楚地表明它无法找到具有 URI
和 Configuration
参数的 S3AFileSystem
的构造函数。
java.lang.RuntimeException: java.lang.NoSuchMethodException: org.apache.hadoop.fs.s3a.S3AFileSystem.<init>(java.net.URI, org.apache.hadoop.conf.Configuration)
要解决此问题,请从 core-site.xml
中删除 fs.AbstractFileSystem.s3a.impl
设置。只需在 core-site.xml
中设置 fs.s3a.impl
即可解决您的问题。
编辑:
org.apache.hadoop.fs.s3a.S3AFileSystem
只是实现 FileSystem
。
因此,您不能将 fs.AbstractFileSystem.s3a.impl
的值设置为 org.apache.hadoop.fs.s3a.S3AFileSystem
,因为 org.apache.hadoop.fs.s3a.S3AFileSystem
没有实现 AbstractFileSystem
。
我使用的是 Hadoop 2.7.0,在此版本中 s3A
未公开为 AbstractFileSystem
。
有 JIRA 票证:https://issues.apache.org/jira/browse/HADOOP-11262 可以实现相同的,Hadoop 2.8.0 中提供了修复。
假设,您的 jar 已将 s3A
公开为 AbstractFileSystem
,您需要为 fs.AbstractFileSystem.s3a.impl
设置以下内容:
<property>
<name>fs.AbstractFileSystem.s3a.impl</name>
<value>org.apache.hadoop.fs.s3a.S3A</value>
</property>
这将解决您的问题。