保姆级教程-分布式文件系统FastDFS(高效存储,有效解决大量资源上传下载)(三)

简介: 保姆级教程-分布式文件系统FastDFS(高效存储,有效解决大量资源上传下载)

  1. 查看结果

M00/00/00/rBOAlmH2mmqANl6tAAAADi991u4762.txt

cd /home/fastdfs/storage/files/data/00/00/


ab411155f8f343819adce9a608064c40.png

有big的表示备份的意思,-m表示文件的属性文件通常会记录文件的扩展名大小等基本信息。

cc97b06b48e04dacac3b0cafa5b50b45.png

  1. 通过浏览器访问


eac1f9c3a3644e15ae83b449fbab838f.png

下载文件

  1. 通过download命令指定组名文件位置进行下载
/usr/bin/fdfs_download_file /etc/fdfs/client.conf group1/M00/00/00/rBOAlmH2mmqANl6tAAAAD


d6b85b81525e47089f600f81191721de.png

ecb1fb3f13894d2695cd7e7c5a3fb55f.png

删除文件

/usr/bin/fdfs_delete_file /etc/fdfs/client.conf group1/M00/00/00/rBOAlmH2mmqANl6tAAAADi991u4762.txt


584e8468d43448e785fe67f702091cba.png

删除成功后我们进入storage/files/data目录进行查看发现除了备份文件与属性文件外源文件已经被成功删除了

4e5d5404169944afb4a76c601e539178.png

FastDFS-扩展模块执行流程


cd065db616de42df8716616741cdfe94.png

扩展模块解析了请求的文件路径以后,到指定的Tracker获取组名为group1的这个机器所在IP以及端口。

扩展模块获取了stroage所在IP以及端口后,就会自动使用Fastdfs的命令到指定的机器中获取文件流。


常用命令

  1. 启动FastDFS(每个人的路径可能不一样,找到自己的安装路径)

启动tracker:fdfs_trackerd /etc/fdfs/tracker.conf

启动storage: fdfs_storaged /etc/fdfs/storage.conf

  1. 关闭FastDFS

关闭tracker:/usr/local/bin/stop.sh fdfs_tracker

关闭storage: /usr/local/bin/stop.sh fdfs_storage

  1. 重启FastDFS

重启tracker: /usr/local/bin/restart.sh fdfs_trackered

重启storage: /usr/local/bin/restart.sh fdfs_storaged

  1. 查看集群情况 (%FastDFS%为自己的安装路径)

在任意一台storage(tracker也可以):/usr/local/bin/fdfs_monitor %FastDFS%/storage.conf

  1. 删除一个storage (%FastDFS%为自己的安装路径)

在任意一台storage(tracker也可以):/usr/local/bin/fdfs_monitor %FastDFS%/storage.conf delete group2 20.12.1.73

  1. 上传文件

fdfs_upload_file

  1. 下载文件

fdfs_download_file

  1. 查看文件信息

fdfs_file_info

  1. 删除文件

fdfs_delete_file

  1. 追加文件内容

fdfs_upload_appenderfdfs_append_file

  1. 监控服务器状态命令

fdfs_monitor


Java操作FastDFS

因为Maven依赖库中没有添加FastDFS相关依赖我们想要在java项目中引入FastDFS就需要在本地进行手动配置

准备工作

  1. 下载源码包并解压

地址:https://gitcode.net/mirrors/happyfish100/fastdfs-client-java?utm_source=csdn_github_accelerator

24b99669c21d446ab237f1e888e368be.png


1a629d09666c44c48a4ec15b81de2519.png

  1. 采用maven命令编译成jar安装到本地maven库

通过cmd打开黑窗口(注意文件夹位置)


2a75c80e6cbf48db9a1e965d143f4028.png

通过下方清空并安装命令它会进行自动打包(需要配置maven环境变量)

mvn clean install

83c371bcb7de475bae7613b56ad401c1.png

  1. 通过idea工具创建普通的maven工程

213d0303315a466f840fd0d15bfd00a3.png

  1. 添加依赖
        <dependency>
            <groupId>org.csource</groupId>
            <artifactId>fastdfs-client-java</artifactId>
            <version>1.29-SNAPSHOT</version>
        </dependency>

2466564e4b9a436a9a5f84c1bf7c9db0.png


在resources目录下准备一个fastdfs.conf文件并编写相关配置

