java.lang.UnsupportedOperationException:FileSystem.get() 期间 DistributedFileSystem 文件系统实现未实现
java.lang.UnsupportedOperationException: Not implemented by the DistributedFileSystem FileSystem implementation during FileSystem.get()
请查找附件中的代码片段。我正在使用此代码将文件从 hdfs 下载到我的本地文件系统 -
Configuration conf = new Configuration();
FileSystem hdfsFileSystem = FileSystem.get(conf);
Path local = new Path(destinationPath);
Path hdfs = new Path(sourcePath);
String fileName = hdfs.getName();
if (hdfsFileSystem.exists(hdfs))
{
hdfsFileSystem.copyToLocalFile(false, hdfs, local, true);
logger.info("File " + fileName + " copied to local machine on location: " + destinationPath);
}
else
{
logger.error("File " + fileName + " does not exist on HDFS on location: " + sourcePath);
}
运行 这给出了以下输出 -
Exception in thread "main" java.lang.UnsupportedOperationException: Not implemented by the DistributedFileSystem FileSystem implementation
at org.apache.hadoop.fs.FileSystem.getScheme(FileSystem.java:217)
at org.apache.hadoop.fs.FileSystem.loadFileSystems(FileSystem.java:2624)
at org.apache.hadoop.fs.FileSystem.getFileSystemClass(FileSystem.java:2634)
at org.apache.hadoop.fs.FileSystem.createFileSystem(FileSystem.java:2651)
at org.apache.hadoop.fs.FileSystem.access0(FileSystem.java:92)
at org.apache.hadoop.fs.FileSystem$Cache.getInternal(FileSystem.java:2687)
at org.apache.hadoop.fs.FileSystem$Cache.get(FileSystem.java:2669)
at org.apache.hadoop.fs.FileSystem.get(FileSystem.java:371)
at org.apache.hadoop.fs.FileSystem.get(FileSystem.java:170)
at com.flipkart.ads.importer.HdfsToLocalImporter.importFile(HdfsToLocalImporter.java:35)
at com.flipkart.ads.importer.HdfsToLocalImporter.main(HdfsToLocalImporter.java:56)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:497)
at com.intellij.rt.execution.application.AppMain.main(AppMain.java:140)
Process finished with exit code 1
我错过了什么?
你不见了conf.addResources
。您初始化了 Configuration
对象,但它仍然是空的。
检查 here 文档
编辑:
试试这个:
conf.addResource(new Path("<absolute file path>"))
您只需将配置对象指向您的 hdfs 服务器。采用
conf.set("fs.defaultFS", "hdfs://urlhere:8020");
已解决
没想到。这是一个 jar 不匹配问题。 Hadoop-code 和 Hadoop-commons 提供相同的 jar,我已经包含了这两个依赖项。
检查你的构建 path.If 你在那里看到 hadoop-core*****.jar,删除它。不需要。这将解决问题
请查找附件中的代码片段。我正在使用此代码将文件从 hdfs 下载到我的本地文件系统 -
Configuration conf = new Configuration();
FileSystem hdfsFileSystem = FileSystem.get(conf);
Path local = new Path(destinationPath);
Path hdfs = new Path(sourcePath);
String fileName = hdfs.getName();
if (hdfsFileSystem.exists(hdfs))
{
hdfsFileSystem.copyToLocalFile(false, hdfs, local, true);
logger.info("File " + fileName + " copied to local machine on location: " + destinationPath);
}
else
{
logger.error("File " + fileName + " does not exist on HDFS on location: " + sourcePath);
}
运行 这给出了以下输出 -
Exception in thread "main" java.lang.UnsupportedOperationException: Not implemented by the DistributedFileSystem FileSystem implementation
at org.apache.hadoop.fs.FileSystem.getScheme(FileSystem.java:217)
at org.apache.hadoop.fs.FileSystem.loadFileSystems(FileSystem.java:2624)
at org.apache.hadoop.fs.FileSystem.getFileSystemClass(FileSystem.java:2634)
at org.apache.hadoop.fs.FileSystem.createFileSystem(FileSystem.java:2651)
at org.apache.hadoop.fs.FileSystem.access0(FileSystem.java:92)
at org.apache.hadoop.fs.FileSystem$Cache.getInternal(FileSystem.java:2687)
at org.apache.hadoop.fs.FileSystem$Cache.get(FileSystem.java:2669)
at org.apache.hadoop.fs.FileSystem.get(FileSystem.java:371)
at org.apache.hadoop.fs.FileSystem.get(FileSystem.java:170)
at com.flipkart.ads.importer.HdfsToLocalImporter.importFile(HdfsToLocalImporter.java:35)
at com.flipkart.ads.importer.HdfsToLocalImporter.main(HdfsToLocalImporter.java:56)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:497)
at com.intellij.rt.execution.application.AppMain.main(AppMain.java:140)
Process finished with exit code 1
我错过了什么?
你不见了conf.addResources
。您初始化了 Configuration
对象,但它仍然是空的。
检查 here 文档
编辑: 试试这个:
conf.addResource(new Path("<absolute file path>"))
您只需将配置对象指向您的 hdfs 服务器。采用
conf.set("fs.defaultFS", "hdfs://urlhere:8020");
已解决
没想到。这是一个 jar 不匹配问题。 Hadoop-code 和 Hadoop-commons 提供相同的 jar,我已经包含了这两个依赖项。
检查你的构建 path.If 你在那里看到 hadoop-core*****.jar,删除它。不需要。这将解决问题