数仓知识11:Hadoop生态及Hive、HBase、Impala、HDFS之间的关系

Hive、HBase、Impala、HDFS是Hadoop生态体系中常用的开源产品,各个产品间是一个什么样的关系,许多人都搞不清楚,本文将进行研究分析。

Hadoop生态

在了解Hive、HBase、Impala、和HDFS之前,先熟悉一下Hadoop的生态。

Apache Hadoop软件库是一个框架,允许使用简单的编程模型在计算机集群之间对大型数据集进行分布式处理。它旨在从单个服务器扩展到数千台计算机,每台计算机都提供本地计算和存储。库本身不是依靠硬件来提供高可用性,而是旨在检测和处理应用程序层的故障,因此在计算机群集(每台计算机都可能容易出现故障)之上提供高可用性服务。

适用场景:离线数据开发与存储

数仓知识11:Hadoop生态及Hive、HBase、Impala、HDFS之间的关系_第1张图片

数据获取(Data Ingestion) Sqoop、Flume
Hadoop 核心(Hadoop Core)
  • Hadoop分布式文件系统:HDFS
  • 集群资源管理:YARN
  • 数据处理(Data processing):MapReduce 和 Spark

数据分析(Data Analysis) Pig、Impala、Hive
工作流系统(Workflow system) Oozie
NoSQL HBase

HDFS

HDFS的英文全称是Hadoop Distributed File System,即Hadoop分布式文件系统,它是Hadoop的核心子项目。HDFS被设计成适合运行在通用和廉价硬件上的分布式文件系统。HDFS是为了处理大型数据集而设计的,主要是为达到高的数据吞吐量而设计的,延迟时间通常是在分钟乃至小时级别。

适用场景:作为数据的底层存储,以高可用的方式存储大文件

优势 劣势or局限性
  • 适合存储超大文件(GB、TB乃至PB大小);
  • 对硬件要求低,适合运行于低廉的商用硬件集群上;
  • 多个副本存储数据,具备高容错性和高可靠性;
  • 读取整个数据集比读取单条记录会更加高效。
  • 不适合低延迟数据访问;
  • 无法高效存储大量小文件;
  • 不支持多用户写入和随机文件修改(只能增删、不支持改)。

MapReduce

MapReduce是Google公司的核心计算模型,它将运行于大规模集群上的复杂并行计算过程高度地抽象为两个函数:Map和Reduce。Hadoop是Doug Cutting受到Google发表的关于MapReduce的论文的启发而开发出来的。Hadoop中的MapReduce是一个使用简单的软件框架,基于它写出来的应用程序能够运行在由上千个商用机器组成的大型集群上,并能可靠容错地并行处理TB级别的数据集。

适用场景:对响应时间要求低的大数据量计算

优势 劣势or局限性
  • 易于编程,可快速地完成一个分布式程序的开发;
  • 良好的扩展性,计算性能可随节点数增长保持近似于线性的增长;
  • 高容错性,节点宕机时,计算任务可以自动转移至其他节点运行;
  • 要求用户有java编程能力;
  • MapReduce无法像Oracle或者MySQL那样在毫秒或者秒级内返回结果;
  • MapReduce的输入数据集是静态的,不能动态变化,所以不能用于流计算;
  • 每个MapReduce作业的输出结果都会写入磁盘;

Hive

Hive 是一个构建于 Hadoop 顶层的数据仓库工具,支持对接查询存储在HDFS、HBase中文件,具有良好的可扩展性。某种程度上可以看作是用户编程接口,本身不存储和处理数据。实际的数据保存在HDFS文件中,真正的计算和执行则由MapReduce完成(也可以通过 Apache Tez、Apache Spark执行查询)。Hive 定义了简单的类似 SQL 的查询语言——Hive SQL,用户通过编写的 Hive SQL 语句运行 MapReduce 任务,其许多语法兼容Oracle、DB2、MySQL、SQL Server等,所以用户在某些场景下用户可以快速将构建在关系数据库上的数据仓库应用程序移植到 Hadoop 平台上。

