热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Hadoop生态及Hive、HBase、Impala、HDFS之间的关系

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

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


Hadoop生态

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

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

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


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

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

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集群处理的。

注意: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博客

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


推荐阅读
  • 【转】腾讯分析系统架构解析
    TA(TencentAnalytics,腾讯分析)是一款面向第三方站长的免费网站分析系统,在数据稳定性、及时性方面广受站长好评,其秒级的实时数据更新频率也获得业界的认可。本文将从实 ... [详细]
  • 一、Hadoop来历Hadoop的思想来源于Google在做搜索引擎的时候出现一个很大的问题就是这么多网页我如何才能以最快的速度来搜索到,由于这个问题Google发明 ... [详细]
  • Java工程师书单(初级,中级,高级)
    简介怎样学习才能从一名Java初级程序员成长为一名合格的架构师,或者说一名合格的架构师应该有怎样的技术知识体系,这是不仅一个刚刚踏入职场的初级程序员也是工作一两年之后开始迷茫的程序 ... [详细]
  • 你知道Kafka和Redis的各自优缺点吗?一文带你优化选择,不走弯路 ... [详细]
  • 本文介绍了在Windows环境下如何配置php+apache环境,包括下载php7和apache2.4、安装vc2015运行时环境、启动php7和apache2.4等步骤。希望对需要搭建php7环境的读者有一定的参考价值。摘要长度为169字。 ... [详细]
  • 如何提高PHP编程技能及推荐高级教程
    本文介绍了如何提高PHP编程技能的方法,推荐了一些高级教程。学习任何一种编程语言都需要长期的坚持和不懈的努力,本文提醒读者要有足够的耐心和时间投入。通过实践操作学习,可以更好地理解和掌握PHP语言的特异性,特别是单引号和双引号的用法。同时,本文也指出了只走马观花看整体而不深入学习的学习方式无法真正掌握这门语言,建议读者要从整体来考虑局部,培养大局观。最后,本文提醒读者完成一个像模像样的网站需要付出更多的努力和实践。 ... [详细]
  • Week04面向对象设计与继承学习总结及作业要求
    本文总结了Week04面向对象设计与继承的重要知识点,包括对象、类、封装性、静态属性、静态方法、重载、继承和多态等。同时,还介绍了私有构造函数在类外部无法被调用、static不能访问非静态属性以及该类实例可以共享类里的static属性等内容。此外,还提到了作业要求,包括讲述一个在网上商城购物或在班级博客进行学习的故事,并使用Markdown的加粗标记和语句块标记标注关键名词和动词。最后,还提到了参考资料中关于UML类图如何绘制的范例。 ... [详细]
  • Java和JavaScript是什么关系?java跟javaScript都是编程语言,只是java跟javaScript没有什么太大关系,一个是脚本语言(前端语言),一个是面向对象 ... [详细]
  • 本文介绍了Python语言程序设计中文件和数据格式化的操作,包括使用np.savetext保存文本文件,对文本文件和二进制文件进行统一的操作步骤,以及使用Numpy模块进行数据可视化编程的指南。同时还提供了一些关于Python的测试题。 ... [详细]
  • ejava,刘聪dejava
    本文目录一览:1、什么是Java?2、java ... [详细]
  • 如何实现织梦DedeCms全站伪静态
    本文介绍了如何通过修改织梦DedeCms源代码来实现全站伪静态,以提高管理和SEO效果。全站伪静态可以避免重复URL的问题,同时通过使用mod_rewrite伪静态模块和.htaccess正则表达式,可以更好地适应搜索引擎的需求。文章还提到了一些相关的技术和工具,如Ubuntu、qt编程、tomcat端口、爬虫、php request根目录等。 ... [详细]
  • 本文介绍了如何使用php限制数据库插入的条数并显示每次插入数据库之间的数据数目,以及避免重复提交的方法。同时还介绍了如何限制某一个数据库用户的并发连接数,以及设置数据库的连接数和连接超时时间的方法。最后提供了一些关于浏览器在线用户数和数据库连接数量比例的参考值。 ... [详细]
  • 本文介绍了Hyperledger Fabric外部链码构建与运行的相关知识,包括在Hyperledger Fabric 2.0版本之前链码构建和运行的困难性,外部构建模式的实现原理以及外部构建和运行API的使用方法。通过本文的介绍,读者可以了解到如何利用外部构建和运行的方式来实现链码的构建和运行,并且不再受限于特定的语言和部署环境。 ... [详细]
  • Oracle优化新常态的五大禁止及其性能隐患
    本文介绍了Oracle优化新常态中的五大禁止措施,包括禁止外键、禁止视图、禁止触发器、禁止存储过程和禁止JOB,并分析了这些禁止措施可能带来的性能隐患。文章还讨论了这些禁止措施在C/S架构和B/S架构中的不同应用情况,并提出了解决方案。 ... [详细]
  • 基于,docker,快速,部署,多,需求,spark ... [详细]
author-avatar
Yang家联1
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有