基于JAVA的HDFS文件操作

基于JAVA的HDFS的文件操作

一、实验内容

1、编程实现一个类“MyFSDataInputStream”,该类继承“org.apache.hadoop.fs.FSDataInputStream”,要求如下:实现按行读取HDFS中指定文件的方法“readLine()”,如果读到文件末尾,则返回空,否则返回文件一行的文本。

2、查看Java帮助手册或其它资料,用”java.net.URL”和“org.apache.hadoop.fs.FsURLStreamHandler
Factory”编程完成输出HDFS中指定文件的文本到终端中。

二、实验代码

1、

package Second;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FSDataInputStream;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;
public class MyFsDataInputStream extends FSDataInputStream{
	public MyFsDataInputStream(InputStream in) {
		super(in);
	}
	public static String readline(Configuration conf,String filename) throws IOException
	{
		Path filename1=new Path(filename);
		FileSystem fs=FileSystem.get(conf);
		FSDataInputStream in=fs.open(filename1);
		BufferedReader d=new BufferedReader(new InputStreamReader(in));
		String line=d.readLine();
		if (line!=null) {
			d.close();
			in.close();
			return line;
		}else
			return null;
	}
	public static void main(String[] args) throws IOException {
		Configuration conf=new Configuration();
		conf.set("fs.defaultFS", "hdfs://localhost:9000");
		conf.set("fs.hdfs.impl", "org.apache.hadoop.hdfs.DistributedFileSystem");
		FileSystem fs=FileSystem.get(conf);
		String filename="/user/hadoop/myLocalFile.txt";
		System.out.println("读取文件:"+filename);
		String o=MyFsDataInputStream.readline(conf, filename);
		System.out.println(o+"\n"+"读取完成");
	}
}

2、

package Second;
import java.io.IOException;
import java.io.InputStream;
import java.net.MalformedURLException;
import java.net.URL;
import org.apache.hadoop.fs.FsUrlStreamHandlerFactory;
import org.apache.hadoop.io.IOUtils;
public class FSUrl {
	static {
		URL.setURLStreamHandlerFactory(new FsUrlStreamHandlerFactory());
	}
	public static void cat(String filename) throws MalformedURLException, IOException
	{
		InputStream in=new URL("hdfs","localhost",9000,filename).openStream();
		IOUtils.copyBytes(in, System.out,4096,false);
		IOUtils.closeStream(in);
	}
	public static void main(String[] args) throws MalformedURLException, IOException {
		String filename="/user/hadoop/myLocalFile.txt";
		System.out.println("读取文件"+filename);
		FSUrl.cat(filename+"\n读取完成");
	}
}

三、运行结果

1、编程实现一个类“MyFSDataInputStream”,该类继承“org.apache.hadoop.fs.FSDataInputStream”,要求如下:实现按行读取HDFS中指定文件的方法“readLine()”,如果读到文件末尾,则返回空,否则返回文件一行的文本。

(1)、启动浏览器查看Namenode、Datanode节点信息以及文件信息(hadoop3.0以上访问的是9870,而3.0以下则是50070)
在这里插入图片描述注意需要先在终端中启动hadoop
在这里插入图片描述
(2)、从浏览器中查看文件的内容
在这里插入图片描述
(3)、运行eclipse代码结果
在这里插入图片描述

2、查看Java帮助手册或其它资料,用”java.net.URL”和“org.apache.hadoop.fs.FsURLStreamHandlerFactory”编程完成输出HDFS中指定文件的文本到终端中。

(1)、查看文件的内容
在这里插入图片描述
(2)、运行eclipse中代码的结果
在这里插入图片描述

  • 10
    点赞
  • 58
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值