【大数据|大数据技术思想入门(三)(分布式文件存储的流程)】
如果你不喜欢阅读文字,可以看这篇文章对应的视频:大数据技术思想入门(三):分布式文件存储的流程
进程和 RPC
在上一篇文章中,我们讲解了要解决好大数据集的存储问题,需要引入一个主从结构的集群,其中,主服务器用于存储元数据,从服务器用于存储真正的数据块数据。
在这里,我们还需要了解两点:
- 既然 master 和 slave 服务器要管理存储的服务器,那么,必须在服务器中启动相应的进程,比如在主服务器上需要启动一个管理元数据的进程,在从服务器中需要启动一个管理数据块数据存储的进程。
- master 服务器和 slave 服务器上的进程间的通讯是由 RPC 完成,RPC 本质上就是 Socket,所以在不同服务器上的两个进程间的通讯是由 Socket 完成的,比如 slave 服务器上的进程需要将当前的 slave 机器的元数据通过 Socket 传递给 master 服务器上的进程,这样 master 服务器上的进程才能知道有哪些 slave 服务器,每台服务器的情况是什么样的。
分布式文件存储的流程
假设现在有一个主从集群,从节点有 3 个,每个节点的磁盘容量是 10 TB,每个数据块的大小假设设置为 128 MB,每个数据块备份存储 3 份。
服务器也可以称为节点
接下来我们想将一个大数据集存储到上面的主从集群中,那么这个存储的流程步骤是什么样的呢?为了能讲清楚这个流程步骤,我们假设这个大数据集存储在服务器 A 中,它的大小是 422 MB,我们将这个大数据集存储在文件名为/douma/data/text.txt 的分布式文件中。
相对于分布式主从集群,这里的服务器 A 可以称为客户端 (也就是向主从集群发起请求的节点机器)。
首先,客户端向主节点发起创建文件的请求,这个请求中包含的主要信息是:
- 文件的名称,即 /douma/data/text.txt
- 文件的大小,即 422 MB
主节点上的进程收到这个请求后,会做如下的处理:
- 主节点上的进程收到请求后,就判断这个文件是否已经存在,如果不存在则创建这个文件。
- 根据文件的大小和设置好的每个数据块大小计算这个文件需要切分成多少个数据块,这里的数据块数量等于 422 / 128 = 4 块(向上取整的结果)
- 主节点进程根据现在的所有从节点的磁盘剩余情况,来确定上面计算出来的 4 个数据块及其备份数据块的分别存储在哪些从节点上
主节点做完上面的事情之后,就会将以下的信息告诉客户端:
- 文件需要被切割成 4 个数据块
- 数据块 1 存储在 slave1 上,它的其他两个备份数据块分别存储在 slave2 和 slave3
- 数据块 2 存储在 slave1 上,它的其他两个备份数据块分别存储在 slave3 和 slave4
- 数据块 3 存储在 slave2 上,它的其他两个备份数据块分别存储在 slave1 和 slave3
- 数据块 4 存储在 slave4 上,它的其他两个备份数据块分别存储在 slave2 和 slave3
客户端接到主节点的响应信息后,就将数据切分成数据块,然后将对应的数据块直接写到对应的 slave 节点上,比如数据块 1 的的写入流程是:
- 因为数据块 1 是需要存储在 slave1 上的,所以客户端先和 slave1 建立连接,然后通过 Socket 将数据块的数据传输到 slave1 上进行存储,这个数据块的数据最终存储在 slave1 的磁盘中,当数据块存储好后,需要向主节点报备这个数据块已经在 slave1 上存储好了。
- 当数据块 1 的第一个备份在 slave1 上存储好后,然后将这个数据块拷贝一份通过 Socket 分别传输给 slave2 和 slave3 ,并且向主节点报备这两个备份数据块已经分别在 slave2 和 slave3 上存储好。
- 当数据块所有的备份 (即 3 份) 都存储好后,将成功的结果信息告诉客户端,这样客户端可以关闭数据流,从而结束了分布式文件的存储
分布式文件的读取
以上说的是分布式文件写的流程,接下来,我们看下分布式文件的读取过程。
首先客户端向主节点发起读取请求,请求的信息就是需要读取的文件名称,比如读取文件 /douma/data/text.txt 。
主节点接收到客户端的读取请求后,会做如下的事情:
- 现根据文件名判断这个文件是否存在,如果不存在则直接告诉客户端,说文件不存在
- 文件存在后,则拿到这个文件对应的数据块的元数据信息,包括有多少个数据块,每个数据块存储在哪一台 slave 节点上
主节点将文件对应的数据块的元数据返回给客户端,客户端接收到了这些响应信息后,就分别从对应的 slave 服务器中读取对应的数据块,然后将数据块组合起来就是这个文件的所有数据了。
系统学习大数据技术:大数据高级工程师就业课程
推荐阅读
- Java|Java基础——数组
- 人工智能|干货!人体姿态估计与运动预测
- java简介|Java是什么(Java能用来干什么?)
- Java|规范的打印日志
- Linux|109 个实用 shell 脚本
- 程序员|【高级Java架构师系统学习】毕业一年萌新的Java大厂面经,最新整理
- Python专栏|数据分析的常规流程
- Spring注解驱动第十讲--@Autowired使用
- SqlServer|sql server的UPDLOCK、HOLDLOCK试验
- 读书笔记|《白话大数据和机器学习》学习笔记1