没有文件系统scheme:hdfs and 找不到类org.apache.hadoop.distributedfilesystem

ldioqlga  于 2021-05-29  发布在  Hadoop
关注(0)|答案(2)|浏览(503)

我想上传一个文件到hdfs。我使用以下jar作为依赖项编译代码:
hadoop-auth-2.6.1.jar,
hadoop-common-2.6.1.jar和
hadoop-hdfs-2.6.1.jar,
我的代码:

我用ant编译的。但是,它给了我一个错误: No FileSystem for scheme:hdfs .
然后我修改了代码并再次编译:

但现在我又犯了一个错误: Class org.apache.hdfs.DistributedFileSystem not found .
怎么了?我该怎么办?

njthzxwz

njthzxwz1#

DistributedFileSystem 是的一部分 hadoop-core .
要解决此问题,您需要包括 hadoop-core-1.2.1.jar 另外(注意:我使用maven进行构建):

<dependency>
    <groupId>org.apache.hadoop</groupId>
    <artifactId>hadoop-core</artifactId>
    <version>1.2.1</version>
</dependency>

总的来说,我使用以下maven依赖项:

<dependency>
    <groupId>org.apache.hadoop</groupId>
    <artifactId>hadoop-common</artifactId>
    <version>2.7.1</version>
</dependency>

<dependency>
    <groupId>org.apache.hadoop</groupId>
    <artifactId>hadoop-mapreduce-client-core</artifactId>
    <version>2.7.1</version>
</dependency>

<dependency>
    <groupId>org.apache.hadoop</groupId>
    <artifactId>hadoop-core</artifactId>
    <version>1.2.1</version>
</dependency>
e5nqia27

e5nqia272#

获取hadoop filesystem对象时,如filesystem fs=filesystem.get(hdfsurl,configuration);
如果出现以下错误:“没有文件系统”scheme:hdfs"
您可以通过在配置上设置以下2个属性来解决此问题。

configuration.set("fs.hdfs.impl","org.apache.hadoop.hdfs.DistributedFileSystem");
configuration.set("fs.file.impl", "org.apache.hadoop.fs.LocalFileSystem");

现在,可能会出现如下新错误:

java.lang.ClassNotFoundException: Class org.apache.hadoop.hdfs.DistributedFileSystem not found

hadoop-common.jar使用thread.currentthread.getcontextclassloader()和configuration.getclassloader加载类。所以,如果您使用

Thread.currentThread.setContextClassLoader(yourClassLoader); 
configuration.setClassLoader(yourClassLoader);

您将能够从其他hadoopjar(例如hadoophdfs)加载所需的类
如果你需要更多的帮助,请告诉我。如果你觉得这有点用,别忘了投赞成票。

相关问题