大数据课程——数据仓库Hive、数据库Hbase

数据仓库

  • 数据仓库
    • 数据仓库概念
    • 数据仓库的体系结构
    • 数据库和数据仓库的区别
  • Hive
    • 什么是Hive
    • 为什么用Hive
    • Hive 与传统数据库的对比
    • Hive的外部表和内部表
  • 分布式数据库Hbase
    • 为什么会出现Hbase
    • Hbase的特点
    • Hbase的数据模型
    • Hbase 的功能组件
    • Hbase 的系统架构

数据仓库

数据仓库概念

数据仓库(Data Warehouse)是一个面向主题的(Subject Oriented)、集成的(Integrated)、相对稳定的(Non-Volatile)、反映历史变化(Time Variant)的数据集合,用于支持管理决策

面向主题(数据库和数据仓库核心区别)
数据库是面向事务处理(增删改查)的系统。
对于一个已经存在的数据仓库来说,它一定是有一个或几个主题的。

集成的:
数据仓库不只有关系数据(结构化的数据),也有其他类型的数据(文档类型等)

相对稳定的:
数据库:变化很频繁(增删改查)。
数据仓库:数据存储进入之后,没有删和改操作。

反映历史变化:
数据仓库中的数据均是历史数据,不是正在操作的数据。

数据仓库的体系结构

大数据课程——数据仓库Hive、数据库Hbase_第1张图片
从数据源中拿到数据之后,进行数据存储和管理(ETL),对脏数据进行处理。经过整理好的数据我们成为数据集市,数据集市中的数据我们就可以用来进行数据挖掘来进行我们想要的操作了。最后反映到前端应用中。

数据库和数据仓库的区别

联机事务处理 OLTP(On-Line Transaction Processing):操作性处理(做增删改查),传统的数据库系统作为数据管理的主要手段,主要用于操作型处理。

联机分析处理 OLAP(On-Line Analytical Processing):分析型处理,一般针对某些主题的历史数据进行分析,支持管理决策。

  • 在面向的类型来看:数据库是面向事务的设计,数据仓库是面向主题设计
  • 在存放的数据来看:数据库一般存储业务数据,数据仓库存储的一般是历史数据
  • 从冗余角度来看:数据库设计是尽量避免冗余,一般针对某一业务应用进行设计,比如一张简单的 User 表,记录用户名、密码等简单数据即可,符合业务应用,但是不符合分析。数据仓库在设计时有意引入冗余,依照分析需求,分析维度、分析指标进行设计
  • 数据库是为捕获数据而设计,数据仓库是为分析数据而设计

Hive

什么是Hive

大数据课程——数据仓库Hive、数据库Hbase_第2张图片
Hive是基于Hadoop的一个数据仓库工具,可以将结构化的数据文件映射为一张数据库表,并提供类SQL查询功能。

本质是将SQL语句转换为MapReduce语句。

为什么用Hive

  • Hive 的接口采用类SQL语法,操作简单易上手。
  • 避免了用户直接接触MapReduce,减少人员的开发成本
  • 拥有较为强大的拓展功能。

Hive 与传统数据库的对比

大数据课程——数据仓库Hive、数据库Hbase_第3张图片

Hive的外部表和内部表

  • 内部表数据由Hive自身管理,外部表数据由HDFS管理;
  • 内部表的创建(默认)会存储在一个默认路径下(/user/hive/warehouse).外部表的创建需加关键字(external)、需注明数据存储位置(location ‘’)。
  • 内部表的删除会直同时除元数据(表的删除)和路径下的文件(真实的文件的删除),删除外部表仅仅删除元数据,HDFS上的文件不会被删除。
  • 更改:内部表的修改会直接同步到元数据,对外部表的表结构和分区进行修改后还需要使用MSCK命令修复

不同类型的数据所适合存放的表的类型是不同的:
处理完成的数据需要共享可以放在外部表 增加数据的安全性
数据清洗转换后的结果可以放在内部表 因为hive对内部表支持的功能比较全面

分布式数据库Hbase

Hbase 是一个 高可靠,高性能,面向列,可伸缩分布式数据库
Hbase是谷歌Bigtable 的开源实现,主要用来存储非结构化和半结构化的数据

谷歌 和 hadoop 的底层技术对应关系

大数据课程——数据仓库Hive、数据库Hbase_第4张图片

