头歌Educoder云计算与大数据——实验五 Java API分布式存储
Posted 36.6°
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了头歌Educoder云计算与大数据——实验五 Java API分布式存储相关的知识,希望对你有一定的参考价值。
实验五 Java API分布式存储
第1关: 利用shell把电商数据上传到HDFS
任务描述
原始电商数据都是存储在关系型数据库或 NoSQL 数据库上的,是面向OLTP(联机事务处理过程)的;数据都是面向业务的,而不是面向分析。因此数据比较复杂,表很多关联的数据是分散的,不利于统计分析;因此需要把数据从多个表里导出来、联合起来,找出分析所需要的数据项,然后把这些数据存入到 HDFS 中。
另一方面,因为数据量很大,可能上百 GB 甚至 TB,这些数据超过了单台服务器的内存容量甚至硬盘容量,而且如果都存到一台服务器上,那么读写起来花费时间也是很长的,如果把数据分摊到多个服务器上,那么原本的读写时间就能减倍,HDFS 就能做到这一点。
HDFS 是 Hadoop 中的分布式文件系统,可以高效的利用多台(数百、数千都可以)服务器的存储能力,因此把电商数据存储到 HDFS 中,可以借助强大的 Hadoop 来管理、分析海量的电商数据,以挖掘最大的潜在商业价值。
本关任务:使用 HDFS shell 命令把电商数据从本地上传到 HDFS 中。
相关知识
为了完成本关任务,你需要掌握:HDFS shell常见命令:
HDFS shell常见命令
如果你熟悉 linux 命令,你会发现 HDFS shell 命令类似 linux 的shell命令,在终端直接输入命令行来管理HDFS中的文件、文件夹。常用的HDFS命令如下:
hdfs dfs -ls / 查看目录/下的文件和文件夹;
hdfs dfs -mkdir /images 创建新文件夹/images;
hdfs dfs -rmdir /images 删除文件夹/images;
hdfs dfs -rm /citys.csv 删除文件citys.csv;
hdfs dfs -put data02.csv /dataset 上传本地文件data02.csv到HDFS的文件夹/dataset内;
hdfs dfs -copyFromLocal data02.csv /dataset 上传本地文件data02.csv到HDFS的文件夹/dataset内;
hdfs dfs -get /dataset/data02.csv data02_v2.csv 拷贝HDFS的/dataset/data02.csv到本地文件data02_v2.csv;
hdfs dfs -copyToLocal /dataset/data02.csv data02_v2.csv 拷贝HDFS的/dataset/data02.csv到本地文件data02_v2.csv;
hdfs dfs -cp /user/userinfo.txt /data/userinfo.txt 拷贝HDFS的数据文件/user/userinfo.txt到/data/userinfo.txt;
hdfs dfs -mv /user/userinfo.txt /data/userinfo.txt 移动HDFS的数据文件/user/userinfo.txt到/data/userinfo.txt;
hdfs dfs -text /itemsinfo.csv 以文本格式输出/itemsinfo.csv文件;
hdfs dfs -tail /itemsinfo.csv 以文本格式输出/itemsinfo.csv文件,但是只显示末尾1KB大小的数据。
编程要求
本关不需要编写 Java 代码,直接在命令行完成关卡。根据任务提示,启动 hadoop, 把数据文件上传到 HDFS 中。
- 使用
start-all.sh
或start-dfs.sh
启动 hadoop 或 hdfs; - 把
/data/workspace/···/dataset/user_behavior.csv
文件拷贝到/root
目录内(…里面的都是单文件夹,可以用tab建自动补全); - 在HDFS中创建一个新文件夹
/dataset;
- 把
user_behavior.csv
文件上传到刚创建的文件夹中; - 打印文件内容,以检测文件是否上传成功。(文件比较大,可使用
hdfs dfs -cat /yourpath | tail -10
只显示末尾10行数据,减少输出量)
测试说明
平台会查看你刚上传的文件路径是否正确,并核对文件最后 10 行数据是否一致,如果一致则通过。
代码实现
//一行一步
start-all.sh
cp /data/workspace/myshixun/dataset/user_behavior.csv /root/
hdfs dfs -mkdir /dataset
hdfs dfs -put user_behavior.csv /dataset
第2关:利用Java API把电商数据上传到HDFS
任务描述
目的与第一关一致,部分任务描述可参考第一关。有时候,我们并不想直接用 HDFS 命令来上传输入,比如当上传的文件很多、文件名很长的时候,一次又一次的打 HDFS 命令很慢也可能会出错,这时候可以使用 Java API 的方式,HDFS Java API 是 HDFS 提供的可供 Java 程序调用的接口,类似 JDBC。本关卡将通过 Java 编程的方式来向 HDFS 上传数据文件。
本关任务:使用 HDFS Java API 命令把电商数据user_behavior.csv从本地上传到 HDFS 中。
相关知识
为了完成本关任务,你需要掌握:常用 HDFS Java接口的使用。
常用 HDFS Java接口的使用
1、获得 HDFS 的 FileSystem 实例,该实例是操作 HDFS 的主要入口;
Configuration configuration = new Configuration();
fileSystem fs = FileSystem.get(configuration);
2、FileSystem对象的常用方法
- 用法举例,使用FileSystem对象的mkdir(Path filePath)方法创建一个新 HDFS 文件目录代码如下:
// 创建新目录 "/newPath"
Path newPath = new Path("/newPath");
fs.mkdir(newPath);
- 其他方法用法相似,常用方法介绍:
void mkdir(Path filePath) 创建一个新目录;
boolean exists(Path filePath) 判断文件是否存在;
FSDataInputStream open(Path filePath) 读取文件;
boolean rename(Path oldPath, Path newPath) 重命名文件;
boolean delete(Path filePath, boolean isRecursion) 删除一个目录或文件,第二个参数如果为 true 则递归删除一个目录所有内容;
void copyFromLocalFile(Path src, Path dst) 把本地路径的文件拷贝到HDFS指定路径中;
void copyToLocalFile(Path src, Path dst) 把 HDFS 上的文件拷贝到 本地路径中。
编程要求
根据提示,在右侧编辑器补充代码,把本地数据文件上传到 HDFS 中。
1、所使用的本地数据文件路径为/root/user_behavior.csv;
2、上传至 HDFS 的目录路径为 /dataset。
测试说明
平台会对你编写的代码进行测试:
- 核对数据文件是否成功上传至HDFS;
- 且数据文件末尾10行数据是否符合预期。
代码实现
//什么都不需要输,“点测评”,但前提是第一关没有出现任何错误!!!
以上是关于头歌Educoder云计算与大数据——实验五 Java API分布式存储的主要内容,如果未能解决你的问题,请参考以下文章
educoder头歌实训 太原理工大学web课程————JavaScript对象:Math日期