网站首页 > 博客文章 正文
背景
Hadoop大数据生态系统重要的2个框架Apache Hive和Impala,用于在HDFS和HBase上进行大数据分析。但Hive和Impala之间存在一些差异,Hadoop生态系统中的SQL分析引擎的竞争,Impala 与Hive都是构建在Hadoop之上的数据查询工具各有不同的侧重适应面,但从客户端使用来看Impala与Hive有很多的共同之处。本文中我们会来对比两种技术Impala vs Hive区别?
Apache Hive
介绍
Hive最早由Facebook开发,后来2008年贡献给Apache软件基金会,Apache Hive?是开源的一个在Hadoop集群之上运行的开源数据仓库和分析包,使用SQL语法读取Hadoop数据,分析保存在分布式存储中HDFS或者HBase数据库中的大型数据集。此外,Hive的用途非常广泛,因为它支持分析存储在Hadoop的HDFS和其他兼容文件系统中的大量数据集。像亚马逊S3。Hive脚本使用类似SQL的语言,称为Hive QL(查询语言),它抽象编程模型并支持典型的数据仓库交互。Hive使开发者能够避免接触底层机制,如(如Java)中的有向非循环图(DAG)或MapReduce程序编写Tez作业,降低复杂性。
优缺点
优点:
- 提供索引加速分析处理,Hive支持多种类型的存储。如纯文本,RCFIle,HBase,ORC。
- Hive支持SQL之类的查询,而避免了写 MapReduce 程序来分析数据,提供快速开发的能力(简单、容易上手)。
- Hive优势在于处理大数据,对于处理小数据没有优势,因为Hive的执行延迟比较高。
- Hive支持用户自定义函数,用户可以根据自己的需求来实现自己的函数(UDF)。
- Hive元数据,可放在关系型数据库中,支持derby、mysql
缺点:
- Hive的HQL表达能力有限
- 迭代式算法无法表达递归算法
- 数据挖掘方面不擅长(数据挖掘和算法机器学习)
- Hive的效率比较低
- Hive自动生成的MapReduce作业,通常情况下不够智能化
- Hive调优比较困难,粒度较粗(快)
- Hive 本身并不提供数据的存储功能,数据一般都是存储在 HDFS 上的(对数据完整性、格式要求并不严格)
- Hive 是专为 OLAP(在线分析处理) 设计,不支持事务
体系架构
Hive是C/S模式,Hive架构包括如下组件:CLI(command line interface)、JDBC/ODBC、Thrift Server、Hive WEB Interface(HWI)、Metastore和Driver(Complier、Optimizer和Executor)
- Driver:核心组件。整个Hive的核心,该组件包括Complier、Optimizer和Executor,它的作用是将我们写的HQL语句进行解析、编译优化,生成执行计划,然后调用底层的MapReduce计算框架。
- Metastore:元数据服务组件。这个组件存储Hive元数据,放在关系型数据库中,支持derby、mysql。
- ThriftServers:提供JDBC和ODBC接入的能力,它用来进行可扩展且跨语言的服务的开发,hive集成了该服务,能让不同的编程语言调用hive的接口。
- CLI:command line interface,命令行接口
- Hive WEB Interface(HWI):hive客户端提供了一种通过网页的方式访问hive所提供的服务。这个接口对应hive的hwi组件(hive web interface)
Hive的工作原理如下:
- UI调用Drive的execute接口(1)
- Drive创建一个查询的Session事件并发送这个查询到Compiler,Compiler收到Session生成执行计划(2)
- Compiler从MetaStore中获取一些必要的数据(3,4)
- 在整个Plan Tree中,MetaStore用于查询表达式的类型检查,以及根据查询谓语(query predicates)精简partitions 。该Plan由Compiler生成,是一个DAG(Directed acyclic graph,有向无环图)执行步骤,里面的步骤包括map/reduce job、metadata 操作、HDFS上的操作,对于map/reduce job,里面包含map operator trees和一个reduce operator tree(5)
- 提交执行计划到Excution Engine,并由Execution Engine将各个阶段提交个适当的组件执行(6,6.1,6.2 , 6.3)
- 在每个任务(mapper / reducer)中,表或者中间输出相关的反序列化器从HDFS读取行,并通过相关的操作树进行传递。一旦这些输出产生,将通过序列化器生成零时的的HDFS文件(这个只发生在只有Map没有reduce的情况),生成的HDFS零时文件用于执行计划后续的Map/Reduce阶段。对于DML操作,零时文件最终移动到表的位置。该方案确保不出现脏数据读取(文件重命名是HDFS中的原子操作),对于查询,临时文件的内容由Execution Engine直接从HDFS读取,作为从Driver Fetch API的一部分(7,8,9)
应用场景
Hive在Hadoop中扮演数据仓库的角色。Hive添加数据的结构在HDFS(Hive superimposes structure on data in HDFS),并允许使用类似于SQL语法进行数据查询。Hive更适合于数据仓库的任务,主要用于静态的结构以及需要经常分析的工作。Hive与SQL相似促使其成为Hadoop与其他BI工具结合的理想交集。Hive的执行延迟比较高,Hive优势在于处理大数据,对于处理小数据没有优势,因为Hive的执行延迟比较高,因此Hive常用于数据分析,对实时性要求不高的场合,适用于日志分析:pv,uv统计,多维度数据分析以及海量结构化数据离线分析。
Apache Impala
介绍
Impala是一个大规模并行处理引擎,是一个开源引擎。它要求将数据库存储在运行Apache Hadoop的计算机群集中。这是一个SQL引擎,由Cloudera在2012年推出,后来贡献给了apache。Hadoop程序员可以以出色的方式在Impala上运行其SQL查询,它被认为是一种高效的引擎,因为它在处理之前不会移动或转换数据,该引擎可以轻松实现。Impala的数据格式、元数据、文件安全性和资源管理与MapReduce相同。它具有Hadoop的所有特质,还可以支持多用户环境。
优缺点
优点:
- 基于内存运算,不需要把中间结果写入磁盘,省掉了大量的I/O开销,能够对PB级数据进行交互式实时查询、分析。
- 无需转换为Mapreduce,直接访问存储在HDFS,HBase中的数据进行作业调度,速度快。
- 使用了支持Data locality的I/O调度机制,尽可能地将数据和计算分配在同一台机器上进行,减少了网络开销。
- 支持各种文件格式,如纯文本,RCFIle 、SEQUENCEFILE 、Parquet
- 具有数据仓库的特性,兼容HiveSQL,可对hive数据直接做数据分析。
缺点:
- 对内存的依赖大,且完全依赖于hive。
- 实践中,分区超过1万,性能严重下降。
- 只能读取文本文件,而不能直接读取自定义二进制文件。
- 每当新的记录/文件被添加到HDFS中的数据目录时,该表需要被刷新
体系架构
Impala是在Hadoop集群中的许多系统上运行的MPP(大规模并行处理)查询执行引擎。与传统存储系统不同,impala与其存储引擎解耦。Impala没有再使用缓慢的Hive+MapReduce批处理,而是通过使用与商用并行关系数据库中类似的分布式查询引擎(由Query Planner、Query Coordinator和Query Exec Engine三部分组成),可以直接从HDFS或HBase中用SELECT、JOIN和统计函数查询数据,从而大大降低了延迟。
它有三个主要组件,即Impala daemon(Impalad)、StateStore daemon(statestored) 、Catalog daemon(catalogd),StateStore和Catalog是需要通信的,所以,搭建时,这两个是放在一台主机上,从而使之通信不需走网络请求。
Impala Daemon: 接收client、hue、jdbc或者odbc请求、Query执行并返回给中心协调节点;子节点上的守护进程,负责向statestore保持通信,汇报工作。
StateStore Daemon: 检查集群各个节点impala daemon的健康状态,同步节点信息;负责Query的调度。
Catlog Daemon:将sql语句做出的元数据变化通知给集群的各个节点;接收来自StateStore的所有请求。
Impala的工作原理如下:
- 客户端通过ODBC、或者Impala shell向Impala集群中的任意节点发送SQL语句,这个节点的impalad实例作为这个查询的协调器(coordinator)
- Impala解析和分析这个查询语句来决定集群中的哪个impalad实例来执行某个任务。
- HDFS和HBase给本地的impalad实例提供数据访问
- 各个impalad向协调器impalad返回数据,然后由协调器impalad向client发送结果集
应用场景
Impala的计算能力很强实时性很高,适用于实时数据分析,因为不支持数据存储,能处理的问题有一定的限制,与Hive配合使用,对Hive的结果数据集进行实时分析
总结
Impala与Hive都是构建在Hadoop之上的数据查询工具各有不同的侧重适应面,但从客户端使用来看Impala与Hive有很多的共同之处,如数据表元数据、ODBC/JDBC驱动、SQL语法、灵活的文件格式、存储资源池等。Hive适合于长时间的批处理查询分析,而Impala适合于实时交互式SQL查询,Impala给数据分析人员提供了快速实验、验证想法的大数据分析工具。可以先使用Hive进行数据转换处理,之后使用Impala在Hive处理后的结果数据集上进行快速的数据分析。
比较基础 | Hive | Impala |
开发 | Apache Software Foundation | |
开发语言 | 用JAVA编写 | 用 C++ 编写 |
处理速度 | 慢 | Impala比Hive块10到100倍 |
存储支持 | RC 文件,ORC | Hadoop、Apache HBase |
支持并行处理 | NO | YES |
MapReduce 支持 | YES | NO |
Hadoop 安全 | 不 | 支持 Kerberos 身份验证。 |
容错 | 支持 | 不支持 |
复杂类型 | 支持复杂类型。 | Impala 不支持复杂类型。 |
类型 | 是基于批量的Hadoop MapReduce | 更像MPP数据库 |
交互式计算 | 不支持交互式计算。 | 支持交互式计算。 |
查询处理 | 普遍存在冷启动的问题 | Impala后端进程总是处在启动状态 |
吞吐量 | 高吞吐量 | 低吞吐量 |
推荐阅读
猜你喜欢
- 2024-10-16 10分钟大数据Hadoop基础入门「值得收藏」
- 2024-10-16 0288-如何使用Flume采集Kafka数据写入HBase
- 2024-10-16 0032-如何在CDH启用Kerberos的情况下安装及使用Sentry(二)
- 2024-10-16 0362-如何在Spark Streaming应用中使用Kudu管理Kafka的Offset
- 2024-10-16 使用ClouderaManager的优点、产生背景和应用场景
- 2024-10-16 大数据之Impala入门实战,看这篇就够了
- 2024-10-16 0732-Cloudera Data Center7.0今天正式GA
- 2024-10-16 清华大佬学习经验:Hadoop教程(一) Hadoop入门教程
- 2024-10-16 你了解过Cloudera的整体架构吗?4.89G学习视频带你走进它的世界
- 2024-10-16 大数据Hadoop之——基于Hive的内存型SQL查询引擎Impala
你 发表评论:
欢迎- 最近发表
- 标签列表
-
- powershellfor (55)
- messagesource (56)
- aspose.pdf破解版 (56)
- promise.race (63)
- 2019cad序列号和密钥激活码 (62)
- window.performance (66)
- qt删除文件夹 (72)
- mysqlcaching_sha2_password (64)
- ubuntu升级gcc (58)
- nacos启动失败 (64)
- ssh-add (70)
- jwt漏洞 (58)
- macos14下载 (58)
- yarnnode (62)
- abstractqueuedsynchronizer (64)
- source~/.bashrc没有那个文件或目录 (65)
- springboot整合activiti工作流 (70)
- jmeter插件下载 (61)
- 抓包分析 (60)
- idea创建mavenweb项目 (65)
- vue回到顶部 (57)
- qcombobox样式表 (68)
- vue数组concat (56)
- tomcatundertow (58)
- pastemac (61)
本文暂时没有评论,来添加一个吧(●'◡'●)