为什么会出现Hbase

  • HDFS和mapreduce 是高延迟的,而且HDFS是批量访问模式,不是随机访问模式,
  • 传统的关系型数据库 数据量剧增的时候系统拓展性性能会骤降。

为了解决大规模数据的问题,出现了Hbase。

Hbase的特点

  1. 大:可以有数亿行,上百万列。
  2. 面向列 : 面向列的存储和权限控制,列单独检索
  3. 是稀疏的:空(null)的列是不占用存储空间的。

Hbase 和传统关系数据库的对比

  1. 数据类型: 关系数据库采用关系模型,具有丰富的存储类型。但hbase将所有的数据类型都定义为未解释的字符串。
  2. 数据操作:关系数据库有着丰富的操作,有多表连接等。hbase的表与表之间是没有关系的,无较多的复杂操作(只有增加和查询)
  3. 存储模式:关系数据库基于行存储的,hbase是基于列存储的。每个列组由几个文件保存,不同列族的文件是分离的。
  4. 数据索引:关系数据库的索引可以针对不同列构建复杂的索引以提高数据访问性能,hbase只有一个索引——行键。hbase中的所有访问方法都是通过行键来进行的。
  5. 数据维护:关系数据库中的修改操作会替换原来旧值,旧值被覆盖后不存在。Hbase中的修改不会替换旧值,而是生成一个新的版本。
  6. 可伸缩性:关系数据库很难横向扩展(增加新列),纵向拓展也有限(数据规模不能过大),hbase的分布式数据库就是为了灵活的拓展而开发的,可以轻易地通过在集群中增加硬件数量来实现的。

Hbase的数据模型

  • HBase是一个稀疏、多维度、排序的映射表,这张表的索引是行键、列族、列限定符和时间戳
  • 每个值是一个未经解释的字符串,没有数据类型
  • 用户在表中存储数据,每一行都有一个可排序的行键任意多的列
  • 表在水平方向由一个或者多个列族组成,一个列族中可以包含任意多个列,同一个列族里面的数据存储在一起
  • 列族支持动态扩展,可以很轻松地添加一个列族或列,无需预先定义列的数量以及类型,所有列均以字符串形式存储,用户需要自行进行数据类型转换
  • HBase中执行更新操作时,并不会删除数据旧的版本,而是生成一个新的版本,旧有的版本仍然保留(这是和HDFS只允许追加不允许修改的特性相关的)

大数据课程——数据仓库Hive、数据库Hbase_第5张图片
Hbase怎样确定一个单元格?
根据行键、列组、列限定符、时间戳来确定一个单元格(四维坐标)

Hbase 的功能组件

  • 主服务器master负责管理和维护Hbase表的分区信息。维护Region服务器列表,分配Region和负载均衡
  • Region服务器负责存储和维护分配给自己的Region,处理来自客户端的请求。
  • 客户端不是直接在Master中读取数据,而是在Master中获得相应的Region存储位置信息后直接从Region中得到数据
  • 客户端是通过ZooKeeper而不是Master来获得Region位置信息的,所以Master的负载不是很大

一个Hbase表随着表的规模变大,Region也在不断地变多,称为Region的分裂(逻辑上的拆分),分裂的过程是很快的,一个Region只能放在一个服务器上,一个服务器上可以放很多的Region。

表由region存储,region和服务器之间的映射关系在元数据表(.meta文件)中(放于Master中),而当Region很大的时候,元数据表也被分为多个Region,放在元数据表(Root表中),元数据表由ZooKeeper管理,是被写死的。

Hbase 的系统架构

大数据课程——数据仓库Hive、数据库Hbase_第6张图片
客户端:包含访问Hbase的接口,缓存中有着已经访问过的Region信息,用于加快后续访问过程。

Zookeeper服务器:

  • 选出一个Master作为集群总管,保证了任何时刻都有一个Master在运行从而避免了Master的“单点失效”问题。
  • 它本身是一个集群管理工具,被大量的用于分布式计算,提供配置维护、域名服务、分布式同步、组服务等。

Master:
负责表和Region映射的管理工作:

  • 管理表本身的增删改查
  • 不同Region之间的负载均衡
  • Region分裂或合并后,负责重新调整Region的分布
  • 对发生故障失效的Region进行迁移。

Region:

  • 是Hbase中最核心的模块
  • 负责维护分配给自己的Region,响应用户的读写请求。

你可能感兴趣的:(大数据,数据仓库,数据库,大数据,hadoop)