欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

Hive与Hbase

程序员文章站 2022-03-26 20:25:52
文章目录一、Hive1.1 简介1.2 Hive架构1.3 Hive工作原理1.4 Hive优缺点二、Hbase2.1 简介2.2 Hbase架构及原理2.3 Hbase优缺点三、Hive与Hbase两者异同一、Hive1.1 简介  Hive是一个基于数据仓库工具,并提供HQL查询功能,Hive架构在Hadoop之上,底层数据存储在HDFS上,Hive的本质是将SQL语句转换为MapReduce任务运行,使不熟悉 MapReduce 的用户很方便地利用 HQL 处理和计算 HDFS 上的结构化的数据...

一、Hive

1.1 简介

  Hive是一个基于数据仓库工具,并提供HQL查询功能,Hive架构在Hadoop之上,底层数据存储在HDFS上,Hive的本质是将SQL语句转换为MapReduce任务运行,使不熟悉 MapReduce 的用户很方便地利用 HQL 处理和计算 HDFS 上的结构化的数据,适用于离线的批量数据计算。

1.2 Hive架构

Hive架构图
Hive与Hbase

单元名称 操作
用户接口/界面 Hive是一个数据仓库基础工具软件,可以创建用户和HDFS之间互动。用户界面,Hive支持是Hive的Web UI,Hive命令行,HiveHD洞察(在Windows服务器)。
元存储 Hive选择各自的数据库服务器,用以储存表,数据库,列模式或元数据表,它们的数据类型和HDFS映射。
HiveQL处理引擎 HiveQL类似于SQL的查询上Metastore模式信息。这是传统的方式进行MapReduce程序的替代品之一。相反,使用Java编写的MapReduce程序,可以编写为MapReduce工作,并处理它的查询。
执行引擎 HiveQL处理引擎和MapReduce的结合部分是由Hive执行引擎。执行引擎处理查询并产生结果和MapReduce的结果一样。它采用MapReduce方法。
HDFS 或 HBASE Hadoop的分布式文件系统或者HBASE数据存储技术是用于将数据存储到文件系统。

1.3 Hive工作原理

Hive与Hbase

操作
1 Execute Query Hive接口,如命令行或Web UI发送查询驱动程序(任何数据库驱动程序,如JDBC,ODBC等)来执行。
2 Get Plan 在驱动程序帮助下查询编译器,分析查询检查语法和查询计划或查询的要求。
3 Get Metadata 编译器发送元数据请求到Metastore(任何数据库)。
4 Send Metadata Metastore发送元数据,以编译器的响应。
5 Send Plan 编译器检查要求,并重新发送计划给驱动程序。到此为止,查询解析和编译完成。
6 Execute Plan 驱动程序发送的执行计划到执行引擎。
7 Execute Job 在内部,执行作业的过程是一个MapReduce工作。执行引擎发送作业给JobTracker,在名称节点并把它分配作业到TaskTracker,这是在数据节点。在这里,查询执行MapReduce工作。
7.1 Metadata Ops 与此同时,在执行时,执行引擎可以通过Metastore执行元数据操作。
8 Fetch Result 执行引擎接收来自数据节点的结果。
9 Send Results 执行引擎发送这些结果值给驱动程序。
10 Send Results 驱动程序将结果发送给Hive接口。

1.4 Hive优缺点

  • 操作接口采用类SQL语法,提供快速开发的能力(简单、容易上手);
  • 避免了去写MapReduce,减少开发人员的学习成本;
  • 统一的元数据管理,可与impala/spark等共享元数据;
  • 易扩展(HDFS+MapReduce:可以扩展集群规模;支持自定义函数);
  • 数据的离线处理;比如:日志分析,海量结构化数据离线分析…
  • Hive的执行延迟比较高,因此hive常用于数据分析的,对实时性要求不高的场合;
  • Hive优势在于处理大数据,对于处理小数据没有优势,因为Hive的执行延迟比较高。

二、Hbase

2.1 简介

  HBase是建立在Hadoop文件系统之上的分布式列式存储nosql数据库,支持横向扩展的。
  HBase是一个数据模型,类似于谷歌的大表设计,可以提供快速随机访问海量结构化数据。它利用了Hadoop的文件系统(HDFS)提供的容错能力。
  HBase提供对数据的随机实时读/写访问,是Hadoop文件系统的一部分。
  人们可以直接或通过HBase的存储HDFS数据。使用HBase在HDFS读取消费/随机访问数据。 HBase在Hadoop的文件系统之上,并提供了读写访问。

