Java分布式篇5——FastDFS
生活随笔
收集整理的這篇文章主要介紹了
Java分布式篇5——FastDFS
小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
Java分布式篇5——FastDFS
分布式文件系統(tǒng)
1、主流的分布式文件系統(tǒng)
1.1、 HDFS
(Hadoop Distributed File System)Hadoop 分布式文件系統(tǒng)
- 高容錯(cuò)的系統(tǒng),適合部署到廉價(jià)的機(jī)器上
- 能提供高吞吐量的數(shù)據(jù)訪問(wèn),非常適合大規(guī)模數(shù)據(jù)應(yīng)用
- HDFS采用主從結(jié)構(gòu),一個(gè)HDFS是由一個(gè)name節(jié)點(diǎn)和N個(gè)data節(jié)點(diǎn)組成
- name節(jié)點(diǎn)儲(chǔ)存元數(shù)據(jù),一個(gè)文件分割成N份存儲(chǔ)在不同的data節(jié)點(diǎn)上
- 生態(tài)好
1.2、GFS
Google File System
- 可擴(kuò)展的分布式文件系統(tǒng),用于大型的,分布式的,對(duì)大量數(shù)據(jù)進(jìn)行訪問(wèn)的應(yīng)用
- 運(yùn)行于廉價(jià)的普通硬件上,可以提供容錯(cuò)功能
- 它可以給大量的用戶提供總體性能較高的服務(wù)
- GFS采用主從結(jié)構(gòu),一個(gè)GFS集群由一個(gè)master和大量的chunkserver(分塊服務(wù)器)組成
- 一個(gè)文件被分割若干塊,分散儲(chǔ)存到多個(gè)分塊server中
1.3、FastDFS
- fastDFS特別適合圖 片,小視頻等小文件,因?yàn)閒astDFS對(duì)文件是不分割的,所以沒(méi)有文件合并的開(kāi)銷(xiāo)
- 網(wǎng)絡(luò)通信用socket,速度快
2、工作原理
- Tracker(追蹤者):負(fù)載均衡和調(diào)度,它管理著存儲(chǔ)服務(wù)(Storage Server),可以集群,實(shí)現(xiàn)高可用
- Storage(倉(cāng)庫(kù)):文件存儲(chǔ)的位置
- storage集群采用分組的方式,同組內(nèi)的每臺(tái)服務(wù)器是平等關(guān)系,數(shù)據(jù)同步,目的是實(shí)現(xiàn)數(shù)據(jù)備份,從而高可用,而不同組的服務(wù)器之間是不通信的
- 同組內(nèi)的每臺(tái)服務(wù)器的存儲(chǔ)量不一致的情況下,會(huì)選取容量最小的那個(gè),所以同組內(nèi)的服務(wù)器之間軟硬件最好保持一致
- Storage Server會(huì)連接集群中的所有Tracker Server,定時(shí)向他們匯報(bào)自己的狀態(tài),例如:剩余空間,文件同步情況,文件上傳下載次數(shù)等信息
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環(huán)境
yum install -y gcc gcc-c++4.2、安裝libevent
yum -y install libevent4.3、安裝libfastcommon
#安裝解壓zip包工具 yum install -y unzip #解壓zip unzip libfastcommon.zip #進(jìn)入目錄 cd libfastcommon-master #編譯 ./make.sh #如果出現(xiàn)權(quán)限不允許 chmod 777 make.sh ./make.sh #安裝 ./make.sh install4.4、安裝Tracker
#解壓 tar -zxvf FastDFS_v5.05.tar.gz #進(jìn)入目錄 cd FastDFS #編譯 ./make.sh #安裝 ./make.sh install4.5、拷貝配置文件
cp /usr/local/fastdfs/FastDFS/conf/* /etc/fdfs/4.6、配置Tracker
#作為文件存儲(chǔ)目錄,可以自行定義 mkdir /home/fastdfs vim /etc/fdfs/tracker.conftracker.conf
base_path=/home/fastdfs4.7、配置Storage
#作為文件存儲(chǔ)目錄,可以自行定義 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、啟動(dòng)
[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、導(dǎo)入依賴
<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、測(cè)試
public class FastDFSTest {@Testpublic void upload_file() throws IOException, MyException {// 加載配置文件ClientGlobal.initByProperties("fastdfs-client.properties");// 創(chuàng)建tracker客戶端TrackerClient trackerClient=new TrackerClient();// 通過(guò)tracker客戶端獲取tracker的連接服務(wù)TrackerServer connection = trackerClient.getConnection();// 聲明storage服務(wù)StorageServer storageServer=null;// 定義storage客戶端StorageClient storageClient = new StorageClient(connection, storageServer);// 元數(shù)據(jù)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");// 創(chuàng)建tracker客戶端TrackerClient trackerClient=new TrackerClient();// 通過(guò)tracker客戶端獲取tracker的連接服務(wù)TrackerServer connection = trackerClient.getConnection();// 聲明storage服務(wù)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");// 創(chuàng)建tracker客戶端TrackerClient trackerClient=new TrackerClient();// 通過(guò)tracker客戶端獲取tracker的連接服務(wù)TrackerServer connection = trackerClient.getConnection();// 聲明storage服務(wù)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("下載成功");} } 創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎(jiǎng)勵(lì)來(lái)咯,堅(jiān)持創(chuàng)作打卡瓜分現(xiàn)金大獎(jiǎng)總結(jié)
以上是生活随笔為你收集整理的Java分布式篇5——FastDFS的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: c语言循环8,C语言8 循环语句 |
- 下一篇: linux pci 寄存器,Linux