zoukankan      html  css  js  c++  java
  • 用java运行Hadoop程序报错:org.apache.hadoop.fs.LocalFileSystem cannot be cast to org.apache.

    用java运行Hadoop例程报错:org.apache.hadoop.fs.LocalFileSystem cannot be cast to org.apache.所写代码如下:

    package com.pcitc.hadoop;
    
    import java.io.IOException;
    
    import org.apache.hadoop.conf.Configuration;
    import org.apache.hadoop.fs.FileSystem;
    import org.apache.hadoop.hdfs.DistributedFileSystem;
    import org.apache.hadoop.hdfs.protocol.DatanodeInfo;
    
    /**
     * 获取HDFS集群上所有节点名称
     * @author lenovo
     *
     */
    public class GetList {
        public static void main(String[] args) throws IOException {
            Configuration conf = new Configuration();
            conf.set("dfs.default.name", "hdfs://hadoopmaster:9000");
            FileSystem fs = FileSystem.get(conf);
            DistributedFileSystem hdfs = (DistributedFileSystem) fs;
            DatanodeInfo[] dataNodeStats = hdfs.getDataNodeStats();
            String[] names = new String[dataNodeStats.length];
            for (int i = 0; i < dataNodeStats.length; i++) {
                names[i] = dataNodeStats[i].getHostName();
                System.out.println("node" + i + "name" + names[i]);
            }
        }
    }

    执行之后报如下错误:

    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)

    原因是DistributedFileSystem和LocalFileSystem都是FileSystem的子类,FileSystem.get(conf)得到的是LocalFileSystem的instance, 这个类型应该是默认的,要获得DistributedFileSystem,需要配置conf对象,按照我的写法我觉得应该是配了conf对象了,但是还是保存,最后按照网上的说法进行相应修改就可以了。直接上修改后的代码如下(注意红色部分):

    package com.pcitc.hadoop;
    
    import java.io.IOException;
    import java.net.URI;
    
    import org.apache.hadoop.conf.Configuration;
    import org.apache.hadoop.fs.FileSystem;
    import org.apache.hadoop.hdfs.DistributedFileSystem;
    import org.apache.hadoop.hdfs.protocol.DatanodeInfo;
    
    /**
     * 获取HDFS集群上所有节点名称
     * 
     * @author lenovo
     * 
     */
    public class GetList {
        public static void main(String[] args) throws IOException {
            Configuration conf = new Configuration();
            // conf.set("dfs.default.name", "hdfs://hadoopmaster:9000");
            String uri = "hdfs://hadoopmaster:9000";
            FileSystem fs = FileSystem.get(URI.create(uri), conf);
            DistributedFileSystem hdfs = (DistributedFileSystem) fs;
            DatanodeInfo[] dataNodeStats = hdfs.getDataNodeStats();
            String[] names = new String[dataNodeStats.length];
            for (int i = 0; i < dataNodeStats.length; i++) {
                names[i] = dataNodeStats[i].getHostName();
                System.out.println("node:" + i + ",name:" + names[i]);
            }
        }
    }
  • 相关阅读:
    1分2分5分的硬币,组成1角,共有多少种组合
    二叉树结点间最大距离
    五猴分桃问题
    大数加法、乘法
    Java内存回收机制全解(算法+内存分配)
    java实现两个大数相加,可能出现溢出错误
    如果两个字符串的字符一样,但是顺序不一样,被认为是兄弟字符串,问如何在迅速匹配兄弟字符串(如,bad和adb就是兄弟字符串)
    已知有个rand7()的函数,返回1到7随机自然数,让利用这个rand7()构造rand10() 随机1~10
    Windows Phone 使用 HttpWebRequest 对象,通过POST 方式上传图片
    Windows Phone 内存检测方法
  • 原文地址:https://www.cnblogs.com/longshiyVip/p/4811639.html
Copyright © 2011-2022 走看看