基于HDFS实现的简易云盘系统(代码开源)

这篇具有很好参考价值的文章主要介绍了基于HDFS实现的简易云盘系统(代码开源)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。


前言

基于HDFS的云盘系统实现了云盘的基本数据存储和访问功能。此为大二下大数据平台与架构的综合实验内容,本文旨在记录过程和问题,固然存在很多不合理的地方。


一、实验简介

云盘系统通过互联网为企业和个人提供信息的存储、读取、下载等服务。具有安全稳定、海量等特点。目前,云盘系统逐步走向成熟,特别是公有云盘能够向用户提供免费存储,,离线下载,文件智能分类等功能。随着互联网的不断普及,用户存储在云盘上的数据量越来越大,数据类型页越来越多样化,不仅有传统的文本文件,二进制文件,还有视频,音频,图像,图片等。这些数据不仅类型繁多,而且数据量普遍庞大。例如,一个视频文件可能高达几个G甚至几十个G。因此充分利用大数据平台的优势,可以为云盘提供一套适合上述特点的底层环境。(一堆没啥用的特色废话)


二、分析与设计

1. 功能需求分析:

用户管理

  • 实现用户的注册,登录,退出。
  • 注册成功时需要将用户信息写入数据库(呃,能存、能用即可),并在HDFS中建立用户的专属目录。

文件管理

  • 提供文件上传,下载,浏览,删除等功能。
  • 提供目录的管理,可以创建目录,复制或移动文件或目录到指定目录下面;可以删除目录。删除目录时需要给出提示。
  • 提供文件搜索功能。(没做qaq)

2. 系统设计

本系统基于B/S架构,采用HDFS 和 hadoop 分布式系统基础框架对数据和文件信息进行存储,实现处理数据量非常大的数据和数据性能的线性扩展,同时HDFS底层保存三份数据副本,实现文件系统的高可靠。

此外,系统借助IDEA开发工具,使用 Big Data Tools 插件与虚拟机的hadoop 进行交互,提高开发速度和开发效率。


三、效果展示

1. 登录界面(注册页面类似)
简存取云盘系统用户导入和增加模块,学习总结,Hadoop,hdfs,hadoop,大数据,java

2. 主界面
简存取云盘系统用户导入和增加模块,学习总结,Hadoop,hdfs,hadoop,大数据,java


四、环境配置

Hadoop 的基础环境配置如:xxxx。此为项目启动时的所需的配置。

1. 在Windows环境下,借助IDEA中的Big Data Tools 插件连接Ubuntu的HDFS
首先,我们需要让虚拟机与Windows的IP地址在终端能够互相ping通。这里存在一个不知道原因的必要步骤。

  • 当Windows通过WIFI连入互联网时,虚拟机(Ubuntu)的网络连接设置应采用如下的方式:
    简存取云盘系统用户导入和增加模块,学习总结,Hadoop,hdfs,hadoop,大数据,java
  • 当Windows通过网线(以太网)连入互联网时,虚拟机(Ubuntu)的网络连接设置应采用如下的方式:
    简存取云盘系统用户导入和增加模块,学习总结,Hadoop,hdfs,hadoop,大数据,java
    对了,记得关闭虚拟机与Windows 的防火墙,否则也无法相互ping 通.
    简存取云盘系统用户导入和增加模块,学习总结,Hadoop,hdfs,hadoop,大数据,java
    Windows ping 虚拟机:(成功)
    简存取云盘系统用户导入和增加模块,学习总结,Hadoop,hdfs,hadoop,大数据,java
    虚拟机 ping Windows:(成功)
    简存取云盘系统用户导入和增加模块,学习总结,Hadoop,hdfs,hadoop,大数据,java

2. 修改虚拟机的主机信息(Hadoop的启动地址)
vim /etc/hosts
将此处修改为当前虚拟机的IP地址.(可能每次虚拟机启动,IP地址都会发生变化,此处建议每次启动项目时,进行查看和必要的修改)
简存取云盘系统用户导入和增加模块,学习总结,Hadoop,hdfs,hadoop,大数据,java

