当前位置: 首页 > news >正文

大数据处理技术:分布式文件系统HDFS

目录

1 实验名称:

2 实验目的

3 实验内容

4 实验原理

5 实验过程或源代码

5.1 HDFS的基本操作

5.2 HDFS-JAVA接口之读取文件

5.3 HDFS-JAVA接口之上传文件

5.4 HDFS-JAVA接口之删除文件

6 实验结果

6.1 HDFS的基本操作

6.2 HDFS-JAVA接口之读取文件

6.3 HDFS-JAVA接口之上传文件

6.4 HDFS-JAVA接口之删除文件


1 实验名称:

       分布式文件系统HDFS

2 实验目的

       1.理解HDFS存在的优势,理解HDFS体系架构,学会在环境中部署HDFS学会HDFS基本命令。

       2.理解HDFS的读写操作原理,掌握HDFS的一些常用命令,理解实际操作HDFS读写时的流程。

3 实验内容

       (1)HDFS的基本操作

       (2)HDFS-JAVA接口之读取文件

       (3)HDFS-JAVA接口之上传文件

       (4)HDFS-JAVA接口之删除文件

4 实验原理

       HDFS(Hadoop Distributed File System)是一个分布式文件系统,是谷歌的GFS山寨版本。它具有高容错性并提供了高吞吐量的数据访问,非常适合大规模数据集上的应用,它提供了一个高度容错性和高吞吐量的海量数据存储解决方案。

      HDFS文件系统的角色分为三种(Master和Slave的结构,主从节点结构),分为NameNode、Secondary NameNode和DataNode三种角色。

       HDFS为分布式计算存储提供了底层支持,采用Java语言开发,可以部署在多种普通的廉价机器上,以集群处理数量积达到大型主机处理性能。HDFS 架构原理HDFS采用master/slave架构。一个HDFS集群包含一个单独的NameNode和多个DataNode。Namenode管理文件系统的元数据,而Datanode存储了实际的数据。

5 实验过程或源代码

5.1 HDFS的基本操作

       1.启动Hadoop,在HDFS中创建/usr/output/文件夹:

start-dfs.sh
hadoop fs -mkdir /usr
hadoop fs -mkdir /usr/output

       2.在本地创建hello.txt文件并添加内容:“HDFS的块比磁盘的块大,其目的是为了最小化寻址开销。”:vim hello.txt

       3.将hello.txt上传至HDFS的/usr/output/目录下:hadoop fs -put hello.txt /usr/output

       4.删除HDFS的/user/hadoop目录:hadoop fs -rm -r /user/hadoop

       5.将Hadoop上的文件hello.txt从HDFS复制到本地/usr/local目录:hadoop fs -copyToLocal /usr/output/hello.txt /usr/local

5.2 HDFS-JAVA接口之读取文件

       1.使用FSDataInputStream获取HDFS的/user/hadoop/目录下的task.txt的文件内容,并输出。代码实现如下:

URI uri = URI.create("hdfs://localhost:9000/user/hadoop/task.txt");Configuration config = new Configuration();FileSystem fs = FileSystem.get(uri,config);InputStream in = null;try{in = fs.open(new Path(uri));IOUtils.copyBytes(in, System.out,2048,false);}catch (Exception e){IOUtils.closeStream(in);}

5.3 HDFS-JAVA接口之上传文件

       1.在/develop/input/目录下创建hello.txt文件,并输入如下数据:迢迢牵牛星,皎皎河汉女。纤纤擢素手,札札弄机杼。终日不成章,泣涕零如雨。河汉清且浅,相去复几许?盈盈一水间,脉脉不得语。《迢迢牵牛星》。命令行:

mkdir /develop
mkdir /develop/input
cd /develop/input
vim hello.txt
start-dfs.sh

       2.使用FSDataOutputStream对象将文件上传至HDFS的/user/tmp/目录下,并打印进度。代码实现如下:

File localPath = new File("/develop/input/hello.txt");String hdfsPath = "hdfs://localhost:9000/user/tmp/hello.txt";InputStream in = new BufferedInputStream(new FileInputStream(localPath));Configuration config = new Configuration();FileSystem fs = FileSystem.get(URI.create(hdfsPath), config);long fileSize = localPath.length() > 65536 ? localPath.length() / 65536 : 1; FSDataOutputStream out = fs.create(new Path(hdfsPath), new Progressable() {long fileCount = 0;public void progress() {System.out.println("总进度" + (fileCount / fileSize) * 100 + "%");fileCount++;}});IOUtils.copyBytes(in, out, 2048, true);

