Hadoop 学习笔记(七)HDFS 客户端操作(下)
上面我们学的API操作HDFS系统都是框架封装好的。那么如果我们想自己实现上述API的操作该怎么实现呢?我们可以采用IO流的方式实现数据的上传和下载。
1、上传本地文件到 HDFS ;
public static Configuration conf = new Configuration(); // 1、 本地文件上传 HDFS 系统 @Test public void putIOTest() throws IOException, InterruptedException, URISyntaxException { // 1、获取 HDFS 客户端对象 FileSystem fs = FileSystem.get(new URI("hdfs://hadoop103:9000"), conf, "hui"); // 2、获取 I/O 流 FileInputStream fis = new FileInputStream(new File("E:/workspaced/data/zhouzhiruo.txt")); // 3、获取输出流 FSDataOutputStream fos = fs.create(new Path("/yttlj/gmd/wyx.txt")); // 4、流的对拷 IOUtils.copyBytes(fis, fos, conf); // 5、关闭资源 IOUtils.closeStream(fos); IOUtils.closeStream(fis); fs.close(); System.out.println(" ok "); }
2、从 HDFS 文件系统获取数据到本地
@Test public void getIOTest() throws IOException, InterruptedException, URISyntaxException { // 1、获取 HDFS 客户端对象 FileSystem fs = FileSystem.get(new URI("hdfs://hadoop103:9000"), conf, "hui"); // 2、获取 I/O 流 FSDataInputStream fis = fs.open(new Path("/yttlj/gmd/wyx.txt")); // 3、获取输出流 FileOutputStream fos = new FileOutputStream(new File("E:/workspaced/data/wyx_fw.txt")); // 4、流的对拷 IOUtils.copyBytes(fis, fos, conf); // 5、关闭资源 IOUtils.closeStream(fos); IOUtils.closeStream(fis); fs.close(); System.out.println(" ok "); }
3、从 HDFS 文件系统定位读取数据(只读取 128 M)
@Test public void getIO1blockTest() throws IOException, InterruptedException, URISyntaxException { // 1、获取 HDFS 客户端对象 FileSystem fs = FileSystem.get(new URI("hdfs://hadoop103:9000"), conf, "hui"); // 2、获取 I/O 流 FSDataInputStream fis = fs.open(new Path("/hadoop-2.7.2.tar.gz")); // 3、获取输出流 FileOutputStream fos = new FileOutputStream(new File("E:/workspaced/data/hadoop-2.7.2.tar.gz.part1")); // 4、使用最传统方式读取 128 M 数据 byte[] buf = new byte[1014]; for (int i = 0; i < 1024 * 128; i++) { fis.read(buf); fos.write(buf); } // 5、关闭资源 IOUtils.closeStream(fos); IOUtils.closeStream(fis); fs.close(); System.out.println(" ok "); }
4、从 HDFS 文件系统定位读取数据(从128 M 开始读取)
@Test public void getIO2blockTest() throws IOException, InterruptedException, URISyntaxException { // 1、获取 HDFS 客户端对象 FileSystem fs = FileSystem.get(new URI("hdfs://hadoop103:9000"), conf, "hui"); // 2、获取 I/O 流 FSDataInputStream fis = fs.open(new Path("/hadoop-2.7.2.tar.gz")); // ***** 设置指定读取起点 ****** fis.seek(1024 * 1024 * 128); // 3、获取输出流 FileOutputStream fos = new FileOutputStream(new File("E:/workspaced/data/hadoop-2.7.2.tar.gz.part2")); // 4、流数据 copy IOUtils.copyBytes(fis, fos, conf); // 5、关闭资源 IOUtils.closeStream(fos); IOUtils.closeStream(fis); fs.close(); System.out.println(" ok "); }
分类:
Hadoop
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· 一文读懂知识蒸馏
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下