# lite-hdfs **Repository Path**: yangkb/lite-hdfs ## Basic Information - **Project Name**: lite-hdfs - **Description**: 基于hdfs的分布式文件存储系统 - **Primary Language**: Java - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 1 - **Forks**: 0 - **Created**: 2023-11-23 - **Last Updated**: 2023-12-09 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # lite-hdfs #### 介绍 基于hdfs的分布式文件存储系统 #### 软件架构 1. 软件架构图 请查阅 /doc/系统架构设计.eddx(亿图图示软件) 2. 上传流程图 请查阅 /doc/上传流程图.eddx 3. 业务模块 1. 文件管理 1. 文件列表查询 2. 文件重命名 3. 文件删除 4. 文件上传 5. 文件下载 6. 文件移动 7. 文件夹移动 8. 文件夹下载 9. 文件夹删除 10. 文件批量上传 11. 文件和文件夹搜索 2. 租户管理 3. 用户管理 4. 租户配置管理 5. 定时任务: 1. 定期清理本地缓存过期文件 2. 定期清理过期文件 #### 设计目标 1. 尽可能承接更多流量的同时,使用本地缓存,避免hdfs访问压力过大 2. 尽可能避免hdfs文件重复,清除无效文件,节约磁盘空间 3. 限制本地缓存文件的大小,防止本地磁盘被占满 #### 设计说明 1. 数据库设计 1. hdfs集群表:id,集群编号,集群名称(例如:杭州-001),访问地址 2. 初始化租户配置表:id,租户容量,单用户限制容量,单文件大小限制,租户用户数限制,本地缓存大小,本地缓存时长 3. 租户表:id,租户编号(t-000001),到期时间 4. 用户表:id,租户id,用户名,手机号码,密码,租户id 5. 租户配置表:id,租户id,租户容量,单用户限制容量,单文件大小限制,租户用户数限制,本地缓存大小,本地缓存时长 6. 文件表:id,文件uuid(需加索引),文件签名(sha256,需加索引),文件后缀,文件大小,过期时间,文件地址,hdfs集群id 7. 用户文件夹表:id,租户id,用户id,文件夹名称,父级文件夹id 8. 任务表:id,租户id,用户id,用户文件id,文件uuid,类型(1-删除文件;需加索引),文件状态 (1-待删除,2-已删除),备注 9. 操作记录表:id,租户id,用户id,文件夹id,用户文件id, 类型(0-查看,1-上传,2-删除) 10. 用户文件关联表:id,租户id,用户id,文件id,文件夹id,文件名,文件地址 注意: 租户id,用户id,文件夹id,文件id ,均需要加索引 2. 采用k8s/spring cloud实现文件存储系统,可以实现动态扩容,滚动更新,故障自动恢复等功能,增强服务的可靠性 3. 用户密码通过随机盐+SHA1算法生成,避免密码泄露和撞库风险;接口采用Token权限拦截和数据权限校验,确保安全 4. 文件存储采用多机房+HDFS集群模式,可确保数据不丢失,完整性,并提升服务的承载能力。mysql数据库采用主从备份,防止数据丢失损坏 5. hdfs集群可采用多机房模式,每个机房对应一个访问地址,分散请求压力 6. 通过租户Id取模,当服务实例数不变动的情况下,租户每次请求,始终是同一个容器,这样提高缓存的命中率。请求的文件会先查询本地磁盘文件缓存,加载不到,才会请求hdfs文件到本地缓存 7. 后期数据量过大,可以考虑拆分: 对hdfs_folder用户文件夹表,user_file_relation用户文件关联表 根据租户id分表; 对hdfs_task任务表 数据定期归档,只保留最近3个月数据,其余数据转移到历史表中,历史表按年归档; 对hdfs_file文件表 数据根据hash(uuid)取模分表,一次性分数百个表(或者单独使用一个数据库); 对operation_record操作记录表 数据根据hash(userId)取模分表,一次性分数十个表(或者单独使用一个数据库); #### 安装教程 1. 安装hadoop,redis,mysql 2. 启动hdfs: D:/hadoop-3.1.1/sbin目录start-dfs.cmd 3. 访问hdfs: http://127.0.0.1:9870 4. 启动nacos,gateway,lite-hdfs-server服务 5. 未完待续。。。