用 java遍历hadoop分布式文件系统中某个目录下的全部文件,我的hadoop是单节点的

Python014

用 java遍历hadoop分布式文件系统中某个目录下的全部文件,我的hadoop是单节点的,第1张

原因:

你访问的是本地文件系统而非hdfs , 因为Configuration默认的是在core-default.xml中的属性fs.default.name默认值是file:///,表示本地文件系统。在我们new Configuration()时会默认加载core-default.xml文件,所以根据这个文件的fs.default.name值使用了本地文件系统。

解决方法:

一般安装hadoop时都是修改core-site.xml文件,这个文件设置的属性值一般使用来覆盖core-default.xml这个文件的,在core-site.xml文件中会设置fs.default.name值为hadoop的namenode的地址以及端口号,如hdfs://localhost:9000,即表示namenode是本机,也就是为分布式。所以我们在连接hdfs时需要指定连接的地址,也就是hadoop集群中core-site.xml中fs.default.name属性值。所以解决方法有三种:

1)在代码Configuration conf=new Configuration()之后手动为Configuration对象设置fs.default.name属性值,如:conf.set("fs.default.name","hdfs:localhost:9000");

2)在代码的classpath下创建一个文件,在文件中设置fs.default.name属性值,再使用conf.addResource("文件路径")将该文件添加到Configuration中;

3)直接将集群的core-site.xml添加到classpath下即可,无需手动添加到Configuration,在new Configuration时会自动加载该文件

你把脚本换成其他可以直观查看运行结果的脚本,看看能不能运行;同时不在hadoop/bin目录下执行hadoopjar/usr/local/hadoop-1.2.1/hadoop-examples-1.2.1.jarwordcountinputoutput看看能不能执行