关于分区:Hive Select查询时,一般会扫描整个表内容。随着系统运行的时间越来越长,表的数据量越来越大,而hive查询做全表扫描,会消耗很多时间,降低效率。而有时候,我们需求的数据只需要扫描表中的一部分数据即可。这样,hive在建表时引入了分区(partition)概念。即在建表时,将整个表存储在不同的子目录中,每一个子目录对应一个分区。在查询时,我们就可以指定分区查询,避免了hive做全表扫描,从而提高查询效率。

原理:Hive是建立在Hadoop体系架构上的一层SQL抽象,使得数据相关人员使用他们最为熟悉的SQL语言就可以进行海量数据的处理、分析和统计工作,而不是必须掌握Java等编程语言和具备开发MapReduce程序的能力。Hive SQL实际上先被SQL解析器进行解析然后被Hive框架解析成一个MapReduce可执行计划,并按照该计划生成MapReduce任务后交给Hadoop集群处理的。

数仓知识11:Hadoop生态及Hive、HBase、Impala、HDFS之间的关系_第2张图片

注意:Hive 并不是一个关系数据库。Hive 中没有定义专门的数据格式,需要由用户指定三个属性:列分隔符、行分隔符 、读取文件数据的方法(Hive 中默认有三个文件格式 TextFile,SequenceFile 以及 ORCFile)。Hive 在查询数据的时候,由于没有索引,需要扫描整个表Hive SQL,因此延迟较高;另外一个导致 Hive 执行延迟高的因素是 MapReduce 框架,由于 MapReduce 本身具有较高的延迟,因此在利用 MapReduce 执行 Hive 查询时,也会有较高的延迟(相对的,数据库的执行延迟较低,当然,这个低是有条件的,即数据规模较小,当数据规模大到超过数据库的处理能力的时候,Hive 的并行计算显然能体现出优势)。

适用场景:长时间的批处理查询分析

优势 劣势or局限性

高吞吐,可以很好地处理不变的大规模数据集

高延迟,延迟时间通常是在分钟乃至小时级别

Hive不支持行级数据插入、更新和删除,也不支持事务等(原因是其底层基于HDFS)

Hive不能提供数据排序和查询缓存功能,也不提供在线事务处理,更不提供实时的查询和记录级的更新

Hbase

HBase是一个开源的、分布式的、持久的、强一致性的数据存储系统(NoSQL数据库),可以在HDFS或Alluxio(VDFS)之上运行,具有近似最优的写性能和出色的读性能,主要适用于海量明细数据(十亿、百亿)的随机实时查询,如日志明细、交易清单、轨迹行为等,此开源项目的目标是在商品硬件集群上托管非常大的表——数十亿行X数百万列。

  1. HBase不是关系型数据库,而是一个在HDFS上开发的面向列的分布式数据库,不支持SQL。 
  2. HBase为查询而生的,它通过组织起节点内所有机器的内存,提供一個超大的内存Hash表 。
  3. HBase是物理表,不是逻辑表,提供一个超大的内存hash表,搜索引擎通过它来存储索引,方便查询操作。 
  4. HBase是列存储。 

对于那些有低延时要求的应用程序,HBase是一个好的选择,尤其适用于对海量数据集进行访问并要求毫秒级响应时间的情况,但HBase的设计是对单行或者少量数据集的访问,对HBase的访问必须提供主键或者主键范围。访问接口:Hive、Pig、REST Gateway、HBase Shell、Native Java API、Thrift Gateway

适用场景:对具有高吞吐量和低输入/输出延迟的大型数据集进行快速读写操作

优势 劣势or局限性
  • 存储容量大,一个表可以容纳上亿行,上百万列;
  • 支持线性和模块化扩展,负载高时,可通过简单的添加机器来实现水平切分扩展;
  • 服务器故障自动转移;
  • 可通过版本进行检索,能搜到所需的历史版本数据。
  • 不能支持条件查询,只支持按照row key来查询;
  • 不直接支持 SQL 的语句查询,函数、关联、触发器等等都不支持;
  • 占用内存很大,且鉴于建立在为批量分析而优化的HDFS上,导致读取性能不高;
  • API相比其它 NoSql 的相对笨拙。

Impala