5e35c80d7d5445bbb8516342da53a44d.png

  1. 创建工具类测试上传,下载,删除等一系列操作

fc1ff76b9ee9436394ebbae91aa86f82.png


上传文件

  1. 编写代码
    /**
     * 文件上传
     */
    public static void upload(){
        try {
            //读取fastDFS的配置文件用于将所有的tracker的地址读取到内存中
            ClientGlobal.init("fastdfs.conf");
            System.out.println("初始化信息:"+ClientGlobal.configInfo());
            // 链接FastDFS服务器,创建tracker和Stroage
            TrackerClient trackerClient = new TrackerClient();
            TrackerServer trackerServer = trackerClient.getTrackerServer();
            StorageServer storageServer=trackerClient.getStoreStorage(trackerServer);
            //定义Stroage客户端对象,需要使用这个对象来完成具体的文件上传,下载和删除操作
            StorageClient storageClient=new StorageClient(trackerServer,storageServer);
            /**
             * 文件上传
             * 参数1:需要上传的文件的绝对路径
             * 参数2:需要上传的文件的扩展名
             * 参数3:文件的属性文件(通常不用上传)
             * 返回一个String数组,这个数据对我们非常重要必须妥善保管(建议存入数据库)
             * 数组中的一个元素为文件所在的组名
             * 数组中的第二个元素为文件所在远程路径名
             */
            String[] result= storageClient.upload_file("C:/Users/mzc/Desktop/剪辑素材/测试图片.jpg","jpg",null);
            for (String str:result){
                System.out.println(str);
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
  1. 运行

5c607538786143ce85bd3ea5bb54d7c9.png

3. 测试(运行成功后会得到组名和路径名,通过ip地址/组名/远程路径名进行访问)


image.png


下载文件

  1. 编写下载文件代码
    /**
     * 下载文件
     */
    public static void download(){
        try {
            //读取fastDFS的配置文件用于将所有的tracker的地址读取到内存中
            ClientGlobal.init("fastdfs.conf");
            System.out.println("初始化信息:"+ClientGlobal.configInfo());
            // 链接FastDFS服务器,创建tracker和Stroage
            TrackerClient trackerClient = new TrackerClient();
            TrackerServer trackerServer = trackerClient.getTrackerServer();
            StorageServer storageServer=trackerClient.getStoreStorage(trackerServer);
            //定义Stroage客户端对象,需要使用这个对象来完成具体的文件上传,下载和删除操作
            StorageClient storageClient=new StorageClient(trackerServer,storageServer);
            /**
             * 文件下载
             * 参数1:需要下载的文件的组名
             * 参数2:需要下载文件的远程文件名
             * 参数3:需要保存的本地文件名
             * 返回一个int类型的数据,返回0表示文件下载成功,其他值表示文件下载失败
             */
            String groupName="group1";
            String remoteFileName="M00/00/00/rBOAlmIN4bCAKz-VAADA9OtiDMc665.jpg";
            String localFileName="E:/aa.jpg";
            int result= storageClient.download_file(groupName,remoteFileName,localFileName);
            System.out.println(result);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
  1. 运行程序

267c21fcdced4c1dabf02b83342d797b.png



  1. 测试

4be20ffbc5674be6841660e3ea2e1231.png

21baad0de5f94903a5b1b28f2922cd3b.png

删除文件

  1. 编写代码
    /**
     * 删除文件
     */
    public static void delete(){
        try {
            //读取fastDFS的配置文件用于将所有的tracker的地址读取到内存中
            ClientGlobal.init("fastdfs.conf");
            System.out.println("初始化信息:"+ClientGlobal.configInfo());
            // 链接FastDFS服务器,创建tracker和Stroage
            TrackerClient trackerClient = new TrackerClient();
            TrackerServer trackerServer = trackerClient.getTrackerServer();
            StorageServer storageServer=trackerClient.getStoreStorage(trackerServer);
            //定义Stroage客户端对象,需要使用这个对象来完成具体的文件上传,下载和删除操作
            StorageClient storageClient=new StorageClient(trackerServer,storageServer);
            /**
             * 文件删除
             * 参数1:需要下载的文件的组名
             * 参数2:需要下载文件的远程文件名
             * 返回一个int类型的数据,返回0表示文件删除成功,其他值表示文件删除失败
             */
            String groupName="group1";
            String remoteFileName="M00/00/00/rBOAlmIN4bCAKz-VAADA9OtiDMc665.jpg";
            int result= storageClient.delete_file(groupName,remoteFileName);
            System.out.println(result);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }


  1. 运行程序

f1ccca482d6746f5ac4355ffabf051c5.png

  1. 测试

adeee01d7ba646b3b0d31a1e84be207c.png


相关文章
|
2月前
|
分布式计算 Hadoop 网络安全
Hadoop-08-HDFS集群 基础知识 命令行上机实操 hadoop fs 分布式文件系统 读写原理 读流程与写流程 基本语法上传下载拷贝移动文件
Hadoop-08-HDFS集群 基础知识 命令行上机实操 hadoop fs 分布式文件系统 读写原理 读流程与写流程 基本语法上传下载拷贝移动文件
41 1
|
2月前
|
存储 机器学习/深度学习 缓存
Hadoop-07-HDFS集群 基础知识 分布式文件系统 读写原理 读流程与写流程 基本语法上传下载拷贝移动文件
Hadoop-07-HDFS集群 基础知识 分布式文件系统 读写原理 读流程与写流程 基本语法上传下载拷贝移动文件
54 1
|
2月前
|
分布式计算 资源调度 Hadoop
Hadoop-05-Hadoop集群 集群WordCount 超详细 真正的分布式计算 上传HDFS MapReduce计算 YRAN查看任务 上传计算下载查看
Hadoop-05-Hadoop集群 集群WordCount 超详细 真正的分布式计算 上传HDFS MapReduce计算 YRAN查看任务 上传计算下载查看
56 1
|
2月前
|
SQL NoSQL MongoDB
一款基于分布式文件存储的数据库MongoDB的介绍及基本使用教程
一款基于分布式文件存储的数据库MongoDB的介绍及基本使用教程
51 0
|
4月前
|
机器学习/深度学习 分布式计算 Cloud Native
云原生架构下的高性能计算解决方案:利用分布式计算资源加速机器学习训练
【8月更文第19天】随着大数据和人工智能技术的发展,机器学习模型的训练数据量和复杂度都在迅速增长。传统的单机训练方式已经无法满足日益增长的计算需求。云原生架构为高性能计算提供了新的可能性,通过利用分布式计算资源,可以在短时间内完成大规模数据集的训练任务。本文将探讨如何在云原生环境下搭建高性能计算平台,并展示如何使用 PyTorch 和 TensorFlow 这样的流行框架进行分布式训练。
145 2
|
4月前
|
机器学习/深度学习 资源调度 PyTorch
面向大规模分布式训练的资源调度与优化策略
【8月更文第15天】随着深度学习模型的复杂度不断提高,对计算资源的需求也日益增长。为了加速训练过程并降低运行成本,高效的资源调度和优化策略变得至关重要。本文将探讨在大规模分布式训练场景下如何有效地进行资源调度,并通过具体的代码示例来展示这些策略的实际应用。
496 1
|
4月前
|
存储 SQL 运维
“震撼发布!PolarDB-X:云原生分布式数据库巨擘,超高并发、海量存储、复杂查询,一网打尽!错过等哭!”
【8月更文挑战第7天】PolarDB-X 是面向超高并发、海量存储和复杂查询场景设计的云原生分布式数据库系统
116 1
|
4月前
|
Oracle Java 关系型数据库
分布式锁设计问题之由于GC导致的Client同时操作共享资源的问题如何解决
分布式锁设计问题之由于GC导致的Client同时操作共享资源的问题如何解决
|
5月前
|
存储 关系型数据库 分布式数据库
PolarDB,阿里云的云原生分布式数据库,以其存储计算分离架构为核心,解决传统数据库的扩展性问题
【7月更文挑战第3天】PolarDB,阿里云的云原生分布式数据库,以其存储计算分离架构为核心,解决传统数据库的扩展性问题。此架构让存储层专注数据可靠性,计算层专注处理SQL,提升性能并降低运维复杂度。通过RDMA加速通信,多副本确保高可用性。资源可独立扩展,便于成本控制。动态添加计算节点以应对流量高峰,展示了其灵活性。PolarDB的开源促进了数据库技术的持续创新和发展。
313 2
|
6月前
|
存储 搜索推荐 Java
微服务SpringCloud ES分布式全文搜索引擎简介 下载安装及简单操作入门
微服务SpringCloud ES分布式全文搜索引擎简介 下载安装及简单操作入门
86 2