大数据培训技术Hadoop之HDFS的I/O流操作

发布时间:2019年09月24日作者:atguigu浏览次数:925

上面我们学的大数据培训课程的API操作HDFS系统都是框架封装好的。那么如果我们想自己在大数据培训过程中实现上述API的操作该怎么实现呢?

我们可以采用IO流的方式实现数据的上传和下载。

1 HDFS文件上传

1.需求:把本地e盘上的banhua.txt文件上传到HDFS根目录

2.编写代码

@Test

public void putFileToHDFS() throws IOException, InterruptedException, URISyntaxException {

 

   // 1 获取文件系统

   Configuration configuration = new Configuration();

   FileSystem fs = FileSystem.get(new URI(“hdfs://hadoop102:9000”), configuration, “atguigu”);

 

   // 2 创建输入流

   FileInputStream fis = new FileInputStream(new File(“e:/banhua.txt”));

 

   // 3 获取输出流

   FSDataOutputStream fos = fs.create(new Path(“/banhua.txt”));

 

   // 4 流对拷

   IOUtils.copyBytes(fis, fos, configuration);

 

   // 5 关闭资源

   IOUtils.closeStream(fos);

   IOUtils.closeStream(fis);

    fs.close();

}

2 HDFS文件下载

1.需求:从HDFS上下载banhua.txt文件到本地e盘上

2.编写代码

// 文件下载

@Test

public void getFileFromHDFS() throws IOException, InterruptedException, URISyntaxException{

 

   // 1 获取文件系统

   Configuration configuration = new Configuration();

   FileSystem fs = FileSystem.get(new URI(“hdfs://hadoop102:9000”), configuration, “atguigu”);

 

   // 2 获取输入流

   FSDataInputStream fis = fs.open(new Path(“/banhua.txt”));

 

   // 3 获取输出流

   FileOutputStream fos = new FileOutputStream(new File(“e:/banhua.txt”));

 

   // 4 流的对拷

   IOUtils.copyBytes(fis, fos, configuration);

 

   // 5 关闭资源

   IOUtils.closeStream(fos);

   IOUtils.closeStream(fis);

   fs.close();

}

3 定位文件读取

1.需求:分块读取HDFS上的大文件,比如根目录下的/hadoop-2.7.2.tar.gz

2.编写代码

(1)下载第一块

@Test

public void readFileSeek1() throws IOException, InterruptedException, URISyntaxException{

 

   // 1 获取文件系统

   Configuration configuration = new Configuration();

   FileSystem fs = FileSystem.get(new URI(“hdfs://hadoop102:9000”), configuration, “atguigu”);

 

   // 2 获取输入流

   FSDataInputStream fis = fs.open(new Path(“/hadoop-2.7.2.tar.gz”));

 

   // 3 创建输出流

   FileOutputStream fos = new FileOutputStream(new File(“e:/hadoop-2.7.2.tar.gz.part1”));

 

   // 4 流的拷贝

   byte[] buf = new byte[1024];

 

   for(int i =0 ; i < 1024 * 128; i++){

      fis.read(buf);

      fos.write(buf);

   }

 

   // 5关闭资源

   IOUtils.closeStream(fis);

   IOUtils.closeStream(fos);

fs.close();

}

(2)下载第二块

@Test

public void readFileSeek2() throws IOException, InterruptedException, URISyntaxException{

 

   // 1 获取文件系统

   Configuration configuration = new Configuration();

   FileSystem fs = FileSystem.get(new URI(“hdfs://hadoop102:9000”), configuration, “atguigu”);

 

   // 2 打开输入流

   FSDataInputStream fis = fs.open(new Path(“/hadoop-2.7.2.tar.gz”));

 

   // 3 定位输入数据位置

   fis.seek(1024*1024*128);

 

   // 4 创建输出流

   FileOutputStream fos = new FileOutputStream(new File(“e:/hadoop-2.7.2.tar.gz.part2”));

 

   // 5 流的对拷

   IOUtils.copyBytes(fis, fos, configuration);

 

   // 6 关闭资源

   IOUtils.closeStream(fis);

   IOUtils.closeStream(fos);

}

(3)合并文件

在Window命令窗口中进入到目录E:\,然后执行如下命令,对数据进行合并

type hadoop-2.7.2.tar.gz.part2 >> hadoop-2.7.2.tar.gz.part1

合并完成后,将hadoop-2.7.2.tar.gz.part1重新命名为hadoop-2.7.2.tar.gz。解压发现该tar包非常完整。

想要了解跟多关于大数据培训课程内容欢迎关注尚硅谷大数据培训,尚硅谷除了这些技术文章外还有免费的高质量大数据培训课程视频供广大学员下载学习


上一篇:
下一篇:
相关课程

java培训 大数据培训 前端培训 UI/UE设计培训

关于尚硅谷
教育理念
名师团队
学员心声
资源下载
视频下载
资料下载
工具下载
加入我们
招聘岗位
岗位介绍
招贤纳师
联系我们
全国统一咨询电话:010-56253825
地址:北京市昌平区宏福科技园2号楼3层(北京校区)

深圳市宝安区西部硅谷大厦B座C区一层(深圳校区)

上海市松江区谷阳北路166号大江商厦6层(上海校区)

武汉市东湖高新开发区东湖网谷(武汉校区)