Kosmos distributed file system,简称KFS,是一个类GFS的分布式文件系统,被设计用于分布式的结构化存储。下面将对KFS的体系结构进行简单介绍,最后给出一个使用KFS C++ API的示例。

1. KFS体系结构

KFS和GFS的整体结构类似,图中所示为GFS的体系结构图(来自于Sanjay Ghemawat, Howard Gobioff, and Shun-Tak Leung的论文“The Google File System”):

KFS系统由三部分组成,分别是metaserver(相当于GFS master)、chunkserver(相当于GFS chunkserver)和client library(相当于GFS client):

  • metaserver:元数据服务器,使用B+树存储分布式文件系统的全局文件系统命名空间,一个KFS中仅有一个metaserver;
  • chunkserver: 一个大文件被切分成许多固定大小的文件块block,文件块block被以chunk的方式存储在独立的chunkserver上,每个 chunkserver上可能存不同文件的block,一个block会被存在不同的chunkserver上(默认为3份);在一个KFS中,有一系列 的chunkserver,chunkserver将chunk存储在底层的文件系统(如Linux的XFS、EXT2);
  • client library:提供文件系统访问的API,使应用可以通过接口操纵KFS;在将实际的应用和KFS集成起来时,需要在应用中包含KFS的客户端库文件。

下面以KFS client端对某一文件的访问为例,说明KFS的工作流程。假设该文件名为/kfs/testdata,分为以下几步完成:

  • client端以该路径名/kfs/testdata为参数,向metaserver发出请求;
  • metaserver将该文件对应的文件属性信息返回到client端;
  • client端将文件名和对应的文件偏移(file name, chunk index)为关键字发送给metaserver;
  • metaserver对所管理的各chunkserver进行分析,将拥有该偏移块的(chunk handle, chunk locations)返回给client端;
  • client端以(chunk handle, byte range)为关键字,向相应的chunkserver发送数据读写请求;
  • chunkserver返回对应数据区段的chunk data给client端;
  • client端得到chunk data。

2. KFS API调用

KFS 支持的客户端包括有C++、Java和Python,以C++为例,KFS客户端API调用的一般过程如下:首先,调用 getKfsClientFactory()->SetDefaultClient(serverHost, port)方法,获取一个KfsClient类型的指针;然后,通过这个KfsClient类型的指针,调用所需的文件系统的函数(如创建目录、删除目 录、创建文件、删除文件、获取文件信息等)。

下面给出一个示例,通过调用KFS的C++ API,得到文件的stat信息(该代码不能直接运行):

 1 usingnamespace KFS; 2 usingnamespace 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 }

有关其他文件系统访问接口的调用方法与上述示例类似,具体可参考kfs目录下examples子目录中的C++ example代码以及Java example代码。

