2 rjy1989 rjy1989 于 2013.11.19 16:26 提问

我在java上运行Hadoop的例程 FindFileOnHDFS 结果报错了

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)
怎么办?
例程的代码如下(代码是肯定没错的):
package org.apache.hadoop.examples;

import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.BlockLocation;
import org.apache.hadoop.fs.FileStatus;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.hdfs.DistributedFileSystem;
import org.apache.hadoop.hdfs.protocol.DatanodeInfo;

public class FindFileOnHDFS {

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

public static void getFileLocal() throws Exception {

Configuration conf = new Configuration();
FileSystem hdfs = FileSystem.get(conf);
Path fpath = new Path("/user/root/20120722/word.txt");

FileStatus fileStatus = hdfs.getFileStatus(fpath);
BlockLocation[] blkLocations = hdfs.getFileBlockLocations(fileStatus, 0, fileStatus.getLen());

int blockLen = blkLocations.length;

for(int i = 0 ; i < blockLen ; ++i ){
String[] hosts = blkLocations[i].getHosts();
System.out.println("block_"+i + "_location:" + hosts[i]);
}
}

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

for( int i = 0 ; i < dataNodeStats.length ; ++i ){
System.out.println("DataNode_" + i + "_Node:" + dataNodeStats[i].getHostName());
}
}
}

1个回答

qq_30135665
qq_30135665   2016.08.22 23:33

你给的是一个本地文件,怎么能转成hdfs文件,你先把文件传到hdfs上去吧,然后给个hdfs文件的路径而不是本地文件的路径。

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐
hadoop运行eclipse简单实例
整个Hadoop是基于Java开发的,所以要开发Hadoop相应的程序就得用JAVA。在linux下开发JAVA还数eclipse方便。 1、下载 进入官网:http://eclipse.org/downloads/。 找到相应的版本进行下载,我这里用的是eclipse-SDK-3.7.1-linux-gtk版本。 2、解压 下载下来一般是tar.gz文件,运行:
shell脚本mac平台执行sed命令报错
shell脚本mac平台执行sed命令报错
第一个hadoop程序(java程序访问hadoop的hdfs文件系统中的文件)
1:hadoop2.7.3环境 2:阿里云服务器centos6.5,ip是:47.88.14.190 3:hadoop在伪分布式下运行的。 4:具体配置文件如下: 1)core-site.xml配置(ip地址最好不用localhost,不然不好测试)                         fs.defaultFS                 hdfs://47
java打包jar文件,在hadoop中运行
在eclipse中编写完hadoop程序后,运行无错,使用eclipse自带的打包工具打包jar文件,具体步骤如下: 1、右键要打包的包或者类,export->java中的可运行jar文件Runnable JarFile,然后一直下一步,注意为了不出错,把依赖的包也打包进去,所以后面选择Package required labiries into generated jars,选择你要保存jar
hadoop格式化失败
原因是hadoop.tmp.dir下的hadoop文件夹没有删除 我的配置在opt目录下 首先rm -rf /opt/hadoop 然后找一台服务器上的NN  格式化 hdfs namenode -format  并启动 hadoop-daemon.sh start namenode 最后在另外一台NN 执行   hdfs namenode -bootstrapStandby
CentOS下Hadoop搭建与wordcount实例运行
最近在学习弄hadoop,遇到很多麻烦,这里记录下来是方便以后回头查看。我用的VMware Workstation 10.0.4下安装的CentOS7 安装配置jdk java -version看是否安装java 用 env | grep JAVA_HOME 或者echo $JAVA_HOME $PATH 来检查环境变量配置的是否正确,如果没有可以到官网上下载。因为自带的jdk有点问题,我先
hadoop上运行Java程序
第一种:原生态运行jar包 1,利用eclipse编写Map-Reduce方法,一般引入Hadoop-core-1.1.2.jar。注意这里eclipse里没有安装hadoop的插件,只是引入其匝包,该eclipse可以安装在windows或者linux中,如果是在windows中安装的,且在其虚拟机安装的linux,可以通过共享文件夹来实现传递。 2,编写要测试的数据,如命名为tempdat
在eclipse下运行hadoop程序
环境:Ubuntu安装在虚拟机,hadoop安装在Ubuntu,eclipse安装在win7下,这样eclipse就不会太卡。   1、复制对应版本hadoop的eclipse插件jar包,比如我的hadoop是0.21.0版本,就使用hadoop-0.21.0-eclipse-plugin.jar,jar包放在eclipse安装目录/plugins/ 下,重启eclipse   2、添加
如何使编写的java程序在hadoop 2.2中运行的完整过程
如何使编写的java程序在hadoop 2.2中运行的完整过程 (在不使用eclipse情况) 在不使用eclipse情况使java程序在hadoop 2.2中运行的完整过程。整个过程中其实分为java程序的编译,生成jar包,运行测试。 这三个步骤运用的命令都比较简单,主要的还是如何找到hadoop 2.2提供给java程序用来编译的jar包。具体可以查看: HADOOP_HOME/
hadoop集群,如何运行Java jar包---如何运行mapreduce程序
http://www.aboutyun.com/thread-7408-1-1.html hadoop集群运行mapreduce有两种方式:1.一种是打包,在hadoop集群运行 2.一种是开发环境运行。 下面详细讲一下: 1.一种是打包,在hadoop集群运行 首先我们要打包程序,打包具体可以参考 (hadoop编程:解决eclipse能运行,打包放到集群上ClassNotFou