基于HDFS的电商数据存储

第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行数据,减少输出量)

代码实现

在命令行输入(一步一回车):

start-all.sh    //启动hadoop

cp /data/workspace/myshixun/dataset/user_behavior.csv /root/

hdfs dfs -mkdir /dataset

hdfs dfs -put user_behavior.csv /dataset

当然代码文件不能为空(可以随便敲点东西)

(ps:建议立马开始第二关,因为需要在第一关的基础上。)

第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

代码实现

在代码文件中输入:

package educoder;

import java.io.IOException;
import java.net.URISyntaxException;

import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;

public class PutFile {

    public static void main(String[] args) throws IOException, URISyntaxException {

        /********** Begin **********/
        // 使用本机默认hadoop配置
        Configuration config = new Configuration();
        // 获得默认HDFS文件系统
        FileSystem fs = FileSystem.get(config);
        // 数据文件linux路径
        String src = "/root/user_behavior.csv";
        // 要上传的HDFS路径
        Path newPath = new Path("/dataset");
        // 在hdfs创建新路径
        fs.mkdirs(newPath);
        // 使用copyFromLocalFile方法,把本地文件传入到hdfs路径中
        fs.copyFromLocalFile(new Path(src),newPath);
        /********** End **********/
    }

}

命令行需要启动Hadoop。

(ps:如果只需要快速通过,可以什么都不输入,但是得在第一关正确通过的前提下!)

  • 4
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值