在Hadoop2.5.0下利用Java读写HDFS

此文假设您已经安装好了Hadoop2.5.0,下面开始着手编写程序,所需依赖jar包:
hadoop-common-2.5.0.jar

把此jar包加到你项目里面即可。

首先我在HDFS上利用MRV2程序已经生成了一个文件【input】(你们可以自动手动随便上传一个文件也是可以的),目录如下图:

在Hadoop2.5.0下利用Java读写HDFS_第1张图片

文件内容如下:


A00WindFarm1,33
A01WindFarm2,66
A02WindFarm3,99
A03WindFarm4,132
A04WindFarm5,165
A05WindFarm6,66
A06WindFarm7,33
A07WindFarm8,99
A08WindFarm9,33
A09WindFarm10,66
A10WindFarm11,132
A11WindFarm12,66
A12WindFarm13,33
A13WindFarm14,99
A14WindFarm15,33
A15WindFarm16,33
A16WindFarm17,33
A17WindFarm18,165
A18WindFarm19,33
A19WindFarm20,66
A20WindFarm21,99
A21WindFarm22,66
A22WindFarm23,33
A23WindFarm24,66



然后,利用API进行读写就可以了,不过要注意一点,在这个版本下的readUTF()这个方法有点问题,可能会抛出EOF异常,所以最好还是使用readLine方法进行读写:



package com.my.hadoop.test.main;

import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FSDataInputStream;
import org.apache.hadoop.fs.FSDataOutputStream;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;

public class TestHDFS {

	public static void main(String[] args) throws Exception {
		
		Configuration conf = new Configuration();
		FileSystem fs = FileSystem.get(conf);
		System.out.println(fs.getUri());
		Path file = new Path("/user/a01513/input");
		if(fs.exists(file)){
			FSDataInputStream in = fs.open(file);
//                     String data = in.readUTF();//注意这里可能会抛出EOF异常!!
			StringBuilder data = new StringBuilder();
			String buf = "";
			while((buf = in.readLine())!= null){
				data.append(buf);
				data.append("\n");
			}
			FSDataOutputStream out = fs.create(new Path("/user/a01513/2.txt"));
			out.writeUTF(new String(data));
			in.close();
			out.close();
			fs.close();
		}else{
			FSDataOutputStream out = fs.create(new Path("/user/a01513/1.txt"));
			out.writeUTF("hello,world!");
			out.close();
			fs.close();
		}
	}

}



编写完成后,利用FatJar导出成jar包,放到Master节点中执行:



a01513@master:/usr/mywind/java$ hadoop jar TestHDFS.jar




执行成功后可以看到如下结果:

在Hadoop2.5.0下利用Java读写HDFS_第2张图片

到此,操作完成~!

你可能感兴趣的:(java,hadoop,api,hdfs)