欢迎访问 生活随笔!

生活随笔

当前位置: 首页 > 编程语言 > java >内容正文

java

Java分布式篇5——FastDFS

发布时间:2025/3/12 java 32 豆豆
生活随笔 收集整理的这篇文章主要介绍了 Java分布式篇5——FastDFS 小编觉得挺不错的,现在分享给大家,帮大家做个参考.

Java分布式篇5——FastDFS

分布式文件系统

1、主流的分布式文件系统

1.1、 HDFS

(Hadoop Distributed File System)Hadoop 分布式文件系统

  • 高容错的系统,适合部署到廉价的机器上
  • 能提供高吞吐量的数据访问,非常适合大规模数据应用
  • HDFS采用主从结构,一个HDFS是由一个name节点和N个data节点组成
  • name节点储存元数据,一个文件分割成N份存储在不同的data节点上
  • 生态好

1.2、GFS

Google File System

  • 可扩展的分布式文件系统,用于大型的,分布式的,对大量数据进行访问的应用
  • 运行于廉价的普通硬件上,可以提供容错功能
  • 它可以给大量的用户提供总体性能较高的服务
  • GFS采用主从结构,一个GFS集群由一个master和大量的chunkserver(分块服务器)组成
  • 一个文件被分割若干块,分散储存到多个分块server中

1.3、FastDFS

  • fastDFS特别适合图 片,小视频等小文件,因为fastDFS对文件是不分割的,所以没有文件合并的开销
  • 网络通信用socket,速度快

2、工作原理

  • Tracker(追踪者):负载均衡和调度,它管理着存储服务(Storage Server),可以集群,实现高可用
  • Storage(仓库):文件存储的位置
    • storage集群采用分组的方式,同组内的每台服务器是平等关系,数据同步,目的是实现数据备份,从而高可用,而不同组的服务器之间是不通信的
    • 同组内的每台服务器的存储量不一致的情况下,会选取容量最小的那个,所以同组内的服务器之间软硬件最好保持一致
    • Storage Server会连接集群中的所有Tracker Server,定时向他们汇报自己的状态,例如:剩余空间,文件同步情况,文件上传下载次数等信息

3、上传下载原理

3.1、上传

3.2、下载

4、FastDFS安装

libfastcommon 百度云:https://pan.baidu.com/s/1js5_xYNU_d1wV29BF1GQIg提取码:4q2m

FastDFS_v5.05 百度云:https://pan.baidu.com/s/11hBxbbxy6cneRYTLjOgXYg提取码:2rxp

4.1、安装gcc环境

yum install -y gcc gcc-c++

4.2、安装libevent

yum -y install libevent

4.3、安装libfastcommon

#安装解压zip包工具 yum install -y unzip #解压zip unzip libfastcommon.zip #进入目录 cd libfastcommon-master #编译 ./make.sh #如果出现权限不允许 chmod 777 make.sh ./make.sh #安装 ./make.sh install

4.4、安装Tracker

#解压 tar -zxvf FastDFS_v5.05.tar.gz #进入目录 cd FastDFS #编译 ./make.sh #安装 ./make.sh install

4.5、拷贝配置文件

