Chapter3-廈門大學(xué)-林子雨-大數(shù)據(jù)技術(shù)原理與應(yīng)用-第三章-分布式文件系統(tǒng)HDFS_第1頁
Chapter3-廈門大學(xué)-林子雨-大數(shù)據(jù)技術(shù)原理與應(yīng)用-第三章-分布式文件系統(tǒng)HDFS_第2頁
Chapter3-廈門大學(xué)-林子雨-大數(shù)據(jù)技術(shù)原理與應(yīng)用-第三章-分布式文件系統(tǒng)HDFS_第3頁
Chapter3-廈門大學(xué)-林子雨-大數(shù)據(jù)技術(shù)原理與應(yīng)用-第三章-分布式文件系統(tǒng)HDFS_第4頁
Chapter3-廈門大學(xué)-林子雨-大數(shù)據(jù)技術(shù)原理與應(yīng)用-第三章-分布式文件系統(tǒng)HDFS_第5頁
已閱讀5頁,還剩34頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

廈門大學(xué)計算機科學(xué)系2015年版林子雨廈門大學(xué)計算機科學(xué)系主頁:

第三章分布式文件系統(tǒng)HDFS

〔PPT版本號:2015年6月第1.0版〕《大數(shù)據(jù)技術(shù)原理與應(yīng)用》溫馨提示:編輯幻燈片母版,可以修改每頁PPT的廈大?;蘸偷撞课淖痔峋V3.1分布式文件系統(tǒng)3.2HDFS簡介3.3HDFS相關(guān)概念3.4HDFS體系結(jié)構(gòu)3.5HDFS存儲原理3.6HDFS大數(shù)據(jù)讀寫過程3.7 HDFS編程實踐歡送訪問《大數(shù)據(jù)技術(shù)原理與應(yīng)用》教材官方網(wǎng)站:本PPT是如下教材的配套講義:21世紀高等教育計算機規(guī)劃教材《大數(shù)據(jù)技術(shù)原理與應(yīng)用——概念、存儲、處理、分析與應(yīng)用》〔2015年6月第1版〕廈門大學(xué)林子雨編著,人民郵電出版社ISBN:978-7-115-39287-93.1 分布式文件系統(tǒng)3.1.1 計算機集群結(jié)構(gòu)3.1.2 分布式文件系統(tǒng)的結(jié)構(gòu)3.1.3 分布式文件系統(tǒng)的設(shè)計需求3.1.1 計算機集群結(jié)構(gòu)分布式文件系統(tǒng)把文件分布存儲到多個計算機節(jié)點上,成千上萬的計算機節(jié)點構(gòu)成計算機集群與之前使用多個處理器和專用高級硬件的并行化處理裝置不同的是,目前的分布式文件系統(tǒng)所采用的計算機集群,都是由普通硬件構(gòu)成的,這就大大降低了硬件上的開銷圖3-1計算機集群的根本架構(gòu)3.1.2 分布式文件系統(tǒng)的結(jié)構(gòu)分布式文件系統(tǒng)在物理結(jié)構(gòu)上是由計算機集群中的多個節(jié)點構(gòu)成的,這些節(jié)點分為兩類,一類叫“主節(jié)點”(MasterNode)或者也被稱為“名稱結(jié)點”(NameNode),另一類叫“從節(jié)點”〔SlaveNode〕或者也被稱為“數(shù)據(jù)節(jié)點”(DataNode)圖3-2大規(guī)模文件系統(tǒng)的整體結(jié)構(gòu)3.1.3 分布式文件系統(tǒng)的設(shè)計需求分布式文件系統(tǒng)的設(shè)計目標主要包括透明性、并發(fā)控制、可伸縮性、容錯以及平安需求等。但是,在具體實現(xiàn)中,不同產(chǎn)品實現(xiàn)的級別和方式都有所不同?!裢该餍院x:具備訪問透明性、位置透明性和伸縮透明性

HDFS實現(xiàn)情況:只能提供一定程度的訪問透明性,完全支持位置透明性和伸縮透明性●并發(fā)控制含義:客戶端對于文件的讀寫不應(yīng)該影響其他客戶端對同一個文件的讀寫

