分布式文件系统KFS基础知识介绍
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基础知识介绍相关推荐
- UICC 之 USIM 详解全系列——UICC基础知识介绍
本人就职于国际知名终端厂商,负责modem芯片研发. 在5G早期负责终端数据业务层.核心网相关的开发工作,目前牵头6G算力网络技术标准研究. UICC 之 USIM 详解全系列--UICC(TS102 ...
- 云基础知识介绍及云组件部署
云基础知识介绍及云组件部署 序言 随着业务的发展,各类业务都有上云的需求,大家在工作中也会经常遇到各类公有云的场景,其实各大厂商的公有云功能都大相径庭.相信很多人有疑问,如何在公有云上部署相关云组件和 ...
- 代理服务器基础知识介绍及防火墙知识普及
代理服务器基础知识介绍及防火墙知识普及 2004-10-17 作者:佚名 来源:诗凌工作室 代理服务器基础知识介绍: Internet大家已经不在陌生,现在已经迈进了广大工薪阶层的家庭. ...
- NLP汉语自然语言处理入门基础知识介绍
NLP汉语自然语言处理入门基础知识介绍 自然语言处理定义: 自然语言处理是一门计算机科学.人工智能以及语言学的交叉学科.虽然语言只是人工智能的一部分(人工智能还包括计算机视觉等),但它是非常独特的一部 ...
- 【 MATLAB 】逆离散余弦变换(idct)的基础知识介绍
基础知识介绍 逆离散余弦变换从离散余弦变换 (DCT) 系数中重建序列.idct 函数是 dct 函数的逆. The DCT has four standard variants. For a tra ...
- 视频编解码的理论和实践1:基础知识介绍
近几年,视频编解码技术在理论及应用方面都取得了重大的进展,越来越多的人想要了解编解码技术.因此,网易云信研发工程师为大家进行了归纳梳理,从理论及实践两个方面简单介绍视频编解码技术. 相关阅读推荐 &l ...
- OpenGL开发之旅基础知识介绍
最近由于手机项目中需要用到OpenGL ES的知识,所以这段时间正在研究OpenGL的相关知识.因为OpenGL ES是OpenGL的剪裁版本,所以我直接从OpenGL入手,然后再去看OpenGL E ...
- view基础知识介绍(一)
view基础知识介绍 view是一种界面层的控件的一种抽象 分为view和viewGroup viewGroup继承自view 也就是说view本身可以是单个控件 也可以是一个控件组 例如:一个vie ...
- 计算机动画的基础知识是什么,计算机动画历史基础知识介绍课件
计算机动画历史基础知识介绍课件 早期无神经系统定位症状和体征.抽搐发作和其他不自主运动可见于疾病晚期,并有锥体系和锥体外系症状和体征,包括震颤.肌强直和肢体屈曲等 早期无神经系统定位症状和体征.抽搐发 ...
最新文章
- Java项目:学生考勤管理系统(java+SSM+Poi导出+Easyui+JFreeChart+maven+mysql)
- android上line-height的问题
- 张继平院士:40年北大数学路 | 北大黄金一代是如何培养的
- 【Android WebSocket】Android 端 WebSocket 基本用法 ( 下载 Java-WebSocket源码 | 导入 Java-WebSocket-1.5.2 工程作为依赖 )
- OA学习笔记-006-SPRING2.5与hibernate3.5整合
- Winform datagridview相关操作
- npm上传自己的项目
- 你可能不太熟知的布局技巧
- 【无人机】德国初创企业利用AR障碍训练无人机操作员
- [Liferay] Liferay 实现单点登录 - OpenLDAP
- C语言动态链表数据结构
- 7.8 一阶常系数线性方程
- Google Chrome Native Messaging开发实录(二)Chrome Extension扩展
- 2020年初全国行政区划矢量数据
- 混合高斯模型背景建模原理
- 文库/豆丁网等免账号,积分下载器
- ssq历史红蓝冷热号回归测试各个期与若干分析周期的中奖率(红号出现3个以上再输出)
- Python实现Word文档翻译
- PostgreSQL12.2_cn.chm 中文手册 最新版
- 精准识别,指静脉智能门锁更好用吗?看先锋亲自体验的结果
热门文章
- 电子计算机快速算法,序列产生的快速算法
- UPC第41场,第42场部分题解
- 车内看车头正不正技巧_最常见的3种车位倒库技巧,以后停车都不是事,建议收藏!...
- 【DOTS学习笔记】从第一个Jobs程序入门
- Windows 下安装 Ubuntu 双系统
- R语言|散点图 ———R语言数据可视化系列(一)
- HTML期末大作业—— 游戏网页(5个页面) ~ 全屏游戏美术大赛作品征集网页 HTML+CSS+JS ~ web课程设计网页规划与设计
- [08006][17002] io 错误: the network adapter could not establish the connection (connection_id=qdoc1bwg
- 使用C#实现DHT磁力搜索的BT种子后端管理程序+数据库设计(开源)
- linux命令行怎么结束进程,linux结束进程命令