分布式文件系统KFS基础知识介绍相关推荐

  1. UICC 之 USIM 详解全系列——UICC基础知识介绍

    本人就职于国际知名终端厂商,负责modem芯片研发. 在5G早期负责终端数据业务层.核心网相关的开发工作,目前牵头6G算力网络技术标准研究. UICC 之 USIM 详解全系列--UICC(TS102 ...

  2. 云基础知识介绍及云组件部署

    云基础知识介绍及云组件部署 序言 随着业务的发展,各类业务都有上云的需求,大家在工作中也会经常遇到各类公有云的场景,其实各大厂商的公有云功能都大相径庭.相信很多人有疑问,如何在公有云上部署相关云组件和 ...

  3. 代理服务器基础知识介绍及防火墙知识普及

    代理服务器基础知识介绍及防火墙知识普及 2004-10-17     作者:佚名    来源:诗凌工作室 代理服务器基础知识介绍: Internet大家已经不在陌生,现在已经迈进了广大工薪阶层的家庭. ...

  4. NLP汉语自然语言处理入门基础知识介绍

    NLP汉语自然语言处理入门基础知识介绍 自然语言处理定义: 自然语言处理是一门计算机科学.人工智能以及语言学的交叉学科.虽然语言只是人工智能的一部分(人工智能还包括计算机视觉等),但它是非常独特的一部 ...

  5. 【 MATLAB 】逆离散余弦变换(idct)的基础知识介绍

    基础知识介绍 逆离散余弦变换从离散余弦变换 (DCT) 系数中重建序列.idct 函数是 dct 函数的逆. The DCT has four standard variants. For a tra ...

  6. 视频编解码的理论和实践1:基础知识介绍

    近几年,视频编解码技术在理论及应用方面都取得了重大的进展,越来越多的人想要了解编解码技术.因此,网易云信研发工程师为大家进行了归纳梳理,从理论及实践两个方面简单介绍视频编解码技术. 相关阅读推荐 &l ...

  7. OpenGL开发之旅基础知识介绍

    最近由于手机项目中需要用到OpenGL ES的知识,所以这段时间正在研究OpenGL的相关知识.因为OpenGL ES是OpenGL的剪裁版本,所以我直接从OpenGL入手,然后再去看OpenGL E ...

  8. view基础知识介绍(一)

    view基础知识介绍 view是一种界面层的控件的一种抽象 分为view和viewGroup viewGroup继承自view 也就是说view本身可以是单个控件 也可以是一个控件组 例如:一个vie ...

  9. 计算机动画的基础知识是什么,计算机动画历史基础知识介绍课件

    计算机动画历史基础知识介绍课件 早期无神经系统定位症状和体征.抽搐发作和其他不自主运动可见于疾病晚期,并有锥体系和锥体外系症状和体征,包括震颤.肌强直和肢体屈曲等 早期无神经系统定位症状和体征.抽搐发 ...

最新文章

  1. Java项目:学生考勤管理系统(java+SSM+Poi导出+Easyui+JFreeChart+maven+mysql)
  2. android上line-height的问题
  3. 张继平院士:40年北大数学路 | 北大黄金一代是如何培养的
  4. 【Android WebSocket】Android 端 WebSocket 基本用法 ( 下载 Java-WebSocket源码 | 导入 Java-WebSocket-1.5.2 工程作为依赖 )
  5. OA学习笔记-006-SPRING2.5与hibernate3.5整合
  6. Winform datagridview相关操作
  7. npm上传自己的项目
  8. 你可能不太熟知的布局技巧
  9. 【无人机】德国初创企业利用AR障碍训练无人机操作员
  10. [Liferay] Liferay 实现单点登录 - OpenLDAP
  11. C语言动态链表数据结构
  12. 7.8 一阶常系数线性方程
  13. Google Chrome Native Messaging开发实录(二)Chrome Extension扩展
  14. 2020年初全国行政区划矢量数据
  15. 混合高斯模型背景建模原理
  16. 文库/豆丁网等免账号,积分下载器
  17. ssq历史红蓝冷热号回归测试各个期与若干分析周期的中奖率(红号出现3个以上再输出)
  18. Python实现Word文档翻译
  19. PostgreSQL12.2_cn.chm 中文手册 最新版
  20. 精准识别,指静脉智能门锁更好用吗?看先锋亲自体验的结果

热门文章

  1. 电子计算机快速算法,序列产生的快速算法
  2. UPC第41场,第42场部分题解
  3. 车内看车头正不正技巧_最常见的3种车位倒库技巧,以后停车都不是事,建议收藏!...
  4. 【DOTS学习笔记】从第一个Jobs程序入门
  5. Windows 下安装 Ubuntu 双系统
  6. R语言|散点图 ———R语言数据可视化系列(一)
  7. HTML期末大作业—— 游戏网页(5个页面) ~ 全屏游戏美术大赛作品征集网页 HTML+CSS+JS ~ web课程设计网页规划与设计
  8. [08006][17002] io 错误: the network adapter could not establish the connection (connection_id=qdoc1bwg
  9. 使用C#实现DHT磁力搜索的BT种子后端管理程序+数据库设计(开源)
  10. linux命令行怎么结束进程,linux结束进程命令