HDFS實現(xiàn)情況:機制非常簡單,任何時間都只允許有一個程序在寫入某個文件3.1.3 分布式文件系統(tǒng)的設(shè)計需求●文件復(fù)制含義:一個文件可以擁有在不同位置的多個副本HDFS實現(xiàn)情況:HDFS采用了多副本機制●硬件和操作系統(tǒng)的異構(gòu)性含義:可以在不同的操作系統(tǒng)和計算機上實現(xiàn)同樣的客戶端和效勞器端程序HDFS實現(xiàn)情況:采用Java語言開發(fā),具有很好的跨平臺能力3.1.3 分布式文件系統(tǒng)的設(shè)計需求●平安含義:保障系統(tǒng)的平安性HDFS實現(xiàn)情況:平安性較弱●可伸縮性含義:支持節(jié)點的動態(tài)參加或退出HDFS實現(xiàn)情況:建立在大規(guī)模廉價機器上的分布式文件系統(tǒng)集群,具有很好的可伸縮性●容錯含義:保證文件效勞在客戶端或者效勞端出現(xiàn)問題的時候能正常使用HDFS實現(xiàn)情況:具有多副本機制和故障自動檢測、恢復(fù)機制3.2 HDFS簡介總體而言,HDFS要實現(xiàn)以下目標:●兼容廉價的硬件設(shè)備●流數(shù)據(jù)讀寫●大數(shù)據(jù)集●簡單的文件模型●強大的跨平臺兼容性HDFS特殊的設(shè)計,在實現(xiàn)上述優(yōu)良特性的同時,也使得自身具有一些應(yīng)用局限性,主要包括以下幾個方面:●不適合低延遲數(shù)據(jù)訪問●無法高效存儲大量小文件●不支持多用戶寫入及任意修改文件3.3.1 塊HDFS采用抽象的塊概念可以帶來以下幾個明顯的好處:●支持大規(guī)模文件存儲:文件以塊為單位進行存儲,一個大規(guī)模文件可以被分拆成假設(shè)干個文件塊,不同的文件塊可以被分發(fā)到不同的節(jié)點上,因此,一個文件的大小不會受到單個節(jié)點的存儲容量的限制,可以遠遠大于網(wǎng)絡(luò)中任意節(jié)點的存儲容量●簡化系統(tǒng)設(shè)計:首先,大大簡化了存儲管理,因為文件塊大小是固定的,這樣就可以很容易計算出一個節(jié)點可以存儲多少文件塊;其次,方便了元數(shù)據(jù)的管理,元數(shù)據(jù)不需要和文件塊一起存儲,可以由其他系統(tǒng)負責管理元數(shù)據(jù)●適合數(shù)據(jù)備份:每個文件塊都可以冗余存儲到多個節(jié)點上,大大提高了系統(tǒng)的容錯性和可用性3.3.2 名稱節(jié)點和數(shù)據(jù)節(jié)點在HDFS中,名稱節(jié)點〔NameNode〕負責管理分布式文件系統(tǒng)的命名空間〔Namespace〕,保存了兩個核心的數(shù)據(jù)結(jié)構(gòu),即FsImage和EditLog,F(xiàn)sImage用于維護文件系統(tǒng)樹以及文件樹中所有的文件和文件夾的元數(shù)據(jù),操作日志文件EditLog中記錄了所有針對文件的創(chuàng)立、刪除、重命名等操作。名稱節(jié)點記錄了每個文件中各個塊所在的數(shù)據(jù)節(jié)點的位置信息。以下圖展示了名稱節(jié)點的數(shù)據(jù)結(jié)構(gòu)。圖3-3名稱節(jié)點的數(shù)據(jù)結(jié)構(gòu)3.3.2 名稱節(jié)點和數(shù)據(jù)節(jié)點數(shù)據(jù)節(jié)點〔DataNode〕是分布式文件系統(tǒng)HDFS的工作節(jié)點,負責數(shù)據(jù)的存儲和讀取,會根據(jù)客戶端或者是名稱節(jié)點的調(diào)度來進行數(shù)據(jù)的存儲和檢索,并且向名稱節(jié)點定期發(fā)送自己所存儲的塊的列表。每個數(shù)據(jù)節(jié)點中的數(shù)據(jù)會被保存在各自節(jié)點的本地Linux文件系統(tǒng)中3.4 HDFS體系結(jié)構(gòu)3.4.1 HDFS體系結(jié)構(gòu)概述3.4.2 HDFS命名空間管理3.4.3 通信協(xié)議3.4.4 客戶端3.4.5 HDFS體系結(jié)構(gòu)的局限性3.4.1 HDFS體系結(jié)構(gòu)概述HDFS采用了主從〔Master/Slave〕結(jié)構(gòu)模型,一個HDFS集群包括一個名稱節(jié)點〔NameNode〕和假設(shè)干個數(shù)據(jù)節(jié)點〔DataNode〕〔如圖3-4所示〕。名稱節(jié)點作為中心效勞器,負責管理文件系統(tǒng)的命名空間及客戶端對文件的訪問。集群中的數(shù)據(jù)節(jié)點一般是一個節(jié)點運行一個數(shù)據(jù)節(jié)點進程,負責處理文件系統(tǒng)客戶端的讀/寫請求,在名稱節(jié)點的統(tǒng)一調(diào)度下進行數(shù)據(jù)塊的創(chuàng)立、刪除和復(fù)制等操作。每個數(shù)據(jù)節(jié)點的數(shù)據(jù)實際上是保存在本地Linux文件系統(tǒng)中的圖3-4HDFS體系結(jié)構(gòu)3.4.2 HDFS命名空間管理HDFS的命名空間包含目錄、文件和塊。命名空間管理是指命名空間支持對HDFS中的目錄、文件和塊做類似文件系統(tǒng)的創(chuàng)立、修改、刪除等根本操作。在當前的HDFS體系結(jié)構(gòu)中,在整個HDFS集群中只有一個命名空間,并且只有唯一一個名稱節(jié)點,該節(jié)點負責對這個命名空間進行管理HDFS使用的是傳統(tǒng)的分級文件體系,因此,用戶可以像使用普通文件系統(tǒng)一樣,創(chuàng)立、刪除目錄和文件,在目錄間轉(zhuǎn)移文件,重命名文件等。但是,HDFS還沒有實現(xiàn)磁盤配額和文件訪問權(quán)限等功能,也不支持文件的硬連接和軟連接〔快捷方式〕3.4.3 通信協(xié)議HDFS是一個部署在集群上的分布式文件系統(tǒng),因此,很多數(shù)據(jù)需要通過網(wǎng)絡(luò)進行傳輸所有的HDFS通信協(xié)議都是構(gòu)建在TCP/IP協(xié)議根底之上的客戶端通過一個可配置的端口向名稱節(jié)點主動發(fā)起TCP連接,并使用客戶端協(xié)議與名稱節(jié)點進行交互名稱節(jié)點和數(shù)據(jù)節(jié)點之間那么使用數(shù)據(jù)節(jié)點協(xié)議進行交互客戶端與數(shù)據(jù)節(jié)點的交互是通過RPC〔RemoteProcedureCall〕來實現(xiàn)的。在設(shè)計上,名稱節(jié)點不會主動發(fā)起RPC,而是響應(yīng)來自客戶端和數(shù)據(jù)節(jié)點的RPC請求3.4.4 客戶端客戶端是用戶操作HDFS最常用的方式,HDFS在部署時都提供了客戶端。不過需要說明的是,嚴格來說,客戶端并不算是HDFS的一局部。客戶端可以支持翻開、讀取、寫入等常見的操作,并且提供了類似Shell的命令行方式來訪問HDFS中的數(shù)據(jù)〔參見第節(jié)〕。此外,HDFS也提供了JavaAPI,作為應(yīng)用程序訪問文件系統(tǒng)的客戶端編程接口〔參見第節(jié)〕3.4.5 HDFS體系結(jié)構(gòu)的局限性HDFS只設(shè)置唯一一個名稱節(jié)點,這樣做雖然大大簡化了系統(tǒng)設(shè)計,但也帶來了一些明顯的局限性,具體如下:〔1〕命名空間的限制:名稱節(jié)點是保存在內(nèi)存中的,因此,名稱節(jié)點能夠容納的對象〔文件、塊〕的個數(shù)會受到內(nèi)存空間大小的限制?!?〕性能的瓶頸:整個分布式文件系統(tǒng)的吞吐量,受限于單個名稱節(jié)點的吞吐量?!?〕隔離問題:由于集群中只有一個名稱節(jié)點,只有一個命名空間,因此,無法對不同應(yīng)用程序進行隔離?!?〕集群的可用性:一旦這個唯一的名稱節(jié)點發(fā)生故障,會導(dǎo)致整個集群變得不可用。3.5 HDFS存儲原理3.5.1 冗余數(shù)據(jù)保存3.5.2 數(shù)據(jù)存取策略3.5.3 數(shù)據(jù)錯誤與恢復(fù)3.5.1 冗余數(shù)據(jù)保存作為一個分布式文件系統(tǒng),為了保證系統(tǒng)的容錯性和可用性,HDFS采用了多副本方式對數(shù)據(jù)進行冗余存儲,通常一個數(shù)據(jù)塊的多個副本會被分布到不同的數(shù)據(jù)節(jié)點上,如圖3-5所示,數(shù)據(jù)塊1被分別存放到數(shù)據(jù)節(jié)點A和C上,數(shù)據(jù)塊2被存放在數(shù)據(jù)節(jié)點A和B上。這種多副本方式具有以下幾個優(yōu)點:〔1〕加快數(shù)據(jù)傳輸速度〔2〕容易檢查數(shù)據(jù)錯誤〔3〕保證數(shù)據(jù)可靠性圖3-5HDFS數(shù)據(jù)塊多副本存儲3.5.2 數(shù)據(jù)存取策略數(shù)據(jù)存取策略包括數(shù)據(jù)存放、數(shù)據(jù)讀取和數(shù)據(jù)復(fù)制等方面,它在很大程度上會影響到整個分布式文件系統(tǒng)的讀寫性能,是分布式文件系統(tǒng)的核心內(nèi)容。1.數(shù)據(jù)存放為了提高數(shù)據(jù)可靠性與系統(tǒng)可用性,以及充分利用網(wǎng)絡(luò)帶寬,HDFS采用了以機架〔Rack〕為根底的數(shù)據(jù)存放策略HDFS默認每個數(shù)據(jù)節(jié)點都是在不同的機架上,缺點是寫入數(shù)據(jù)的時候不能充分利用同一機架內(nèi)部機器之間的帶寬。優(yōu)點:首先,可以獲得很高的數(shù)據(jù)可靠性,即使一個機架發(fā)生故障,位于其他機架上的數(shù)據(jù)副本仍然是可用的;其次,在讀取數(shù)據(jù)的時候,可以在多個機架并行讀取數(shù)據(jù),大大提高了數(shù)據(jù)讀取速度;再次,可以更容易實現(xiàn)系統(tǒng)內(nèi)部負載均衡和錯誤處理。3.5.2 數(shù)據(jù)存取策略2.數(shù)據(jù)讀取HDFS提供了一個API可以確定一個數(shù)據(jù)節(jié)點所屬的機架ID,客戶端也可以調(diào)用API獲取自己所屬的機架ID當客戶端讀取數(shù)據(jù)時,從名稱節(jié)點獲得數(shù)據(jù)塊不同副本的存放位置列表,列表中包含了副本所在的數(shù)據(jù)節(jié)點,可以調(diào)用API來確定客戶端和這些數(shù)據(jù)節(jié)點所屬的機架ID,當發(fā)現(xiàn)某個數(shù)據(jù)塊副本對應(yīng)的機架ID和客戶端對應(yīng)的機架ID相同時,就優(yōu)先選擇該副本讀取數(shù)據(jù),如果沒有發(fā)現(xiàn),就隨機選擇一個副本讀取數(shù)據(jù)3.5.2 數(shù)據(jù)存取策略3.數(shù)據(jù)復(fù)制HDFS的數(shù)據(jù)復(fù)制采用了流水線復(fù)制的策略,大大提高了數(shù)據(jù)復(fù)制過程的效率當客戶端要往HDFS中寫入一個文件時,這個文件會首先被寫入本地,并被切分成假設(shè)干個塊,每個塊的大小是由HDFS的設(shè)定值來決定的每個塊都向HDFS集群中的名稱節(jié)點發(fā)起寫請求,名稱節(jié)點會根據(jù)系統(tǒng)中各個數(shù)據(jù)節(jié)點的使用情況,選擇一個數(shù)據(jù)節(jié)點列表返回給客戶端,然后,客戶端就把數(shù)據(jù)首先寫入列表中的第一個數(shù)據(jù)節(jié)點,同時把列表傳給第一個數(shù)據(jù)節(jié)點當?shù)谝粋€數(shù)據(jù)節(jié)點接收到4KB數(shù)據(jù)的時候,寫入本地,并且向列表中的第二個數(shù)據(jù)節(jié)點發(fā)起連接請求,把自己已經(jīng)接收到的4KB數(shù)據(jù)和列表傳給第二個數(shù)據(jù)節(jié)點當?shù)诙€數(shù)據(jù)節(jié)點接收到4KB數(shù)據(jù)的時候,寫入本地,并且向列表中的第三個數(shù)據(jù)節(jié)點發(fā)起連接請求,依此類推,列表中的多個數(shù)據(jù)節(jié)點形成一條數(shù)據(jù)復(fù)制的流水線最后,當文件寫完的時候,數(shù)據(jù)復(fù)制也同時完成3.5.3 數(shù)據(jù)錯誤與恢復(fù)HDFS具有較高的容錯性,可以兼容廉價的硬件,它把硬件出錯看作一種常態(tài),而不是異常,并設(shè)計了相應(yīng)的機制檢測數(shù)據(jù)錯誤和進行自動恢復(fù),主要包括以下幾種情形:名稱節(jié)點出錯、數(shù)據(jù)節(jié)點出錯和數(shù)據(jù)出錯。1.名稱節(jié)點出錯名稱節(jié)點保存了所有的元數(shù)據(jù)信息,其中,最核心的兩大數(shù)據(jù)結(jié)構(gòu)是FsImage和Editlog,如果這兩個文件發(fā)生損壞,那么整個HDFS實例將失效。因此,HDFS設(shè)置了備份機制,把這些核心文件同步復(fù)制到備份效勞器SecondaryNameNode上。當名稱節(jié)點出錯時,就可以根據(jù)備份效勞器SecondaryNameNode中的FsImage和Editlog數(shù)據(jù)進行恢復(fù)。3.5.3 數(shù)據(jù)錯誤與恢復(fù)2.數(shù)據(jù)節(jié)點出錯每個數(shù)據(jù)節(jié)點會定期向名稱節(jié)點發(fā)送“心跳”信息,向名稱節(jié)點報告自己的狀態(tài)當數(shù)據(jù)節(jié)點發(fā)生故障,或者網(wǎng)絡(luò)發(fā)生斷網(wǎng)時,名稱節(jié)點就無法收到來自一些數(shù)據(jù)節(jié)點的心跳信息,這時,這些數(shù)據(jù)節(jié)點就會被標記為“宕機”,節(jié)點上面的所有數(shù)據(jù)都會被標記為“不可讀”,名稱節(jié)點不會再給它們發(fā)送任何I/O請求這時,有可能出現(xiàn)一種情形,即由于一些數(shù)據(jù)節(jié)點的不可用,會導(dǎo)致一些數(shù)據(jù)塊的副本數(shù)量小于冗余因子名稱節(jié)點會定期檢查這種情況,一旦發(fā)現(xiàn)某個數(shù)據(jù)塊的副本數(shù)量小于冗余因子,就會啟動數(shù)據(jù)冗余復(fù)制,為它生成新的副本HDFS和其它分布式文件系統(tǒng)的最大區(qū)別就是可以調(diào)整冗余數(shù)據(jù)的位置3.5.3 數(shù)據(jù)錯誤與恢復(fù)3.數(shù)據(jù)出錯網(wǎng)絡(luò)傳輸和磁盤錯誤等因素,都會造成數(shù)據(jù)錯誤客戶端在讀取到數(shù)據(jù)后,會采用md5和sha1對數(shù)據(jù)塊進行校驗,以確定讀取到正確的數(shù)據(jù)在文件被創(chuàng)立時,客戶端就會對每一個文件塊進行信息摘錄,并把這些信息寫入到同一個路徑的隱藏文件里面當客戶端讀取文件的時候,會先讀取該信息文件,然后,利用該信息文件對每個讀取的數(shù)據(jù)塊進行校驗,如果校驗出錯,客戶端就會請求到另外一個數(shù)據(jù)節(jié)點讀取該文件塊,并且向名稱節(jié)點報告這個文件塊有錯誤,名稱節(jié)點會定期檢查并且重新復(fù)制這個塊3.6 HDFS數(shù)據(jù)讀寫過程3.6.1 讀數(shù)據(jù)的過程3.6.2 寫數(shù)據(jù)的過程3.6.1 讀數(shù)據(jù)的過程以下圖展示了HDFS讀數(shù)據(jù)的過程:3.6.1 讀數(shù)據(jù)的過程以下圖展示了HDFS寫數(shù)據(jù)的過程:3.7HDFS編程實踐Hadoop提供了關(guān)于HDFS在Linux操作系統(tǒng)上進行文件操作的常用Shell命令以及JavaAPI。同時還可以利用Web界面查看和管理Hadoop文件系統(tǒng)3.7.1 HDFS常用命令HDFS有很多shell命令,其中,fs命令可以說是HDFS最常用的命令利用該命令可以查看HDFS文件系統(tǒng)的目錄結(jié)構(gòu)、上傳和下載數(shù)據(jù)、創(chuàng)立文件等。該命令的用法為:hadoopfs[genericOptions][commandOptions]3.7.1 HDFS常用命令實例:hadoopfs-ls<path>:顯示<path>指定的文件的詳細信息hadoopfs-mkdir<path>:創(chuàng)立<path>指定的文件夾3.7.1 HDFS常用命令實例:hadoopfs-cat<path>:將<path>指定的文件的內(nèi)容輸出到標準輸出〔stdout〕hadoopfs-copyFromLocal<localsrc><dst>:將本地源文件<localsrc>復(fù)制到路徑<dst>指定的文件或文件夾中3.7.2 HDFS的Web界面在配置好Hadoop集群之后,可以通過瀏覽器登錄“://[NameNodeIP]:50070”訪問HDFS文件系統(tǒng)3.7.3 HDFS常用JavaAPI及應(yīng)用實例HDFS常用JavaAPI〔1〕:一個通用文件系統(tǒng)的抽象基類,可以被分布式文件系統(tǒng)繼承。所有可能使用Hadoop文件系統(tǒng)的代碼都要使用到這個類〔2〕:一個接口,用于向客戶端展示系統(tǒng)中文件和目錄的元數(shù)據(jù),具體包括文件大小、塊大小、副本信息、所有者、修改時間等??赏ㄟ^FileSystem.listStatus()方法獲得具體的實例對象〔3〕:文件輸入流,用于讀取Hadoop文件3.7.3 HDFS常用JavaAPI及應(yīng)用實例〔4〕:文件輸出流,用于寫Hadoop文件〔5〕:訪問配置項。所有的配置項的值,如果在core-site.xml中有對應(yīng)的配置,那么以core-site.xml為準,否那么以core-default.xml中相應(yīng)的配置項信息為準〔6〕:用于表示Hadoop文件系統(tǒng)中的一個文件或者一個目錄的路徑〔

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論