客户端下载HDFS文件

前文:Hadoop安装记录及测试

昨天的试验中,完成了Hadoop的部署及简单实验,今天通过在Eclipse中编写java下载HDFS中的文件,遇到了类似如下的问题:

java.lang.IllegalArgumentException: Wrong FS: hdfs://192.168.21.133:9000/user/centos/tmp/test.txt, expected: file:///

解决此问题的方法如下:


// 下载文件
	public static void getFileFromHDFS3() throws FileNotFoundException, IOException {
		String dst = "hdfs://192.168.21.133:9000/user/centos/tmp/test.txt";
		Configuration conf = new Configuration();
		FileSystem hdfs = FileSystem.get(URI.create(dst), conf);
		FSDataInputStream dis = hdfs.open(new Path(dst));
		OutputStream out = new FileOutputStream("e:/test-get3.txt");
		IOUtils.copyBytes(dis, out, 4096, false);
		dis.close();
	}
	
	// 下载文件,此方法需要依赖本地core-site.xml和hdfs-site.xml
	public static void getFileFromHDFS2() throws FileNotFoundException, IOException {
		Configuration conf = new Configuration();
		FileSystem hdfs = FileSystem.get(conf);
		Path srcPath = new Path("hdfs://192.168.21.133:9000/user/centos/tmp/test.txt");
		Path dstPath = new Path("e:/test-get2.txt");
		hdfs.copyToLocalFile(srcPath, dstPath);
	}
	
	// 下载文件
	private static void getFileFromHDFS1() throws FileNotFoundException, IOException {
		String dst = "hdfs://192.168.21.133:9000/user/centos/tmp/test.txt";
		Configuration conf = new Configuration();
		FileSystem hdfs = FileSystem.get(URI.create(dst), conf);
		FSDataInputStream hdfsInStream = hdfs.open(new Path(dst));

		OutputStream out = new FileOutputStream("e:/test-get1.txt");
		byte[] ioBuffer = new byte[1024];
		int readLen = hdfsInStream.read(ioBuffer);

		while (-1 != readLen) {
			out.write(ioBuffer, 0, readLen);
			readLen = hdfsInStream.read(ioBuffer);
		}
		out.close();
		hdfsInStream.close();
		hdfs.close();
	}

建议使用方法1或3


前文:Hadoop安装记录及测试

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值