头歌Educoder云计算与大数据——实验三 分布式文件系统HDFS
实验三 分布式文件系统HDFS
- 第1关:HDFS的基本操作
- 任务描述
- 相关知识
- HDFS的设计
- 分布式文件系统
- NameNode与DataNode
- HDFS的常用命令
- 编程要求
- 测试说明
- 代码实现
- 第2关:HDFS-JAVA接口之读取文件
- 任务描述
- 相关知识
- FileSystem对象
- FSDataInputStream对象
- 编程要求
- 测试说明
- 代码实现
- 代码文件
- 命令行
- 第3关:HDFS-JAVA接口之上传文件
- 任务描述
- 相关知识
- FSDataOutputStream对象
- 编程要求
- 测试说明
- 代码实现
- 代码文件
- 命令行
- 第4关:HDFS-JAVA接口之删除文件
- 任务描述
- 相关知识
- 列出文件
- 删除文件
- 编程要求
- 测试说明
- 代码实现
- 代码文件
- 命令行
第1关:HDFS的基本操作
任务描述
本关任务:使用Hadoop命令来操作分布式文件系统。
相关知识
为了完成本关任务你需要了解的知识有:1.HDFS的设计,2.HDFS常用命令。
HDFS的设计
点点点…题目省略,懒得写了,下同
分布式文件系统
NameNode与DataNode
HDFS的常用命令
编程要求
在右侧命令行中启动Hadoop,进行如下操作。
- 在HDFS中创建/usr/output/文件夹;
- 在本地创建hello.txt文件并添加内容:“HDFS的块比磁盘的块大,其目的是为了最小化寻址开销。”;
- 将hello.txt上传至HDFS的/usr/output/目录下;
- 删除HDFS的/user/hadoop目录;
- 将Hadoop上的文件hello.txt从HDFS复制到本地/usr/local目录。
测试说明
平台会查看你本地的文件和HDFS的文件是否存在,如果存在,则会将其内容输出到控制台。
预期输出:
HDFS的块比磁盘的块大,其目的是为了最小化寻址开销。
HDFS的块比磁盘的块大,其目的是为了最小化寻址开销。
代码实现
//一行一步
start-dfs.sh
hadoop fs -mkdir -p /usr/output
mkdir -p /develop/input
cd /develop/input
touch hello.txt
vim hello.txt
按i键输入以下内容HDFS的块比磁盘的块大,其目的是为了最小化寻址开销。hadoop fs -put hello.txt /usr/output/
hadoop fs -rmr /user/hadoop
cd
mkdir -p /usr/local
hadoop fs -copyToLocal /usr/output/hello.txt /usr/local
第2关:HDFS-JAVA接口之读取文件
任务描述
本关任务:使用HDFS的Java接口进行文件的读写,文件uri地址为hdfs://localhost:9000/user/hadoop/task.txt。
相关知识
FileSystem对象
FSDataInputStream对象
编程要求
在右侧代码编辑区中编写代码实现如下功能:
- 使用FSDataInputStream获取HDFS的/user/hadoop/目录下的task.txt的文件内容,并输出,其中uri为hdfs://localhost:9000/user/hadoop/task.txt。
测试说明
点击评测,平台会通过脚本创建/user/hadoop/task.txt文件并添加相应内容,无需你自己创建,开启hadoop,编写代码点击评测即可。因为Hadoop环境非常消耗资源,所以你如果一段时间不在线,后台会销毁你的镜像,之前的数据会丢失(你的代码不会丢失),这个时候需要你重新启动Hadoop。
预期输出:
WARN [main] - Unable to load native-hadoop library for your platform... using builtin-java classes where applicable
怕什么真理无穷,进一寸有一寸的欢喜。
第一行打印出来的是log4j的日志警告,可以忽略。
代码实现
代码文件
package step2;import java.io.IOException;
import java.io.InputStream;
import java.net.URI;import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.io.IOUtils;public class FileSystemCat {public static void main(String[] args) throws IOException {//请在Begin-End之间添加你的代码,完成任务要求。//请按照左侧的编程要求进行编写代码//文件地址为 "hdfs://localhost:9000/user/hadoop/task.txt"/********* Begin *********/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);}/********* End *********/}
}
命令行
start-all.sh
第3关:HDFS-JAVA接口之上传文件
任务描述
本关任务:使用HDFSAPI上传文件至集群。
相关知识
为了完成本关任务,你需要掌握:FSDataInputStream对象如何使用。
FSDataOutputStream对象
编程要求
在右侧代码编辑区和命令行中,编写代码与脚本实现如下功能:
在/develop/input/目录下创建hello.txt文件,并输入如下数据:
迢迢牵牛星,皎皎河汉女。
纤纤擢素手,札札弄机杼。
终日不成章,泣涕零如雨。
河汉清且浅,相去复几许?
盈盈一水间,脉脉不得语。
《迢迢牵牛星》
使用FSDataOutputStream对象将文件上传至HDFS的/user/tmp/目录下,并打印进度。
测试说明
平台会运行你的java程序,并查看集群的文件将文件信息输出到控制台,第一行属于警告信息可以忽略。
预期输出:
代码实现
代码文件
package step3;import java.io.BufferedInputStream;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
import java.net.URI;
import java.io.File;import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FSDataOutputStream;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.io.IOUtils;
import org.apache.hadoop.util.Progressable;public class FileSystemUpload {public static void main(String[] args) throws IOException {//请在 Begin-End 之间添加代码,完成任务要求。/********* Begin *********/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);/********* End *********/}
}
命令行
//一行一步
start-all.sh
hadoop fs -mkdir -p /user/tmp
mkdir -p /develop/input
cd /develop/input
touch hello.txt
vim hello.txt
i
迢迢牵牛星,皎皎河汉女。
纤纤擢素手,札札弄机杼。
终日不成章,泣涕零如雨。
河汉清且浅,相去复几许?
盈盈一水间,脉脉不得语。
《迢迢牵牛星》
Esc
shift+:
wqhadoop fs -put hello.txt /user/tmp/
第4关:HDFS-JAVA接口之删除文件
任务描述
本关任务:删除HDFS中的文件和文件夹。
相关知识
为了完成本关任务,你需要掌握:1.如何使用API来删除文件,2.如何列出指定目录下的文件和文件夹。
列出文件
删除文件
编程要求
在右侧代码区填充代码,实现如下功能:
- 删除HDFS的/user/hadoop/目录(空目录);
- 删除HDFS的/tmp/test/目录(非空目录);
- 列出HDFS根目录下所有的文件和文件夹;
- 列出HDFS下/tmp/的所有文件和文件夹。
测试说明
HDFS的文件夹在你点击评测是会通过脚本自动创建,不需要你自己创建哦,依照题意编写代码点击评测即可。
预期输出:
代码实现
代码文件
package step4;import java.io.IOException;
import java.net.URI;import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FileStatus;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.FileUtil;
import org.apache.hadoop.fs.Path;public class FileSystemDelete {public static void main(String[] args) throws IOException {//请在 Begin-End 之间添加代码,完成本关任务。/********* Begin *********/String uri = "hdfs://localhost:9000/";String path1 = "hdfs://localhost:9000/tmp";String path2 = "hdfs://localhost:9000/user/hadoop"; String path3 = "hdfs://localhost:9000/tmp/test"; String path4 = "hdfs://localhost:9000/usr"; Configuration config = new Configuration(); FileSystem fs = FileSystem.get(URI.create(uri),config); fs.delete(new Path(path2),true);fs.delete(new Path(path3),true);fs.delete(new Path(path4),true);Path[] paths = {new Path(uri),new Path(path1)}; FileStatus[] status = fs.listStatus(paths);Path[] listPaths = FileUtil.stat2Paths(status);for(Path path: listPaths){System.out.println(path);}/********* End *********/}
}
命令行
start-all.sh
头歌Educoder云计算与大数据——实验三 分布式文件系统HDFS相关推荐
- 头歌Educoder云计算与大数据——实验二 Hadoop单机部署
头歌Educoder云计算与大数据--实验二 Hadoop单机部署 答案在下面的链接里 https://blog.csdn.net/qq_20185737/article/details/114677 ...
- Hadoop大数据原理(2) - 分布式文件系统HDFS
文章目录 1. 数据存储问题 2. RAID技术的原理和思路 2.1 常用RAID的原理介绍 2.2 RAID间的性能比较 3. 大数据时代的分布式文件系统 3.1 HDFS的稳固地位 3.2 HDF ...
- JAVA大数据(二) Hadoop 分布式文件系统HDFS 架构,MapReduce介绍,Yarn资源调度
文章目录 1.分布式文件系统HDFS 1.HDFS的来源 2.HDFS的架构图之基础架构 2.1 master/slave 架构 2.2 名字空间(NameSpace) 2.3 文件操作 2.4副本机 ...
- 【云计算与大数据技术】分布式数据库NoSQL中KV、列式、图、文档数据库的讲解(图文解释 超详细)
一.NoSQL数据库概述 NoSQL泛指非关系型数据库,相对于传统关系型数据库,NoSQL有着更复杂的分类,包括KV数据库,文档数据库,列式数据库以及图数据库等等,这些类型的数据库能够更好的适应复杂类 ...
- FM算法 大数据实验三
实验三 fm算法 1:以stream_for_fm.txt文件为自己所写程序的输入,读取文件中数据(数值范围是1-225): 2:请编写一个精确算法,来计算整个文件stream_for_fm.txt中 ...
- 云计算与大数据实验二 Hadoop的安装和集群的搭建
一.实验目的 理解Hadoop集群架构和工作原理 掌握Hadoop安装环境和步骤 掌握Hadoop安装过程的配置,集群的搭建和启动 二.实验内容 Hadoop安装和JDK环境准备 集群的搭建和启动 三 ...
- 大数据学习(3)- 分布式文件系统HDFS
文章目录 目录 1.分布式文件系统 1.1 计算机集群概念 1.2 分布式文件系统结构 2.HDFS简介 2.1 HDFS设计的目标 2.2HDFS的局限性 2.3 块的概念 2.4 HDFS主要组件 ...
- 大数据技术基础笔记3 分布式文件系统HDFS
文章目录 3.1 分布式文件系统 3.2 HDFS简介 3.3 HDFS相关概念 3.4 HDFS体系结构 3.5 HDFS存储原理 3.6 HDFS数据读写过程 3.7 HDFS编程实践 3.1 分 ...
- 嘉明的云计算与大数据学习之大数据综合实验案例
1.实验环境 (1)Linux:Ubuntu 16.04. 虚拟机镜像下载链接:https://pan.baidu.com/s/1i_B-2rAfPM53jf7Besi0tw 提取码:WZJM (2) ...
最新文章
- linux su和sudo命令的区别(转)
- access 增加字段 工具_Java效率工具之Lombok
- 全新Docker Hub发布:提供查找、存储和共享容器镜像单一体验
- SaltStack之数据系统
- 数学建模优化模型简单例题_数学建模案例分析--最优化方法建模7习题六
- 路由器不开机——维修更换MT7621AT CPU
- Heterogeneous Graph Attention Network翻译
- 如何只用电脑登录微信
- [工具]Microsoft To-Do,简约还是简陋?
- 让你了解CEO、COO、CFO、CTO是什么意思
- 突破传统—复旦大学大数据学院张力课题组提出语义分割全新方案
- xilinx-vipp驱动分析
- 筋斗云案例 - animate、transition都能实现
- 从零构建知识图谱-第二章知识图谱技术体系
- 冰与火之歌居然是在 DOS 系统上写出来的
- Android中修改ScrollBar默认样式
- Java 课程设计--数据库管理系统
- 笔记-JMH(Java Microbenchmark Harness)
- [转]如何查看图片的长和宽(尺寸)
- 游标+bulk collect into limit的不同方法查询数据
热门文章
- python课程 优达学城_优达学城深度学习之一——Anaconda
- jQuery基础-01
- nc提示java过期_用友U8 软件经常出现“超时已过期”的提示
- 2021年上海教育行业发展现状分析:各阶段教育在校学生人数均保持增长趋势[图]
- TestFlight 如何获取邀请码
- 学习笔记-Grover 算法
- Linux怎么查看CPU核数
- android 8.0自适应图标,微软发布Edge浏览器最新版:支持安卓8.0自适应图标
- 机器人建模中移动关节如何建立坐标系_PDPS机器人虚拟调试——PS篇 第十四课 机器人机构定义...
- 对于上次YOLO的一些遗留问题做一下解释