专业的编程技术博客社区

网站首页 > 博客文章 正文

Apache Hive vs. Impala(头歌hive的安装与配置)

baijin 2024-10-16 07:39:30 博客文章 9 ℃ 0 评论

背景

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的工作原理如下:

  1. UI调用Drive的execute接口(1)
  2. Drive创建一个查询的Session事件并发送这个查询到Compiler,Compiler收到Session生成执行计划(2)
  3. Compiler从MetaStore中获取一些必要的数据(3,4)
  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)
  5. 提交执行计划到Excution Engine,并由Execution Engine将各个阶段提交个适当的组件执行(6,6.1,6.2 , 6.3)
  6. 在每个任务(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的工作原理如下:

  1. 客户端通过ODBC、或者Impala shell向Impala集群中的任意节点发送SQL语句,这个节点的impalad实例作为这个查询的协调器(coordinator)
  2. Impala解析和分析这个查询语句来决定集群中的哪个impalad实例来执行某个任务。
  3. HDFS和HBase给本地的impalad实例提供数据访问
  4. 各个impalad向协调器impalad返回数据,然后由协调器impalad向client发送结果集


应用场景

Impala的计算能力很强实时性很高,适用于实时数据分析,因为不支持数据存储,能处理的问题有一定的限制,与Hive配合使用,对Hive的结果数据集进行实时分析



总结

Impala与Hive都是构建在Hadoop之上的数据查询工具各有不同的侧重适应面,但从客户端使用来看Impala与Hive有很多的共同之处,如数据表元数据、ODBC/JDBC驱动、SQL语法、灵活的文件格式、存储资源池等Hive适合于长时间的批处理查询分析,而Impala适合于实时交互式SQL查询,Impala给数据分析人员提供了快速实验、验证想法的大数据分析工具。可以先使用Hive进行数据转换处理,之后使用Impala在Hive处理后的结果数据集上进行快速的数据分析。

比较基础

Hive

Impala

开发

Facebook

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后端进程总是处在启动状态

吞吐量

高吞吐量

低吞吐量


推荐阅读

HTTP vs. MQTT 物联网通信协议对比

Cassandra vs. HBase 列式数据库对比

Spring Cloud vs. Apache Dubbo 微服务框架对比

RPC Style vs. REST Web APIs

Tags:

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表