3. 使用 Big Data Tools 连接HDFS
简存取云盘系统用户导入和增加模块,学习总结,Hadoop,hdfs,hadoop,大数据,java
连接成功后,即可查看HDFS的存储结构了.(完成此步骤后,后面在开发代码阶段就不用担心连接问题啦)
简存取云盘系统用户导入和增加模块,学习总结,Hadoop,hdfs,hadoop,大数据,java
4. 在Ubuntu 中启动Hadoop
bash cd /usr/local/hadoop ./sbin/start-all.sh
通过jps 查看是否启动成功:
简存取云盘系统用户导入和增加模块,学习总结,Hadoop,hdfs,hadoop,大数据,java
5. 在浏览器中,打开HDFS的页面
简存取云盘系统用户导入和增加模块,学习总结,Hadoop,hdfs,hadoop,大数据,java
通过访问 Ubuntu的IP地址 : 9870,跳转到此页面,说明所有都配置好了,接下来就可以开始实现功能了.
简存取云盘系统用户导入和增加模块,学习总结,Hadoop,hdfs,hadoop,大数据,java


五、功能实现

(再次声明,本实验由本人独自完成,所以只顾着实现大致的功能,要求能跑即可.因此,肯定会存在很多的问题. qaq)
本系统实现的大部分功能,主要借助于hadoop 提供的 FileSystem类.

1. 基础部分

a. 在配置文件中配置远程连接Hadoop 的地址:
简存取云盘系统用户导入和增加模块,学习总结,Hadoop,hdfs,hadoop,大数据,java
简存取云盘系统用户导入和增加模块,学习总结,Hadoop,hdfs,hadoop,大数据,java

b. 初始化FileSystem 相关信息:
本系统采用文件记录实现用户管理,即在注册用户时,在文件中追加一条记录,但HDFS 设计之初不支持给文件追加内容,所以需要手动开启文件追加功能。

简存取云盘系统用户导入和增加模块,学习总结,Hadoop,hdfs,hadoop,大数据,java

2. 用户管理

将用户的信息存放在 userinfo.dat文件中,文件中存储着用户名以及登录密码的信息.在用户登陆时,根据该文件的信息实现简单的校验;在用户注册信息时,将信息追加到该文件末尾.

a. 用户登录:

	// 用户登录检查(OK)
    public boolean loginCheck(String userName,String password) throws IOException {
        FileSystem fs = getFileSystem();
        Path srcPath = new Path("/userinfo.dat");
        FSDataInputStream in = fs.open(srcPath);
        BufferedReader reader = new BufferedReader(new InputStreamReader(in));

        String line = "";
        while((line = reader.readLine()) != null){
            String[] userinfo = line.split(",");
            if(userinfo[0].equals(userName) && userinfo[1].equals(password)){
                // 用户名密码正确
                fs.close();
                return true;
            }
        }
        // 未找到
        fs.close();
        return false;
    }

b. 用户注册:

// 用户注册
    @RequestMapping("/register")
    public void register(HttpServletRequest request,HttpServletResponse response) throws IOException {
        System.out.println("register is running.....");
        String userName = request.getParameter("username");
        String password = request.getParameter("password");
        String password_confirm = request.getParameter("confirmPassword");

        PrintWriter pw = response.getWriter();

        response.setCharacterEncoding("utf-8");
        response.setContentType("text/json; charset=UTF-8");

        JSONObject json = new JSONObject();

        if(!password.equals(password_confirm)){
            json.put("status","notsame");
            pw.write(JSON.toJSONString(json));
            return;
        }

        // 检验用户名是否存在
        if(fileSystemDao.userExistCheck(userName)){
            json.put("status","userexist");
            pw.write(JSON.toJSONString(json));
            return;
        }

        // 添加用户信息到userinfo.dat 文件中
        fileSystemDao.insertUserInfoToFile(userName,password);

        json.put("status","ok");
        pw.write(JSON.toJSONString(json));
    }

