日韩久久久精品,亚洲精品久久久久久久久久久,亚洲欧美一区二区三区国产精品 ,一区二区福利

分布式文件系統(tǒng)KFS基礎知識介紹

系統(tǒng) 1866 0

Kosmos distributed file system,簡稱KFS,是一個類GFS的分布式文件系統(tǒng),被設計用于分布式的結構化存儲。下面將對KFS的體系結構進行簡單介紹,最后給出一個使用KFS C++ API的示例。

1. KFS體系結構

KFS和GFS的整體結構類似,圖中所示為GFS的體系結構圖(來自于Sanjay Ghemawat, Howard Gobioff, and Shun-Tak Leung的論文“The Google File System”):

分布式文件系統(tǒng)KFS基礎知識介紹

?

KFS系統(tǒng)由三部分組成,分別是metaserver(相當于GFS master)、chunkserver(相當于GFS chunkserver)和client library(相當于GFS client):

  • metaserver:元數(shù)據(jù)服務器,使用B+樹存儲分布式文件系統(tǒng)的全局文件系統(tǒng)命名空間,一個KFS中僅有一個metaserver;
  • chunkserver: 一個大文件被切分成許多固定大小的文件塊block,文件塊block被以chunk的方式存儲在獨立的chunkserver上,每個 chunkserver上可能存不同文件的block,一個block會被存在不同的chunkserver上(默認為3份);在一個KFS中,有一系列 的chunkserver,chunkserver將chunk存儲在底層的文件系統(tǒng)(如Linux的XFS、EXT2);
  • client library:提供文件系統(tǒng)訪問的API,使應用可以通過接口操縱KFS;在將實際的應用和KFS集成起來時,需要在應用中包含KFS的客戶端庫文件。

下面以KFS client端對某一文件的訪問為例,說明KFS的工作流程。假設該文件名為/kfs/testdata,分為以下幾步完成:

  • client端以該路徑名/kfs/testdata為參數(shù),向metaserver發(fā)出請求;
  • metaserver將該文件對應的文件屬性信息返回到client端;
  • client端將文件名和對應的文件偏移(file name, chunk index)為關鍵字發(fā)送給metaserver;
  • metaserver對所管理的各chunkserver進行分析,將擁有該偏移塊的(chunk handle, chunk locations)返回給client端;
  • client端以(chunk handle, byte range)為關鍵字,向相應的chunkserver發(fā)送數(shù)據(jù)讀寫請求;
  • chunkserver返回對應數(shù)據(jù)區(qū)段的chunk data給client端;
  • client端得到chunk data。

2. KFS API調用

KFS 支持的客戶端包括有C++、Java和Python,以C++為例,KFS客戶端API調用的一般過程如下:首先,調用 getKfsClientFactory()->SetDefaultClient(serverHost, port)方法,獲取一個KfsClient類型的指針;然后,通過這個KfsClient類型的指針,調用所需的文件系統(tǒng)的函數(shù)(如創(chuàng)建目錄、刪除目 錄、創(chuàng)建文件、刪除文件、獲取文件信息等)。

下面給出一個示例,通過調用KFS的C++ API,得到文件的stat信息(該代碼不能直接運行):

      
         1
      
      
        using
      
      
        namespace
      
      
         KFS;
        
2 using namespace KFS::tools;
3 KfsFileStat statInfo;
4 KfsClientPtr kfsClient = getKfsClientFactory() -> SetDefaultClient(serverHost, port);
5 if ( ! kfsClient) {
6 cout << " failed to initialize kfs client! " << endl;
7 exit( 0 );
8 }
9 if (verboseLogging) {
10 KFS::MsgLogger::SetLevel(log4cpp::Priority::DEBUG);
11 } else {
12 KFS::MsgLogger::SetLevel(log4cpp::Priority::WARN);
13 }
14 if (kfsClient -> Stat(kfsPath, statInfo) < 0 ) {
15 cout << " KFS path: " << kfsPath << " is non-existent! " << endl;
16 exit( - 1 );
17 }

有關其他文件系統(tǒng)訪問接口的調用方法與上述示例類似,具體可參考kfs目錄下examples子目錄中的C++ example代碼以及Java example代碼。

分布式文件系統(tǒng)KFS基礎知識介紹


更多文章、技術交流、商務合作、聯(lián)系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯(lián)系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!??!

發(fā)表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 开远市| 石棉县| 青河县| 钟山县| 津市市| 家居| 涞水县| 皋兰县| 青川县| 全椒县| 明星| 许昌县| 汾西县| 正安县| 河北省| 嘉祥县| 易门县| 大宁县| 九龙城区| 高青县| 巴青县| 托克逊县| 镇坪县| 通州区| 河间市| 金平| 江山市| 青浦区| 卢湾区| 和平区| 新绛县| 海晏县| 庆城县| 广元市| 诸城市| 盐山县| 铜陵市| 华亭县| 婺源县| 蓝田县| 固镇县|