MySQL,HDFS,HBase相似之处
来源:互联网 发布:crt结束tomcat端口 编辑:程序博客网 时间:2024/06/16 22:48
这几天一直在看MySQL底层的一些东西,看到最后,越来越觉得MySQL,HBase,HDFS之间有很多相似的地方,所以在这里来记录这些相似之处,和大家一起学习。
1. 预写日志
- 在MySQL Innodb中,有Redo日志和二进制日志。当我们进行数据库更改的时候,更改的操作会记录在Redo日志中,同时也会记录在二进制日志中。Redo日志主要保证了事务的持久性,以后可以通过回放Redo中的修改操作,来进行数据的修复。Redo日志主要记录了对页的物理修改。
- 在HDFS中,如果我们有修改操作的话,首先,我们会通过RPC来访问NameNode,那么这次操作会先记录在Edits Log中,然后在对NameNode 内存中的文件系统或者文件元数据进行修改。这里每次修改操作都会先记录在Edits Log中,然后才会去内存中进行修改操作。
- 在HBase中,有预写日志(WAL),每个RegionServer共享一个WAL,每次进行修改操作的时候,会首先把该操作记录到WAL中去,然后再去memstore中进行数据的修改操作,只有这样,才算一次修改完成。
2. Hadoop HDFS HA(高可用性)和MySQL双主复制
- 我们知道,Hadoop 2.0中HDFS引入了HA(高可用性),即一个集群中有两个NameNode,Active NameNode和StandBy NameNode,只有Active NameNode 向外进行服务。Active NameNode和StandBy NameNode中的内存中文件系统和文件元数据是一样的。当Active NameNode中的Edits Log内容增加时,其会把增加的内容写到一些叫做Journal Node节点上,Standby NameNode监测到Edits Log变化的时候,就会得到增加的内容记录到自己的日志中。
- 而上面很类似MySQL中的双主复制,即有两个节点,双方互相对方的主库。只要有一个变化,另外一个节点就会监测对方的二进制文件改变了,就会将对方的修改的二进制文件内容复制到自己的relay log中,然后进行回放操作。
3. HBase MemStore,BlockCatch和MySQL 缓冲池
- 在HBase集群的每个节点上,每个列族都会有一个MemStore和BlockCatch,他们在一个堆中。当我们进行数据的Put操作时,会先将该操作记录中WAL中,然后将该数据写入到MemStore中,当MemStore满了时,会刷写到磁盘上,形成一个HFile文件。而当我们进行数据的读取的时候,BlockCatch用于缓存我们读取到的数据,是以Block问单位读取的,HFile在物理上以Block进行存放的。读取的访问的顺序是MemStore中的修改队列,然后是BlockCatch,如果没有的话,就从物理上面访问对应的HFile.
- 在MySQL中,为了缓和CPU到磁盘的速度不匹配问题,引入了缓冲池。缓冲池是内存的一块区域,其中包括了Free List , LRU List,Flush List。我们知道,MySQL Innodb是以页进行数据存放的,所以在Free List,LRU List,Flush List都是以页为单位工作的。当我们从磁盘读取页的时候,首先会从Free List进行页的申请,如果没有空间的话,就会从LRU List中替换相应的页。Flush List中都是要进行刷写到磁盘上面的脏页。
4. MySQL Innodb LSN,HDFS 事务ID,HBse序列号
- 在MySQL中,LSN表示日志序列号,刷写到Redo 日志中的日志量,以字节为单位,比如现在的LSN是1000,事务1刷写了100字节的重做日志,事务2刷写了300字节的重做日志,那现在的LSN就是1400.每次CheckPoint都有相应的LSN,每次回复CheckPoint的LSN到最新的LSN之间的操作。
- HDFS中的事务ID号。我们每次在HDFS文件中的修改操作,都是通过一次RPC请求进行操作。NameNode在接受到该操作之后,会把该操作记录到EditsLog中去。我们往EditsLog中进行写入的时候,其实这个操作就是一个事务。所以,每次这样的事务操作都有一个全局唯一的事务ID号,并且该事务ID号是单调递增的。你可以在本地磁盘上面看到edits_000000000000001-000000000000007.这样的文件,其实其中的00000000001-00000000007就是事务的ID号,表示写到editslog文件中的操作。同时,你也可以看到fsimage_000000000000007这样的文件,这表示已经进行刷写数据的FSiamge文件,表示00000000007之前的操作后的数据已经进行刷写到磁盘进行持久化了。这就类似于Mysql中的CheckPoint.每次只需要进行持久到磁盘的事务ID——最新的EditLogs中的事务ID之间的操作就行了,进行恢复。
- 在HBase中,也有序列号,其类似上面的操作。
现在还有好多地方没有深入的了解,上面写的这些只是我现在的一些想法,可能有些地方写到不是完全正确,如果有什么错误,希望大家可以提出。我们一起进步。
0 0
- MySQL,HDFS,HBase相似之处
- 【HBase基础教程】7、HBase之读取HBase数据写入HDFS
- mysql 导入hdfs、hive、hbase sqoop使用方法
- 有些相似之处
- sqoop:mysql和Hbase/Hive/Hdfs之间相互导入数据
- Sqoop实现MySql/Oracle与Hdfs/Hbase互导数据
- sqoop1.4.6实现Mysql与HDFS/Hbase的数据迁移
- Sqoop实现MySql/Oracle与Hdfs/Hbase互导数据
- mysql && hbase && hive && hdfs(部分) 数据互导
- 利用Sqoop将MySQL海量测试数据导入HDFS和HBase
- hbase,hdfs 数据一致性
- HDFS HBase JAVA编程
- HBASE 与 HDFS
- hbase+flume+hdfs整合
- HDFS+MapReduce+HBase整合
- HDFS和hbase
- HDFS+MapReduce+Hbase+Hive
- 读取HDFS写入HBase
- html5+servlet文件上传
- 浮点数的二进制表示(IEEE 754标准)
- K-L变换实现图像压缩
- centos 中英文输入法切换
- 悲观锁与乐观锁
- MySQL,HDFS,HBase相似之处
- vscode编辑器插件总结
- Android 一个改善的okHttp封装库
- C语言的组成及一些基本术语概念
- 音视频开发术语介绍
- 位运算常用技巧
- VM虚拟机 系统出现鼠标定位不准确、双鼠标问题
- windows下"8080"端口被占用解决办法
- Video Analysis相关领域介绍之Action Recognition(行为识别)