我爱编程

Hadoop生态下的HBase及Hive数据存储层

2018-06-18  本文已影响214人  liaowenhao

一. Hadoop

1. 特性

Hadoop是Apache开源分布式计算平台.
擅长存储任意的,半结构化的数据,甚至非结构化的数据,用于存储大容量数据,支持在恰当时间存储和获取数据,并对大文件的存储,批量访问和流式访问做了优化.

3. Hadoop与SQL的区别

2. Hadoop2.0版本的主要组件

2. Hadoop的计算及存储架构

Hadoop程序主要是关于数据处理的,运行在一组分布的计算机上.
,分布式计算和分布式存储都采用主从架构.在开发过程中,应该从非分布式的(即本地)模式到单点伪分布式模式,最后到全分布式模式.

4. MapReduce

MapperReduce分两个阶段,mapper将输入进行过滤和转换,reducer负责聚合.中间可能还包括data splitting(数据分割)和shuffling(洗牌),也可定制Partitioning(分组)和Combining(合并).

两个阶段的数据变化情况:
Map:(K1, V1) -> list(K2, V2)
Reduce:(K2, List(V2)) -> List(K3, V3)
Hadoop的RPC框架要求远程方法中的参数都实现Writable接口,进而能够序列化对象并进行远程传输.

各阶段流程图:


mapReduce工作.png

重分区连接时,mapper首先用组键和标签封装每个记录,组键为连接属性,标记为记录的数据源(在SQL术语中为table),在分区和洗牌阶段,相同组键的所有记录被分配到一组,最后,在具有相同组键的数据集上调用Reducer.

Combine()的作用是将所有值都连接成一个单个记录来输出.

BoomFilter是一种集合的紧凑表示法,是一个数据集的摘要,仅支持特定的查询,查询答案存在小概率的误报,但不会漏报.

为了让键值对可以在集群上移动,MapReduce框架提供一种序列化键值对的方法.

4. Streaming

hadoop Streaming API允许通过Unix命令或可执行脚本编程.

Streaming擅长于快速生成一个用于特性分析的MapReduce作业,优势在于处理一次性的查询,不擅于处理频繁执行的任务.

二. Hive

1. 特性

Hive是建立在Hadoop大规模可扩展系统结构之上的数据仓库层,是一种类SQL(HiveQL)数据仓库基础设置.

2. 存储结构

Hive将表作为基本的数据模型.Hive将元数据存储在标准关系数据库中,Hive自带Derby这个开源,轻量,嵌入式的SQL数据库.

不同于关系型数据库在列上使用索引来加速对这些列的查询,Hive使用分区列(partition column)的概念,根据列的值将表划分为多个分区.分区列和常规的数据列是不同的.

Hive使用桶(Bucket)提供对随机样本数据的高效查询,基于对桶列(bucket column)的散列,桶将分区的数据进一步划分为特定数目的文件.

3. 支持的数据类型

TINYINT 单字节整数
SMALLINT 双字节整数
INT 四字节整数
BIGINT 八字节整数
DOUBLE 双精度浮点数
STRING 字符序列

三. HBase

1. 特性

HBase是建立在Hadoop文件系统之上的分布式面向列的,分布式的,持久的,强一致性的数据库.

HBase是一个仿照谷歌的大表结构的数据模型,使用Java编写,可以快速随机访问海量结构化数据,利用了Hadoop的文件系统(HDFS)作为底层存储系统以提供容错能力,达到完全分布式和高可用性.

HBase是一个可扩展的数据存储系统,旨在用于随机读写(访问)结构化数据.
Hadoop只能进行批处理,按照顺序存储的行为访问数据.

只考虑单一的索引,保证行原子性和"读-修改-写"操作.

在进行负载均衡和故障恢复时对客户端是透明的.

2. 存储结构

2.1 列式存储

HBase是按照BigTable模型实现的是一个稀疏的,分布式的,持久的多维排序映射,有行键,列键和时间戳索引.HBase以列式存储的格式在磁盘上存储数据,属于非关系型数据库Not-Only-SQL(NoSQL).

列式存储数据库

以列为单位聚合数据,然后将列值顺序的存入磁盘.
列式存储的出现主要基于这样一种假设:对于特定的查询,不是所有的值都是必须的,尤其在分析型数据库里,
优点是减少I/O,由于列的数据类型相似所以压缩率更高.

2.2 存储单元

最基本的单位是列,一列或多列形成一行,并由唯一的行键(row key)来确定存储.一个表有若干行,
行数据的存取操作是原子的,可以读写任意数目的列.
一行由若干列组成,若干列又构成一个列族(Column Family).一个列族的所有列存储在一个底层的存储文件HFile里.
每一列的值或单元格的值都具有时间戳.

以下为HBase的表结构示例:


HBase的Table结构.png
2.3 存储文件

HFile存储的是经过排序的键值映射结构,文件内部由连续的块组成,块的索引信息存储在文件的尾部.当把HFile打开并加载到内存中时,索引信息会优先加载到内存中,每个块的默认大小是64KB.
每个HFile都有一个块索引,通过一个磁盘查找就可以实现查询.
存储文件通常保存在Hadoop分布式文件系统(HDFS)中,HDFS提供了一个可扩展的,持久的,冗余的HBase存储层.

2.4 存储过程

每次更新数据时,先预写日志(write-ahead log),将数据记录在提交日志(commit log)中,然后才会将这些数据写入内存中的memstore中,一旦内存数据达到最大值,会将这些数据移除内存作为HFile文件刷写到磁盘中.

3. 架构

3.1. Region

HBase中扩展和负载均衡的基本单元称为region.
region本质上以行键排序的连续存储的区间.表中每行数据只由一台服务器所服务,因此具有强一致性.
Region等同于数据库分区中用的范围划分(range partition)

3.2. 架构

HBase中有三个主要组件:客户端库,一台主服务器,多台region服务器,可动态增加和移除region服务器.主服务器主要负责利用Apache ZooKeeper为region服务器分配region.

master服务器负责跨region服务器,对全局region进行负载均衡和集群管理,还提供了元数据的管理操作(例如建表和创建列族).

region服务器负责为他们服务的region提供读写请求,客户端直接与region服务器通信,处理所有数据相关的操作.


Hbase结构.png
3.2. 分区

HBase支持自动分区,分区(Sharding),主要描述了逻辑上水平划分数据的方案.这个方案的特点是将数据份文件或分服务器存储,而不是连续存储.

数据库分区的方式:
范围分区,散列分区,列表分区,符合分区(范围-散列分区,范围-列表分区)

HBase有单机,伪单机,全分布式运行模式.

上一篇 下一篇

猜你喜欢

热点阅读