NameNode 地址的 URI 无效,s3a 不属于架构 'hdfs'
Invalid URI for NameNode address, s3a is not of schema 'hdfs'
我正在做一些关于在 hadoop 环境(yarn)中用 Ceph 替换 HDFS 的事情,根据我的研究,hortonworks and 的指南告诉我我需要修改 core-site.xml
下的 $hadoop_home/etc/hadoop
.
我的修改如下:
<property>
<name>fs.s3a.access.key</name>
<value>xxxxxxxxxxxxxx</value>
</property>
<property>
<name>fs.s3a.secret.key</name>
<value>xxxxxxxxxxxxx</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.endpoint</name>
<value>http://x.x.x.x:xxxx</value>
</property>
<property>
<name>fs.AbstractFileSystem.s3a.imp</name>
<value>org.apache.hadoop.fs.s3a.S3A</value>
</property>
但是,当我尝试通过 sbin/start-all.sh
启动 hadoop 时,出现如下错误,
java.lang.IllegalArgumentException: Invalid URI for NameNode address (check fs.defaultFS): s3a://bucket_name is not of scheme 'hdfs'.
供您参考,我的hadoop版本是3.2.0。
提前感谢您的帮助。
在深入研究 hadoop
源代码后,我认为应该抛出这个异常。
当您尝试调用 sbin/start-all.sh
.
时,无法跳过下面的代码
/**
* @return address of file system
*/
public static InetSocketAddress getNNAddress(URI filesystemURI) {
String authority = filesystemURI.getAuthority();
if (authority == null) {
throw new IllegalArgumentException(String.format(
"Invalid URI for NameNode address (check %s): %s has no authority.",
FileSystem.FS_DEFAULT_NAME_KEY, filesystemURI.toString()));
}
if (!HdfsConstants.HDFS_URI_SCHEME.equalsIgnoreCase(
filesystemURI.getScheme())) {
throw new IllegalArgumentException(String.format(
"Invalid URI for NameNode address (check %s): " +
"%s is not of scheme '%s'.", FileSystem.FS_DEFAULT_NAME_KEY,
filesystemURI.toString(), HdfsConstants.HDFS_URI_SCHEME));
}
return getNNAddress(authority);
}
我不需要启动 namenode
和 secondarynamenode
因为我使用 ceph 作为我的后端存储系统。 ceph本身可以通过它的driver
来管理它所谓的datanode
。
为可能有同样问题的任何人保留主题,欢迎对我的理解发表任何评论。
我正在做一些关于在 hadoop 环境(yarn)中用 Ceph 替换 HDFS 的事情,根据我的研究,hortonworks and core-site.xml
下的 $hadoop_home/etc/hadoop
.
我的修改如下:
<property>
<name>fs.s3a.access.key</name>
<value>xxxxxxxxxxxxxx</value>
</property>
<property>
<name>fs.s3a.secret.key</name>
<value>xxxxxxxxxxxxx</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.endpoint</name>
<value>http://x.x.x.x:xxxx</value>
</property>
<property>
<name>fs.AbstractFileSystem.s3a.imp</name>
<value>org.apache.hadoop.fs.s3a.S3A</value>
</property>
但是,当我尝试通过 sbin/start-all.sh
启动 hadoop 时,出现如下错误,
java.lang.IllegalArgumentException: Invalid URI for NameNode address (check fs.defaultFS): s3a://bucket_name is not of scheme 'hdfs'.
供您参考,我的hadoop版本是3.2.0。
提前感谢您的帮助。
在深入研究 hadoop
源代码后,我认为应该抛出这个异常。
当您尝试调用 sbin/start-all.sh
.
/**
* @return address of file system
*/
public static InetSocketAddress getNNAddress(URI filesystemURI) {
String authority = filesystemURI.getAuthority();
if (authority == null) {
throw new IllegalArgumentException(String.format(
"Invalid URI for NameNode address (check %s): %s has no authority.",
FileSystem.FS_DEFAULT_NAME_KEY, filesystemURI.toString()));
}
if (!HdfsConstants.HDFS_URI_SCHEME.equalsIgnoreCase(
filesystemURI.getScheme())) {
throw new IllegalArgumentException(String.format(
"Invalid URI for NameNode address (check %s): " +
"%s is not of scheme '%s'.", FileSystem.FS_DEFAULT_NAME_KEY,
filesystemURI.toString(), HdfsConstants.HDFS_URI_SCHEME));
}
return getNNAddress(authority);
}
我不需要启动 namenode
和 secondarynamenode
因为我使用 ceph 作为我的后端存储系统。 ceph本身可以通过它的driver
来管理它所谓的datanode
。
为可能有同样问题的任何人保留主题,欢迎对我的理解发表任何评论。