cp /usr/local/fastdfs/FastDFS/conf/* /etc/fdfs/

4.6、配置Tracker

#作为文件存储目录,可以自行定义 mkdir /home/fastdfs vim /etc/fdfs/tracker.conf

tracker.conf

base_path=/home/fastdfs

4.7、配置Storage

#作为文件存储目录,可以自行定义 mkdir /home/fastdfs/fdfs_storage vim /etc/fdfs/storage.conf

storage.conf

base_path=/home/fastdfs store_path0=/home/fastdfs/fdfs_storage tracker_server=.101.34.116.9:22122

4.8、启动

[root@VM-0-3-centos bin]# pwd /usr/bin [root@VM-0-3-centos bin]# fdfs_trackerd /etc/fdfs/tracker.conf restart [root@VM-0-3-centos bin]# fdfs_storaged /etc/fdfs/storage.conf restart [root@VM-0-3-centos bin]# ps -ajx|grep fdfs1 15717 15716 15716 ? -1 Sl 0 0:00 fdfs_trackerd /etc/fdfs/tracker.conf restart1 17544 17543 17543 ? -1 Sl 0 0:00 fdfs_storaged /etc/fdfs/storage.conf restart 11458 17573 17572 11458 pts/0 17572 R+ 0 0:00 grep --color=auto fdfs [root@VM-0-3-centos bin]# netstat -lntp Active Internet connections (only servers) Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name tcp 0 0 127.0.0.1:25 0.0.0.0:* LISTEN 1383/master tcp 0 0 0.0.0.0:22122 0.0.0.0:* LISTEN 15717/fdfs_trackerd tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 1495/sshd tcp 0 0 0.0.0.0:23000 0.0.0.0:* LISTEN 17544/fdfs_storaged tcp6 0 0 ::1:25 :::* LISTEN 1383/master tcp6 0 0 :::22 :::* LISTEN 1495/sshd

5、文件上传

5.1、导入依赖

<dependencies><dependency><groupId>net.oschina.zcx7878</groupId><artifactId>fastdfs-client-java</artifactId><version>1.27.0.0</version></dependency><!-- https://mvnrepository.com/artifact/commons-io/commons-io --><dependency><groupId>commons-io</groupId><artifactId>commons-io</artifactId><version>2.8.0</version></dependency> </dependencies>

5.2、配置文件

##fastdfs-client.properties fastdfs.connect_timeout_in_seconds = 5 fastdfs.network_timeout_in_seconds = 30 fastdfs.charset = UTF-8 fastdfs.http_anti_steal_token = false fastdfs.http_secret_key = FastDFS1234567890 fastdfs.http_tracker_http_port = 80 fastdfs.tracker_servers = 101.34.116.9:22122

5.3、测试

public class FastDFSTest {@Testpublic void upload_file() throws IOException, MyException {// 加载配置文件ClientGlobal.initByProperties("fastdfs-client.properties");// 创建tracker客户端TrackerClient trackerClient=new TrackerClient();// 通过tracker客户端获取tracker的连接服务TrackerServer connection = trackerClient.getConnection();// 声明storage服务StorageServer storageServer=null;// 定义storage客户端StorageClient storageClient = new StorageClient(connection, storageServer);// 元数据NameValuePair[] nameValuePair = new NameValuePair[1];nameValuePair[0]=new NameValuePair("fileName","witch");// 上传文件String[] strings = storageClient.upload_file("C:\\Users\\yoya\\Pictures\\1555296384.jpeg", "jpeg", nameValuePair);System.out.println(Arrays.toString(strings));connection.close();// [group1, M00/00/00/rBEAA2EJE8qAGmD5AAOoqzLzJBg09.jpeg]} }

6、文件查询

public class FastDFSTest {@Testpublic void select_file() throws IOException, MyException {// 加载配置文件ClientGlobal.initByProperties("fastdfs-client.properties");// 创建tracker客户端TrackerClient trackerClient=new TrackerClient();// 通过tracker客户端获取tracker的连接服务TrackerServer connection = trackerClient.getConnection();// 声明storage服务StorageServer storageServer=null;// 定义storage客户端StorageClient storageClient = new StorageClient(connection, storageServer);// 查询文件FileInfo fileInfo = storageClient.query_file_info("group1", "M00/00/00/rBEAA2EJE8qAGmD5AAOoqzLzJBg09.jpeg");System.out.println(fileInfo);connection.close();// source_ip_addr = 172.17.0.3, file_size = 239787, create_timestamp = 2021-08-03 18:00:42, crc32 = 854795288} }

7、文件下载

public class FastDFSTest {@Testpublic void download_file() throws IOException, MyException {// 加载配置文件ClientGlobal.initByProperties("fastdfs-client.properties");// 创建tracker客户端TrackerClient trackerClient=new TrackerClient();// 通过tracker客户端获取tracker的连接服务TrackerServer connection = trackerClient.getConnection();// 声明storage服务StorageServer storageServer=null;// 定义storage客户端StorageClient storageClient = new StorageClient(connection, storageServer);// 查询文件byte[] bytes = storageClient.download_file("group1", "M00/00/00/rBEAA2EJE8qAGmD5AAOoqzLzJBg09.jpeg");FileOutputStream fileOutputStream = new FileOutputStream(new File("D:/123.jpeg"));fileOutputStream.write(bytes);fileOutputStream.close();connection.close();System.out.println("下载成功");} } 创作挑战赛新人创作奖励来咯,坚持创作打卡瓜分现金大奖

总结

以上是生活随笔为你收集整理的Java分布式篇5——FastDFS的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。