当前课程知识点:大数据系统基础 > 3.文件存储 > 授课视频 > Video
各位同学好
我是清华大学计算机系的陈康
那么我这个课的内容
是关于分布式文件系统
分布式文件系统
可以说是大数据处理的基础
因为只有数据保存下来之后
才能进行处理
分布式文件系统
我们将从几个方面去进行阐述
那么第一个是我们会回顾一下
本地文件系统的一些相关基本知识
和它处理数据的一些方法
然后我们对分布式文件系统
进行概述
最后我们以一个非常具体的例子
就是Google文件系统
那么分析它如何进行实现
然后同学们在学习的过程当中
要注意这个Google文件系统
是如何进行扩展性
和可靠性方面的考虑的
这一节我们主要讲一下
文件系统的概述
那么第一个首先要回答的问题
就是为什么需要有文件系统
那么我们知道
计算机在处理的时候
那么所有的程序
是放在内存里面的
那么计算是在处理器里面的
但是内存和处理器
这些东西在存储数据的时候
它都是暂时的
只有加电的时候
它的数据才有效
那停电的时候
它的数据就无效了
所以呢
我们需要有一些永久的介质去
保存一些长期的数据
那么的永久的介质就包括
像硬盘 光盘 磁带等
那么这些设备呢
它的接口都会比较复杂
那么我们后边会讲到
它的接口是什么样子的
所以我们需要在这上面
建立一个文件系统
那这个文件系统
对上层应用会比较方便使用
那么这里就是文件系统
存在的理由
那么帮助这个用户
或者是应用程序
去保存它的那个数据
然后在停电的时候
这个数据也可以长期的一个保存
那么这是文件系统
它存在的一个原因
那么第二个呢
我们要看一下文件系统
它的一个基本的概念
叫做名字空间
那么叫NameSpace
那么名字空间是什么意思呢
那么我们可以回顾一下
我们在学操作系统课的时候
也肯定讲过文件系统的一些
相关的知识
那么名字空间就包括了目录数
那么什么是目录数呢
我们可以看一下
在Windows里面
它把所有的目录
例如都是从C盘
或者是从D盘开始的
那么这个目录呢
这个就是所谓的根的一个目录
那么这边在Linux
或者是Iunix操作系统里面
它就更加典型了
那所有的目录数
都是从根开始的
大家注意它们的斜杠的方向
是不一样的
那么从根文件系统开始
那么所有的文件系统
不管它是Windows下面也好
在Linux下面也好
它都是长成一棵目录数的样子
那么一个典型的文件
比如说我们在C盘里面
我们可以看到C盘下面
有一个目录
一般会有一个目录
叫做Windows
装一些操作系统相关的一些文件
那么里面可能会有一个
比如说像notepadexe
这样的一个可执行的程序
那么所有的这些文件
都是在这棵目录上面的叶子界限
上面的
那么访问我这个目录数的话
我们首先需要做的是
从根目录开始
那么一级一级地往下访问
那么在这个离子当中
根目录就是C盘那个目录
那么下一级目录就是Windows
那在Windows这个目录下面的话
它就有一个文件叫notepad
那么这个是Windows的名字空间
那么再举一个
在Linux名字空间的一个例子
那么有很多同学可能会用过
Linux的一个操作系统
那么一般会有
会把你的用户的信息
放到一个叫home的目录下面去
那么这个home的目录呢
它们下面会有一些子目录
比如说有一个用户叫做mike
那mike下面可能会有一个a.txt
有这样的一个文件
那么我们要去访问
这个a.txt的时候
那同样地也是需要从根目录开始
访问第一级子目录
访问第二级子目录
那么最后才能访问到这个文件
所以在文件系统当中
它第一个能够进行操作的
是名字空间的一个操作
那名字空间的操作
实际上大家可以看到
名字空间的操作
实际上就是对这棵树
类似于树的这样一个数据结构的一个操作
那么我们可以看到
在树这样的数据结构当中
我们无非有
比如说我们有给它插入一个结点
删除一个结点
那么在这里的话
无非就是像创建一个文件
创建一个目录
然后在树的数据结构上面
有一个非常典型的一个
操作就是树的遍历
那么在这里呢
那么我们可以在文件里面
树的遍历可以被表达成为
一种对于某一棵子树下面的
所有的结点的列出
那么这个就是列目录
这样的一个操作
某一个目录下面所有的文件
都给它列出来
或者是它的子目录都可以列出来
那么这个也就是在
名字空间这棵树上的一些操作
那么这是关于名字空间的
一些操作的相关的一些概念
然后最后一部分呢
文件系统有一个最重要的功能
它是需要支持文件的这个读写的
那么支持文件读写的话
在所有的文件系统当中
大概会集中这么一些
相关的一些函数
那么函数的名字可能不一样
但是都会有提供类似的
那么比如说像open
那么这是打开一个文件
那么read
那么这是从文件里面读一个数据
write
那么往文件里面写一个数据
那么最后是close
把这个文件给关掉
咱们稍微看一下
这几个函数
分别是干一些什么样一些内容
那么比如说open
那么open实际上
它是去打开一个文件
那么打开文件它实际上
是在操作系统的内核里面
记录一下打开这个事件
并且
它有一个非常重要的一个操作
就是把文件上它的一个offset
就是它的偏移置为0的位置
这样的话
一般来说的话
它会把偏移置到0的位置
或者说你在open的时候
可以直接说
我要把偏移位置置到
整个文件的结尾
这也是可以的
那么所以呢
在open的时候
最重要的是
置这个offset这个位置
并且在内核数据结构里面
把打开文件这件事情给它记下来
就相当于有一个数据结构
去记录当前文件已经操作到
什么位置了
好 那是open的一个操作
那么相对应的
对于close这个操作来说的话
那么它最重要的工作
实际上它就是把
内核的这个数据结构
从内核里面删除掉
否则的话
大家可以想象
如果我一直打开文件
不去把它关闭的话
那这就会浪费大量的内存空间
去维护所有打开文件的
一些状态的一些信息
这样的话
会很快会充满了一个内存
就造成内存的泄露
造成系统不能执行
所以一般来说
大家使用内核资源的时候
特别是
像使用文件这种资源的时候
有一个open的操作
那必须要有一个close的操作
作一个对应
这样的话
能够避免内存的一些泄露
保证资源的使用
那么read和write
当然是大家用得是最多的
那么read的话
就会从offset这个位置开始
读一些size大小的一个数据
到一个用户的一个缓冲区
那么这是文件的读的操作
那么write操作的话
那必须要提供一个缓冲区
并且指出这个缓冲区的大小
要把这一部分的数据
可以写到文件里面
那么这个是文件系统
大概我们能够看到的一些
有关的一些基本概念
那包括两个部分
那一个是namespace
它的名字空间的一个操作
另外一个是
它是对于数据的一个操作
-授课视频
--什么是大数据
--大数据典型应用
--大数据的特点
--大数据技术体系
--大数据生态系统
--大数据技术挑战
--课程内容
-1. 绪论--Quiz 1
-授课视频
--2.2并行化理念
--2.9计算虚拟化
-2.云计算--Quiz 2
-授课视频
--Video
--Video
--Video
--Video
--Video
--Video
--Video
--Video
--Video
--Video
--Video
--Video
--Video
--Video
--Video
--Video
-3.文件存储--Quiz3
-授课视频
--4.13类似框架
--4.14章节总结
-4. 处理框架--Quiz4
-授课视频
-5.内存计算--Quiz5
-授课视频
--数据副本及一致性
--节点本地数据存储
-6. NoSQL--Quiz6
-授课视屏
--Video
--Video
--Video
--Video
--Video
--Video
--Video
--Video
--Video
--Video
-7. 流计算--Quiz7