用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]);
        }
    }
}
时间: 2024-12-26 05:34:59

用java运行Hadoop程序报错:org.apache.hadoop.fs.LocalFileSystem cannot be cast to org.apache.的相关文章

Window7中Eclipse运行MapReduce程序报错的问题

按照文档:http://www.micmiu.com/bigdata/hadoop/hadoop2x-eclipse-mapreduce-demo/安装配置好Eclipse后,运行WordCount程序报错: log4j:WARN No appenders could be found for logger (org.apache.hadoop.metrics2.lib.MutableMetricsFactory). log4j:WARN Please initialize the log4j

eclipse运行hadoop程序报错:Connection refused: no further information

log4j:WARN No appenders could be found for logger (org.apache.hadoop.conf.Configuration.deprecation). log4j:WARN Please initialize the log4j system properly. log4j:WARN See http://logging.apache.org/log4j/1.2/faq.html#noconfig for more info. Exceptio

eclipse 运行 mapreduce程序报错 No job jar file set. User classes may not be found. See JobConf(Class) or JobConf#setJar(String).

报错信息 17/07/06 17:00:27 WARN mapred.JobClient: Use GenericOptionsParser for parsing the arguments. Applications should implement Tool for the same.17/07/06 17:00:27 WARN mapred.JobClient: No job jar file set. User classes may not be found. See JobConf

Failed to resolve:com.android.support:appcompat-v7第一次运行安卓程序报错

1.当你在用别的电脑上的android studio编写一个项目时,然后copy下来,又在自己电脑上的android studio 上导入该项目时会报错(两台电脑上安装的android studio版本不一样) 2.自己的android studio SDK平台工具的版本太低,然后在不了解项目构建文件(build.gradle文件)的前提下,点开了SDK Manger更新了项目构建工具(SDK Build-Tools)的版本 看完上面两种情况,其实都可以发现它们的共同点,那就是版本问题,所以上述

解决Hadoop启动报错:File /opt/hadoop/tmp/mapred/system/jobtracker.info could only be replicated to 0 nodes, instead of 1

今天启动hadoop时,发现datanode启动不了,查看日志发现出现以下的错误: java.io.IOException: File /opt/hadoop/tmp/mapred/system/jobtracker.info could only be replicated to 0 nodes, instead of 1 at org.apache.hadoop.hdfs.server.namenode.FSNamesystem.getAdditionalBlock(FSNamesystem

Flash Builder4.0运行应用程序报错

1.错误描述 SecurityError: Error #2148: SWF 文件 file:///D:/Adobe Flash Builder 4 Installer/HVBox/bin-debug/VHBox.swf 不能访问本地资源 file:///D:/Adobe Flash Builder 4 Installer/HVBox/bin-debug/framework_4.0.0.14159.swf.只有仅限于文件系统的 SWF 文件和可信的本地 SWF 文件可以访问本地资源. at fl

运行编译后的程序报错 error while loading shared libraries: lib*.so: cannot open shared object file: No such file or directory

运行编译后的程序报错  error while loading shared libraries: lib*.so: cannot open shared object file: No such file or directory -------------------------------------------------------------------------------------------------------------------------------------

【爬坑】在 IDEA 中运行 Hadoop 程序 报 winutils.exe 不存在错误解决方案

0. 问题说明 环境为 Windows 10 在 IDEA 中运行 Hadoop 程序报   winutils.exe 不存在  错误 1. 解决方案 [1.1 解压] 解压 hadoop-2.7.3.zip 文件到自定义目录 [1.2 配置 Hadoop 环境变量] 新建HADOOP_HOME,变量值为D:\program\hadoop-2.7.3 添加PATH,添加%HADOOP_HOME%\bin;%HADOOP_HOME%\sbin [1.3 重启 IDEA] [ 1.4 测试配置 ]

WinDbg抓取程序报错dump文件的方法

程序崩溃的两种主要现象: a. 程序在运行中的时候,突然弹出错误窗口,然后点错误窗口的确定时,程序直接关闭 例如: “应用程序错误” “C++错误之类的窗口” “程序无响应” “假死”等 此种崩溃特点:程序已异常,在你未点出错窗口的确定或其他按,所有错误信息都还保留在PC的内存中,可以直接抓取Dump文件.当然,如果你知道 怎么样操作可以让程序崩溃,也可以用守株待兔的抓取方法抓Dump文件. b.程序在运行中的时候,窗口和进程突然消失,没有任何错误窗体 典型的现象:程序自动关闭 或者玩游戏时,游