头歌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) ...
最新文章
- [转载].NET中高效能的socket编程
- 利用MySQL Cluster 7.0 + LVS 搭建高可用环境
- pcDuino 软件更新
- linux profile of env
- 产品经理应该如何设计面包屑原理
- sql server 2008安装错误(无法处理异常)
- 电商订单ElasticSearch同步解决方案--使用logstash
- java servlet init方法_Java HttpServlet.init方法代码示例
- 墨条不如墨汁黑是怎么回事?
- 渗透测试岗位面试题(渗透思路)
- Go 语言论坛系统 bbs-go
- Expected value at 1:0 异常解决方法
- ROS机器人操作系统资料与资讯(2018年6月)
- php 字符串大写转小写转大写,字符串大小写批量互相转换 - 在线工具
- 66天全部就业,最高薪资25000元!黑马Java学科真牛
- 设计模式总览及工厂模式详解
- FedEx v20.0.7654的CData驱动程序
- 正试图在 os 加载程序锁内执行托管代码。不要尝试在 DllMain 或映像初始化函数内运行托管代码,这样做会导致应用程序挂起。...
- 数据预处理概述和数据清洗
- js内置对象中的String
热门文章
- 【错误】Debug:Method breakpoints may dramatically slow down debugging
- JQuery事件----冒泡机制的思考
- 语音识别:理论与实践
- Ubuntu启动项修改
- 5.1 类、超类和子类
- Druid连接池源代码分析之四-java.lang.sql 规范
- 零基础小白要如何自学Python?
- Segger Embedded Studio 软件下载和工程配置
- 一加手机怎么root权限_一加手机X获取root权限最简单的方法!
- 在线编辑office服务器搭建,Office Online Server2016搭建与部署(在线编辑)