Java分布式篇5——FastDFS
生活随笔
收集整理的這篇文章主要介紹了
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 libevent4.3、安裝libfastcommon
#安裝解壓zip包工具 yum install -y unzip #解壓zip unzip libfastcommon.zip #進入目錄 cd libfastcommon-master #編譯 ./make.sh #如果出現權限不允許 chmod 777 make.sh ./make.sh #安裝 ./make.sh install4.4、安裝Tracker
#解壓 tar -zxvf FastDFS_v5.05.tar.gz #進入目錄 cd FastDFS #編譯 ./make.sh #安裝 ./make.sh install4.5、拷貝配置文件
cp /usr/local/fastdfs/FastDFS/conf/* /etc/fdfs/4.6、配置Tracker
#作為文件存儲目錄,可以自行定義 mkdir /home/fastdfs vim /etc/fdfs/tracker.conftracker.conf
base_path=/home/fastdfs4.7、配置Storage
#作為文件存儲目錄,可以自行定義 mkdir /home/fastdfs/fdfs_storage vim /etc/fdfs/storage.confstorage.conf
base_path=/home/fastdfs store_path0=/home/fastdfs/fdfs_storage tracker_server=.101.34.116.9:221224.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/sshd5、文件上傳
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:221225.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的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: c语言循环8,C语言8 循环语句 |
- 下一篇: linux pci 寄存器,Linux