5.4 HDFS-JAVA接口之删除文件

       1.启动hadoop:start-dfs.sh

       2.实现如下功能:删除HDFS的/user/hadoop/目录(空目录);删除HDFS的/tmp/test/目录(非空目录);列出HDFS根目录下所有的文件和文件夹;列出HDFS下/tmp/的所有文件和文件夹。代码实现如下:

String root = "hdfs://localhost:9000/";String path = "hdfs://localhost:9000/tmp";String del1 = "hdfs://localhost:9000/user/hadoop";String del2 = "hdfs://localhost:9000/tmp/test";Configuration config = new Configuration();FileSystem fs = FileSystem.get(URI.create(root),config);fs.delete(new Path(del1),true);fs.delete(new Path(del2),true);Path[] paths = {new Path(root),new Path(path)};FileStatus[] status = fs.listStatus(paths);Path[] listPaths = FileUtil.stat2Paths(status);for (Path path1 : listPaths){
System.out.println(path1);
}

6 实验结果

6.1 HDFS的基本操作

       1.文件输出结果

6.2 HDFS-JAVA接口之读取文件

       1.获取HDFS的/user/hadoop/目录下的task.txt的文件内容

6.3 HDFS-JAVA接口之上传文件

       1.文件上传并打印进度

6.4 HDFS-JAVA接口之删除文件

       1.删除文件输出结果

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • Vue2知识点
  • Docker部署镜像 发布容器 容器网络互联 前端打包
  • Spring Boot项目:多模块还是单模块?架构师的一次深思熟虑!
  • 重修设计模式-结构型-门面模式
  • MySQL 5.7.42升级到MySQL 8.4.2
  • uniapp child.onFieldChange is not a function
  • js 3个事件监听器 EventListeners
  • Android Studio 安装配置教程(Windows最详细版)
  • 镀金引线---
  • 【楚怡杯】职业院校技能大赛 “云计算应用” 赛项样题四
  • 港迪技术IPO上市实施募投项目,带动公司多维度能力综合提升
  • Java 之多线程高级
  • 安卓13系统导航方式分析以及安卓13修改默认方式为手势导航 android13修改导航方式
  • 828华为云征文|华为Flexus云服务器搭建Cloudreve私人网盘
  • Java中的红黑树(如果想知道Java中有关红黑树的知识点,那么只看这一篇就足够了!)
  • Iterator 和 for...of 循环
  • Java 23种设计模式 之单例模式 7种实现方式
  • Javascript Math对象和Date对象常用方法详解
  • Linux后台研发超实用命令总结
  • mongo索引构建
  • Python3爬取英雄联盟英雄皮肤大图
  • Redis学习笔记 - pipline(流水线、管道)
  • 初识 webpack
  • 复习Javascript专题(四):js中的深浅拷贝
  • 漫谈开发设计中的一些“原则”及“设计哲学”
  • 浅谈Golang中select的用法
  • 实习面试笔记
  • 使用Maven插件构建SpringBoot项目,生成Docker镜像push到DockerHub上
  • 探索 JS 中的模块化
  • 微信小程序设置上一页数据
  • 在 Chrome DevTools 中调试 JavaScript 入门
  • 好程序员大数据教程Hadoop全分布安装(非HA)
  • 回归生活:清理微信公众号
  • # Redis 入门到精通(八)-- 服务器配置-redis.conf配置与高级数据类型
  • # 执行时间 统计mysql_一文说尽 MySQL 优化原理
  • #### golang中【堆】的使用及底层 ####
  • #stm32驱动外设模块总结w5500模块
  • $.ajax()参数及用法
  • (1)Nginx简介和安装教程
  • (2)STM32单片机上位机
  • (六)激光线扫描-三维重建
  • (十)c52学习之旅-定时器实验
  • (学习日记)2024.01.19
  • (一)Java算法:二分查找
  • (转)Groupon前传:从10个月的失败作品修改,1个月找到成功
  • (轉貼) 資訊相關科系畢業的學生,未來會是什麼樣子?(Misc)
  • .bashrc在哪里,alias妙用
  • .mat 文件的加载与创建 矩阵变图像? ∈ Matlab 使用笔记
  • .net 反编译_.net反编译的相关问题
  • .NET/C# 使用反射注册事件
  • .one4-V-XXXXXXXX勒索病毒数据怎么处理|数据解密恢复
  • [ 渗透工具篇 ] 一篇文章让你掌握神奇的shuize -- 信息收集自动化工具
  • []指针
  • [2018/11/18] Java数据结构(2) 简单排序 冒泡排序 选择排序 插入排序
  • [23] GaussianAvatars: Photorealistic Head Avatars with Rigged 3D Gaussians