2.2 Hbase架构及原理

Hive与Hbase
  HBase中的每张表都通过键按照一定的范围被分割成多个子表(HRegion),默认一个HRegion超过256M就要被分割成两个,这个过程由HRegionServer管理,而HRegion的分配由HMaster管理,HRegion
  HBase中分布式存储和负载均衡的最小单元。
Store
  每一个HRegion由一个或多个Store组成,至少是一个Store,HBase会把一起访问的数据放在一个Store里面,即为每个ColumnFamily建一个Store,
  如果有几个ColumnFamily,也就有几个Store。一个Store由一个MemStore和0或者多个StoreFile组成。 HBase以Store的大小来判断是否需要切分HRegion。

MemStore
  MemStore 是放在内存里的,保存修改的数据即keyValues。当MemStore的大小达到一个阀值(默认64MB)时,MemStore会被Flush到文件,即生成一个快照。目前HBase会有一个线程来负责MemStore的Flush操作。 
StoreFile
  MemStore内存中的数据写到文件后就是StoreFile,StoreFile底层是以HFile的格式保存。
HFile
  HBase中KeyValue数据的存储格式,是Hadoop的二进制格式文件。 首
HLog
  HLog(WAL log):WAL意为write ahead log,用来做灾难恢复使用,HLog记录数据的所有变更,一旦region server 宕机,就可以从log中进行恢复。

LogFlusher
  定期的将缓存中信息写入到日志文件中

LogRoller 
  对日志文件进行管理维护

2.3 Hbase优缺点

  • 强读写一致,但是不是“最终一致性”的数据存储,这使得它非常适合高速的计算聚合
  • 自动分片,通过Region分散在集群中,当行数增长的时候,Region也会自动的切分和再分配
  • 自动的故障转移
  • Hadoop/HDFS集成,和HDFS开箱即用,不用太麻烦的衔接
  • 丰富的“简洁,高效”API,Thrift/REST API,Java API
  • 块缓存,布隆过滤器,可以高效的列查询优化
  • 操作管理,Hbase提供了内置的web界面来操作,还可以监控JMX指标

三、Hive与Hbase两者异同

限制
  Hive目前不支持更新操作。另外,由于hive在hadoop上运行批量操作,它需要花费很长的时间,通常是几分钟到几个小时才可以获取到查询的结果。Hive必须提供预先定义好的schema将文件和目录映射到列,并且Hive与ACID不兼容。
  HBase查询是通过特定的语言来编写的,这种语言需要重新学习。类SQL的功能可以通过Apache Phonenix实现,但这是以必须提供schema为代价的。另外,Hbase也并不是兼容所有的ACID特性,虽然它支持某些特性。最后但不是最重要的–为了运行Hbase,Zookeeper是必须的,zookeeper是一个用来进行分布式协调的服务,这些服务包括配置服务,维护元信息和命名空间服务。
相同点
  Hive帮助熟悉SQL的人运行MapReduce任务。因为它是JDBC兼容的,同时,它也能够和现存的SQL工具整合在一起。运行Hive查询会花费很长时间,因为它会默认遍历表中所有的数据。虽然有这样的缺点,一次遍历的数据量可以通过Hive的分区机制来控制。分区允许在数据集上运行过滤查询,这些数据集存储在不同的文件夹内,查询的时候只遍历指定文件夹(分区)中的数据。
  HBase通过存储key/value来工作。它支持四种主要的操作:增加或者更新行,查看一个范围内的cell,获取指定的行,删除指定的行、列或者是列的版本。版本信息用来获取历史数据(每一行的历史数据可以被删除,然后通过Hbase compactions就可以释放出空间)。虽然HBase包括表格,但是schema仅仅被表格和列簇所要求,列不需要schema。Hbase的表格包括增加/计数功能。
差异点
  Hive适合用来对一段时间内的数据进行分析查询,Hive不应该用来进行实时的查询。因为它需要很长时间才可以返回结果。
  Hbase非常适合用来进行大数据的实时查询。

本文地址:https://blog.csdn.net/qq_42979842/article/details/107572160

相关标签: 大数据