头歌Educoder云计算与大数据——实验五 Java API分布式存储

实验五 Java API分布式存储

  • 第1关: 利用shell把电商数据上传到HDFS
    • 任务描述
    • 相关知识
      • HDFS shell常见命令
    • 编程要求
    • 测试说明
    • 代码实现
  • 第2关:利用Java API把电商数据上传到HDFS
    • 任务描述
    • 相关知识
      • 常用 HDFS Java接口的使用
    • 编程要求
    • 测试说明
    • 代码实现

第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 中。

  1. 使用start-all.shstart-dfs.sh启动 hadoop 或 hdfs;
  2. /data/workspace/···/dataset/user_behavior.csv文件拷贝到/root目录内(…里面的都是单文件夹,可以用tab建自动补全);
  3. 在HDFS中创建一个新文件夹 /dataset;
  4. user_behavior.csv文件上传到刚创建的文件夹中;
  5. 打印文件内容,以检测文件是否上传成功。(文件比较大,可使用 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行数据是否符合预期。

代码实现

//什么都不需要输,“点测评”,但前提是第一关没有出现任何错误!!!

你可能感兴趣的:(头歌,大数据,big,data,分布式,r语言)