用java运行Hadoop例程报错,帮看看org.apache.hadoop.fs.LocalFileSystem cannot be cast to org.apache.

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了用java运行Hadoop例程报错,帮看看org.apache.hadoop.fs.LocalFileSystem cannot be cast to org.apache.相关的知识,希望对你有一定的参考价值。

Exception in thread "main" java.lang.ClassCastException: org.apache.hadoop.fs.LocalFileSystem cannot be cast to org.apache.hadoop.hdfs.DistributedFileSystem
at org.apache.hadoop.examples.FindFileOnHDFS.getHDFSNodes(FindFileOnHDFS.java:43)
at org.apache.hadoop.examples.FindFileOnHDFS.main(FindFileOnHDFS.java:16)
怎么改啊?
public class FindFileOnHDFS

public static void main(String[] args) throws Exception
getHDFSNodes();


...
public static void getHDFSNodes() throws Exception
Configuration conf = new Configuration();
FileSystem fs = FileSystem.get(conf);
DistributedFileSystem hdfs = (DistributedFileSystem)fs;(此处出错)
DatanodeInfo[] dataNodeStats = hdfs.getDataNodeStats();
...


代码是别人的,肯定没错的,是我设置的问题,但是我又不太会,请各位大侠帮帮忙啦~

你的FileSystem是LocalFileSystem,是这个类org.apache.hadoop.fs.LocalFileSystem,并非org.apache.hadoop.hdfs.DistributedFileSystem这个类,所以强转会报错,你需要在conf中设置fs.default.name这个参数值,默认是file:///,所以FileSystem fs = FileSystem.get(conf);
得到的是LocalFileSystem,你使用conf.set("fs.default.name",”hdfs://master:9000“)试试
参考技术A DistributedFileSystem和LocalFileSystem都是FileSystem的子类,FileSystem.get(conf)得到的是LocalFileSystem的instance, 这个类型应该是默认的,要获得DistributedFileSystem,确实应该是要配置conf对象追问

怎么配置conf呢?能说具体点儿吗?谢谢

追答

如果你完全按照 http://tech.ddvip.com/2012-08/1346342312181053_2.html

中的示例仍然报错,那么可能hadoop存在安装时的配置和你要求的并不一致;FileSystem.get(conf)返回的默认的是LocalFileSystem,应该是和安装配置有关的

//FS keys
049      /** See <a href="@docRoot/../core-default.html">core-default.xml</a> */
050      public static final String  FS_DEFAULT_NAME_KEY = "fs.defaultFS";
051      /** Default value for FS_DEFAULT_NAME_KEY */
052      public static final String  FS_DEFAULT_NAME_DEFAULT = "file:///";

本回答被提问者采纳

以上是关于用java运行Hadoop例程报错,帮看看org.apache.hadoop.fs.LocalFileSystem cannot be cast to org.apache.的主要内容,如果未能解决你的问题,请参考以下文章

问题解决系列:java运行HiveQL,报错:java.lang.NoClassDefFoundError_ org_apache_hadoop_conf_Configuration

在运行JAVA程序时出错,大家帮看一下是怎么回事,最好懂hadoop编程~~

MapReduce报错:Exception in thread “main“ java.lang.UnsatisfiedLinkError: org.apache.hadoop.io.nativeio

hbase报错org.apache.hadoop.ipc.RemoteException(java.lang.NullPointerException): java.lang.NullPointerE

按照网上的《Ubuntu下hadoop运行与配置pdf》当操作到hadoop下复制输入文件到HDFS为啥总是报错如下:

hive启动报错 java.lang.ClassNotFoundException: org.apache.hadoop.mapred.MRVersion