目录
Google三驾马车
GFS
- 可扩展的大型数据密集型应用的分布式文件系统
百度百科:https://baike.baidu.com/item/GFS/1813072
MapReduce
- 超大集群的简单数据处理、大数据并行处理技术
百度百科:https://baike.baidu.com/item/MapReduce - 矢量编程语言:
如:Matlab,矢量(向量)操作,避免for循环。联想map映射过程,map是对列表中每个元素做计算(具体的计算通过传入的函数来实现)。 - 函数式编程:https://baike.baidu.com/item/函数式编程
接收函数作为参数。不修改变量,无需考虑死锁。联想reduce合并过程,reduce是对列表中每个元素做迭代计算。 - 备注:Map面对的是杂乱无章的互不相关的数据,它解析每个数据,从中提取出key和value,也就是提取了数据的特征。经过MapReduce的Shuffle阶段之后,在Reduce阶段看到的都是已经归纳好的数据了,在此基础上我们可以做进一步的处理以便得到结果。
BigTable
- 结构化数据的分布式存储系统
百度百科:https://baike.baidu.com/item/BigTable
HBase(CP而非AP)
HBase是分布式的、面向列的开源数据库,是BigTable的实现。
百度百科:https://baike.baidu.com/item/HBase/7670213?fr=aladdin
基础概念
- hMaster
- zooKeeper
- regionServer
- region
一行数据只在一个region上,没有副本。
其在faceBook分支下2T大小,阿里分支下64G大小。 - root and metaTable
- compact and split
数据模型
- table(联想mysql的表)
- rowKey(联想mysql的行主键)
- region(区域,联想mysql多行集合)
当Table随着记录数不断增加而变大后,会逐渐分裂成多份splits,成为regions,一个region由[startkey,endkey)表示。
不同region会被Master分配给相应RegionServer进行管理。 - store(column family、列族,联想列集合,列以类聚)
- Qualifier(column、列)
- time stamp(时间戳,数据版本标识)
- cell(单元数据,由rowKey、column family+column、time stamp唯一确定)
- Key Type(Put/Delete)
- block
Data Block是hBase I/O的基本单元,为了提高效率,HRegionServer中有基于LRU的Block Cache机制。每个Data块的大小可以在创建一个Table的时候通过参数指定,大号的Block有利于顺序Scan,小号Block利于随机查询。
hBase上RegionServer的cache主要分为两个部分,分别是memStore&blockCache,其中memStore主要用于写缓存,而blockCache用于读缓存。 - magic
每个Data块除了开头的Magic以外就是一个个KeyValue对拼接而成, Magic内容就是一些随机数字,目的是防止数据损坏。
系统架构
- zooKeeper
Zookeeper Quorum中除了存储了-ROOT-表的地址和HMaster的地址,HRegionServer也会把自己以Ephemeral方式注册到Zookeeper中,使得HMaster可以随时感知到各个HRegionServer的健康状态。 - hMaster
HMaster没有单点问题,HBase中可以启动多个HMaster,通过Zookeeper的Master Election机制保证总有一个Master运行,HMaster在功能上主要负责Table和Region的管理工作 - hRegionServer
一个regionServer上共用一个hLog。
HRegionServer主要负责响应用户I/O请求,向HDFS文件系统中读写数据,是HBase中最核心的模块。 - hRegion
一个hRegionServer内部管理多个hRegion对象。
hRegion对应table中的region的存储。
一个hRegion由多个hStore组成。
hStore对应table中的column family的存储。
每个column family是一个集中的存储单元,相同IO特性的column应该放到一个column family中,读写更高效。 - hStore
hStore作为hBase存储的核心,由两部分组成。
分别是:memStore和storeFiles。
MemStore是Sorted Memory Buffer,用户写入的数据首先会放入MemStore,当MemStore满了以后会Flush成一个StoreFile(底层实现是HFile)。
当StoreFile文件数量增长到一定阈值,会触发Compact合并操作,将多个StoreFiles合并成一个StoreFile,合并过程中会进行版本合并和数据删除,因此可以看出HBase其实只有增加数据,所有的更新和删除操作都是在后续的compact过程中进行的,这使得用户的写操作只要进入内存中就可以立即返回,保证了HBase I/O的高性能。
当StoreFiles Compact后,会逐步形成越来越大的StoreFile,当单个StoreFile大小超过一定阈值后,会触发Split操作,同时把当前Region Split成2个Region,父Region会下线,新Split出的2个孩子Region会被hMaster分配到相应的HRegionServer上,使得原先1个Region的压力得以分流到2个Region上。 - hLog
WAL:write ahead log
WAL默认在HDFS上有3份副本。
特性(原子性、一致性、独立性、持久性、可见性)
- 水平线性扩展性
性能和存储随着节点的增加而增加。 - 强一致性
读写一致性(读、写两阶段) - 原子和可配置的切分表
- 自动容错
- 方便的运行map reduce
- 容易使用Java API
- 可满足实时读写响应(读命中缓存1毫秒,随机读几十毫秒,写2到3毫秒)
- 可扩展接口
理解
- 不严格的说,hBase是针对HDFS的一层包装。Hive是针对mapReducer的包装。
hBase是数据库。
Hive是数据仓库。数据仓库系统的主要应用主要是OLAP(On-Line Analytical Processing),支持复杂的分析操作,侧重决策支持,并且提供直观易懂的查询结果。