c. 删除用户:

    // 删除用户
    @RequestMapping("/deleteUser")
    public String deleteUser(HttpServletRequest request,HttpServletResponse response,HttpSession session,Model model) throws IOException {
        String userName = session.getAttribute("path").toString().split("/")[1];
        if(!fileSystemDao.userExistCheck(userName)){
            System.out.println("未找到相关用户信息!");
            return "deleteUser";
        }
        else {
            fileSystemDao.deleteUserInfoFromFile(userName);
            fileSystemDao.delete("/" + userName);
            return "index";
        }
    }

3. 文件管理

文件管理的代码太多了,懒得cv (bushi).
总结一下,文件管理大致包含以下部分:

  1. 获取指定目录下的所有文件信息
  2. 创建目录
  3. 删除文件或目录
  4. 移动文件(剪切 + 粘贴)
  5. 复制文件到指定位置(复制 + 粘贴)
  6. 更改文件名称
  7. 文件上传与下载
    简存取云盘系统用户导入和增加模块,学习总结,Hadoop,hdfs,hadoop,大数据,java
    简存取云盘系统用户导入和增加模块,学习总结,Hadoop,hdfs,hadoop,大数据,java
    简存取云盘系统用户导入和增加模块,学习总结,Hadoop,hdfs,hadoop,大数据,java

六、项目资源

本项目托管在Gitee上,欢迎各位大佬随意发挥.
基于HDFS实现的简易云盘系统

关于Ubuntu和Hadoop 的环境搭建存在的问题,或者直接需要当前已经配置好的虚拟机,完全可以私信笔者.

此外,本项目的代码很多借鉴于csdn其他优秀作者分享的内容.若有侵权,请及时联系笔者!


七、其他

1. hadoop的core-site.xml 配置文件

<configuration>
    <configuration>
        <property>
            <name>hadoop.tmp.dir</name>
            <value>file:/usr/local/hadoop/tmp</value>
            <description>Abase for other temporary directories.</description>
        </property>
        <property>
            <name>fs.defaultFS</name>
            <value>hdfs://localhost:9000</value>
        </property>
    </configuration>
</configuration>

2. hadoop的hdfs-site.xml 配置文件

<configuration>
    <configuration>
        <property>
            <name>dfs.replication</name>
            <value>1</value>
        </property>
        <property>
            <name>dfs.namenode.name.dir</name>
            <value>file:/usr/local/hadoop/tmp/dfs/name</value>
        </property>
        <property>
            <name>dfs.datanode.data.dir</name>
            <value>file:/usr/local/hadoop/tmp/dfs/data</value>
        </property>
        <property>
            <name>dfs.permissions</name>
            <value>false</value>
        </property>
    </configuration>
</configuration>

3. 创建目录时出现Permission denied: user=xxx, access=WRITE, inode=“/“:root:supergroup:drwxr-xr-x 的问题
出现此问题是因为用户对所操作的文件没有写的权限,创建目录需要拥有写权限,在测试的时候可以将所有文件的所有权限都开放,就不会出现这种错误。

解决方法: 修改hdfs-site.xml,追加dfs.permissions配置。如果是true,则打开权限检查系统;如果是false,权限检查就是关闭的。文章来源地址https://www.toymoban.com/news/detail-762100.html

<property>
   <name>dfs.permissions</name>
   <value>false</value>
</property>

八、参考文件

  1. HDFS文件内容追加(Append). 王树民. Hadoop专栏. 2018-09-12.
  2. 基于Hadoop的数据云盘的实现. Youth-shouting. 2018-11-28.
  3. hadoop 文件 复制 移动 FileUtil.copy. weixin_30552811. 2015-08-11.

