实验三 分布式文件系统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的日志警告,可以忽略。

代码实现

  1. 代码文件

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 *********/}
}
  1. 命令行

start-all.sh

第3关:HDFS-JAVA接口之上传文件

任务描述

本关任务:使用HDFSAPI上传文件至集群。

相关知识

为了完成本关任务,你需要掌握:FSDataInputStream对象如何使用。

FSDataOutputStream对象

编程要求

在右侧代码编辑区和命令行中,编写代码与脚本实现如下功能:

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

使用FSDataOutputStream对象将文件上传至HDFS的/user/tmp/目录下,并打印进度。

测试说明

平台会运行你的java程序,并查看集群的文件将文件信息输出到控制台,第一行属于警告信息可以忽略。

预期输出:

代码实现

  1. 代码文件

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 *********/}
}
  1. 命令行

//一行一步
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.如何列出指定目录下的文件和文件夹。

列出文件

删除文件

编程要求

在右侧代码区填充代码,实现如下功能:

  1. 删除HDFS的/user/hadoop/目录(空目录);
  2. 删除HDFS的/tmp/test/目录(非空目录);
  3. 列出HDFS根目录下所有的文件和文件夹;
  4. 列出HDFS下/tmp/的所有文件和文件夹。

测试说明

HDFS的文件夹在你点击评测是会通过脚本自动创建,不需要你自己创建哦,依照题意编写代码点击评测即可。

预期输出:

代码实现

  1. 代码文件

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 *********/}
}
  1. 命令行

start-all.sh

头歌Educoder云计算与大数据——实验三 分布式文件系统HDFS相关推荐

  1. 头歌Educoder云计算与大数据——实验二 Hadoop单机部署

    头歌Educoder云计算与大数据--实验二 Hadoop单机部署 答案在下面的链接里 https://blog.csdn.net/qq_20185737/article/details/114677 ...

  2. Hadoop大数据原理(2) - 分布式文件系统HDFS

    文章目录 1. 数据存储问题 2. RAID技术的原理和思路 2.1 常用RAID的原理介绍 2.2 RAID间的性能比较 3. 大数据时代的分布式文件系统 3.1 HDFS的稳固地位 3.2 HDF ...

  3. JAVA大数据(二) Hadoop 分布式文件系统HDFS 架构,MapReduce介绍,Yarn资源调度

    文章目录 1.分布式文件系统HDFS 1.HDFS的来源 2.HDFS的架构图之基础架构 2.1 master/slave 架构 2.2 名字空间(NameSpace) 2.3 文件操作 2.4副本机 ...

  4. 【云计算与大数据技术】分布式数据库NoSQL中KV、列式、图、文档数据库的讲解(图文解释 超详细)

    一.NoSQL数据库概述 NoSQL泛指非关系型数据库,相对于传统关系型数据库,NoSQL有着更复杂的分类,包括KV数据库,文档数据库,列式数据库以及图数据库等等,这些类型的数据库能够更好的适应复杂类 ...

  5. FM算法 大数据实验三

    实验三 fm算法 1:以stream_for_fm.txt文件为自己所写程序的输入,读取文件中数据(数值范围是1-225): 2:请编写一个精确算法,来计算整个文件stream_for_fm.txt中 ...

  6. 云计算与大数据实验二 Hadoop的安装和集群的搭建

    一.实验目的 理解Hadoop集群架构和工作原理 掌握Hadoop安装环境和步骤 掌握Hadoop安装过程的配置,集群的搭建和启动 二.实验内容 Hadoop安装和JDK环境准备 集群的搭建和启动 三 ...

  7. 大数据学习(3)- 分布式文件系统HDFS

    文章目录 目录 1.分布式文件系统 1.1 计算机集群概念 1.2 分布式文件系统结构 2.HDFS简介 2.1 HDFS设计的目标 2.2HDFS的局限性 2.3 块的概念 2.4 HDFS主要组件 ...

  8. 大数据技术基础笔记3 分布式文件系统HDFS

    文章目录 3.1 分布式文件系统 3.2 HDFS简介 3.3 HDFS相关概念 3.4 HDFS体系结构 3.5 HDFS存储原理 3.6 HDFS数据读写过程 3.7 HDFS编程实践 3.1 分 ...

  9. 嘉明的云计算与大数据学习之大数据综合实验案例

    1.实验环境 (1)Linux:Ubuntu 16.04. 虚拟机镜像下载链接:https://pan.baidu.com/s/1i_B-2rAfPM53jf7Besi0tw 提取码:WZJM (2) ...

最新文章

  1. linux su和sudo命令的区别(转)
  2. access 增加字段 工具_Java效率工具之Lombok
  3. 全新Docker Hub发布:提供查找、存储和共享容器镜像单一体验
  4. SaltStack之数据系统
  5. 数学建模优化模型简单例题_数学建模案例分析--最优化方法建模7习题六
  6. 路由器不开机——维修更换MT7621AT CPU
  7. Heterogeneous Graph Attention Network翻译
  8. 如何只用电脑登录微信
  9. [工具]Microsoft To-Do,简约还是简陋?
  10. 让你了解CEO、COO、CFO、CTO是什么意思
  11. 突破传统—复旦大学大数据学院张力课题组提出语义分割全新方案
  12. xilinx-vipp驱动分析
  13. 筋斗云案例 - animate、transition都能实现
  14. 从零构建知识图谱-第二章知识图谱技术体系
  15. 冰与火之歌居然是在 DOS 系统上写出来的
  16. Android中修改ScrollBar默认样式
  17. Java 课程设计--数据库管理系统
  18. 笔记-JMH(Java Microbenchmark Harness)
  19. [转]如何查看图片的长和宽(尺寸)
  20. 游标+bulk collect into limit的不同方法查询数据

热门文章

  1. python课程 优达学城_优达学城深度学习之一——Anaconda
  2. jQuery基础-01
  3. nc提示java过期_用友U8 软件经常出现“超时已过期”的提示
  4. 2021年上海教育行业发展现状分析:各阶段教育在校学生人数均保持增长趋势[图]
  5. TestFlight 如何获取邀请码
  6. 学习笔记-Grover 算法
  7. Linux怎么查看CPU核数
  8. android 8.0自适应图标,微软发布Edge浏览器最新版:支持安卓8.0自适应图标
  9. 机器人建模中移动关节如何建立坐标系_PDPS机器人虚拟调试——PS篇 第十四课 机器人机构定义...
  10. 对于上次YOLO的一些遗留问题做一下解释