Impala可以直接对接存储在HDFS、HBase 或亚马逊S3中的Hadoop数据,提供快速、交互式的 SQL 查询,提高 APACHE Hadoop 上的SQL查询性能。Impala 使用与 Hive 相同的元数据、SQL 语法(Hive SQL)、ODBC 驱动程序和用户界面(Hue Beeswax),因此,Hive用户只需很少的设置成本,即可使用Impala。

原理:为了避免延迟,Impala绕过MapReduce,通过一个专门的分布式查询引擎直接访问数据,该引擎与商业并行RDBMS中的查询引擎非常相似。结果是性能比 Hive 快几个数量级,具体取决于查询类型和配置。

Impala 是对大数据查询工具的补充。Impala不会取代在MapReduce上构建的批处理框架(例如Hive)。Impala 可以读取和写入 Hive 表,从而使用 Impala 实现简单的数据交换,从而对 Hive 生成的数据进行分析。

注:安装impala的话,必须先安装hive,保证hive安装成功,并且还需要启动hive的metastore服务。

适用场景:大数据实时交互式 SQL 查询

优点 劣势or局限性
  • 基于内存运算,不需要把中间结果写入磁盘,省掉了大量的I/O开销;
  • 无需转换为Mapreduce,直接访问存储在HDFS,HBase中的数据进行作业调度,速度快;
  • 使用了支持Data locality的I/O调度机制,尽可能地将数据和计算分配在同一台机器上进行,减少了网络开销;
  • 支持各种文件格式,如TEXTFILE 、SEQUENCEFILE 、RCFile、Parquet;
  • 可以访问hive的metastore,对hive数据直接做数据分析。
  • 对内存的依赖大,且完全依赖于HIVE;
  • 实践中,分区超过1万,性能严重下降;
  • 只能读取文本文件,而不能直接读取自定义二进制文件;
  • 每当新的记录/文件被添加到HDFS中的数据目录时,该表需要被刷新;

分析总结

基于以上的研究,对Hive、HBase、Impala、HDFS之间的关系做一个简单的分析总结:

  1. Hive的使用虽然和关系型数据库类似,但是其本质上是建立在Hadoop体系架构上的一层SQL抽象,自身不存储和处理数据,实际数据保存在HDFS文件中,真正的计算和执行则由MapReduce完成;
  2. Impala是Hive的补充,可以读取和写入 Hive 表,依赖Hive的元数据,自身不存储数据。Impala提供的有一个分布式查询引擎;
  3. HBase是列存储的NoSQL数据库,主要提供接口的形式与外界交互,数据保存在HDFS上,也支持使用Hive直接访问HBase;
  4. HDFS是Hadoop生态最底层的存储,Hive、Impala、HBase都建立在HDFS之上。

以下参考资料:

官方介绍:

  • Apache Hadoop
  • Apache Hive
  • Home - Apache Hive - Apache Software Foundation
  • Hive HPL/SQL - Apache Hive - Apache Software Foundation
  • DeveloperGuide - Apache Hive - Apache Software Foundation
  • Apache HBase – Apache HBase™ Home
  • Apache HBase ™ Reference Guide
  • Apache HBase - Wikipedia
  • Impala (apache.org)
  • Introducing Apache Impala

书籍:

  • 《离线和实时大数据开发实战》-朱松岭
  • 《HBase权威指南》

其他文章:

  • Hadoop, HDFS, Hive, Hbase, Impala 之间的关系 - levi125 - 博客园 (cnblogs.com)
  • Impala入门学习与使用详解_皮哥四月红的博客-CSDN博客
  • Hive、Spark、Impala原理阅读笔记 (icode9.com)
  • 大数据之Impala - 走看看 (zoukankan.com)
  • Hbase和Hive区别和联系_KK凯凯的博客-CSDN博客_hbase和hive的区别和联系
  • MongoDB、HBase、Redis 等 NoSQL 优劣势、应用场景 - 知乎 (zhihu.com)
  • HBase的面试八股 (51gcrc.com)
  • Hive分区介绍_weixin_42232931的博客-CSDN博客_hive 分区
  • 什么是hive的静态分区和动态分区,hive动态分区详解_鲁边的博客-CSDN博客_hive 动态分区严格模式
  • 高效辨别Hive的静态和动态分区_糖潮丽子的博客-CSDN博客

 写作不易,如果读完以后觉得有帮助,欢迎点赞和收藏!

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