到了这里,关于基于HDFS实现的简易云盘系统(代码开源)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【FPGA教程案例40】通信案例10——基于FPGA的简易OFDM系统verilog实现

    FPGA教程目录 MATLAB教程目录 --------------------------------------------------------------------------------------- 目录 1.软件版本 2.OFDM原理 3.OFDM系统的verilog实现

    2024年02月12日
    浏览(55)
  • 基于STM32的开源简易示波器项目

    目录 ​一、前言 二、硬件接线 三、信号的采集 四、代码配置 五、数据的处理 六、模拟正弦波输出 七、模拟噪声或三角波输出 八、显示函数与按键控制 该项目是基于正点原子精英板制作的一个简易示波器,可以读取信号的频率和幅值,并可以通过按键改变采样频率和控制

    2024年02月04日
    浏览(41)
  • 基于树莓派4B与STM32的智能门禁系统项目(代码开源)

    前言: 本文为手把手教学 嵌入式经典项目 —— 智能门禁项目 ,本次项目采用  树莓派4B  与  STM32F103C8T6  进行联合开发。项目充分发挥各自 CPU 的优势与长处,将人脸识别的大计算量任务给 树莓派4B ,将门禁系统的控制部分交给 STM32 进行处理。该项目算是嵌入式人工智能

    2024年02月16日
    浏览(44)
  • 【Spring Cloud】新闻头条微服务项目:分布式文件系统MinIO实现文章页面存取

      个人简介:  📦个人主页:赵四司机 🏆学习方向:JAVA后端开发  📣种一棵树最好的时间是十年前,其次是现在! ⏰往期文章:SpringBoot项目整合微信支付 🧡喜欢的话麻烦点点关注喔,你们的支持是我的最大动力。 前言: 最近在做一个基于SpringCloud+Springboot+Docker的新闻头

    2023年04月08日
    浏览(55)
  • Cloudreve搭建云盘系统,并实现随时访问

    1、前言 自云存储概念兴起已经有段时间了,各互联网大厂也纷纷加入战局,一时间公有云盘遍地开花。但一段时间后,公有云盘潜在的安全问题也暴露出来,原有的共有云盘用户纷纷转为搭建私有云盘,也带动了群晖等一众私有云盘供应商的发展。可群晖硬件动辄数千,让

    2024年02月16日
    浏览(35)
  • 基于STM32与OneNet平台的智能家居系统设计(代码开源含自制APP代码)_onenet 编程

    请求方式: GET URL: http://api.heclouds.com/devices/device_id/datapoints 服务器或上位机下发主题报文(控制下位机): API函数: 请求方式: POST URL: http://api.heclouds.com/mqtt?topic=xxx 以上2个网络通讯的 API函数 至关重要,就是实现常规情况下OneNet物联网开发的 关键性技术支持。 ( 情况允许

    2024年04月12日
    浏览(68)
  • 基于misra-c-2012规则在vscode下集成cppcheck开源工具实现代码静态检查

    依赖工具: 1、cppcheck工具 2、vscode下安装C/C++ Advanced Lint扩展 3、python工具 双击后软件自行安装在:C:Program FilesCppcheck 添加系统路径步骤 2.1、在vscode软件中点击设置按钮,选择“设置”选项 2.2、搜索“@ext:jbenden.c-cpp-flylint”然后“settings.json”中编辑 2.3、在settings.json中添加这

    2024年02月09日
    浏览(49)
  • 基于OpenCV的简易实时手势识别(含代码)

    这是我大一寒假时写着玩的,非常简陋。基于凸包检测,所以实际上是计算指尖数量判断1~5的手势。又为1 ~3手势赋了控制鼠标操作的功能(但不能移动鼠标,而且因为手势识别不太准确所以这个功能实现得很废/doge)。(才疏学浅,希望有生之年能写个更好的 版本信息:Vi

    2024年02月03日
    浏览(50)
  • Linux搭建开源企业云盘Seafile,私有文件同步云盘及基本使用

    在日常生活经常需要在不同的设备间同步文件,还有在企业作为公司云存储备份使用。 类似的有谷歌云端硬盘,但是作为企业不能统一管理,即没有admin权限管理其他账号,而且免费空间有限。 国内的百度网盘,并没有文件同步功能,只支持手动的上传和下载,而且也没有文

    2023年04月22日
    浏览(36)
  • 【开源】基于Vue.js的校园二手交易系统的设计和实现

    随着国家生产力的发展,越来越多商品被生产了出来,超过了人们的实际消耗量,所以产生了大量闲置的商品,这些闲置商品有些被遗弃、有些通过二手平台被他人使用。为了防止不必要的浪费,开发了这套面向校园的二手交易系统,帮助用户高效率的转卖闲置的二手商品。

    2024年02月04日
    浏览(39)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包