前言
随着大数据时代的到来,Hadoop几乎包揽了数据仓库和数据分析查询的工作。但是,对于轻量级的计算并不适合去使用Hadoop的MapReduce来做,因为MapReduce本身设计就是为了跑大数据而计算的。 所以在计算过程中,会将数据进行分步骤计算,分步骤的结果会写到HDFS中,最后将各个步骤的结果汇总计算交给用户。在此过程中会大量的去硬盘中读写数据非常耗时。- MapReduce工作流程:
- data shuffle时网络瓶颈,Reduce要等Map结束才能开始,不能高效利用网络带宽
- 一般一个SQL都会解析成多个MR job,Hadoop每次Job输出都直接写HDFS,性能差
- 每次执行Job都要启动Task,花费很多时间,无法做到实时查询
impala介绍
Impala是处理存储在Hadoop集群中的大量数据的SQL查询引擎。 它是由Java和C++实现的,Java提供的查询交互的接口和实现,C++实现了查询引擎部分。 除此之外,Impala还能够共享Hive Metastore,甚至可以直接使用Hive的JDBC jar和beeline等直接对Impala进行查询、支持丰富的数据存储格式。与其他Hadoop的SQL引擎相比,它提供了高性能和低延迟,它提供了访问存储在Hadoop分布式文件系统中的数据的最快方法。
使用Impala,与其他SQL引擎相比,用户可以使用SQL查询以更快的方式与HDFS或HBase进行通信,Impala可以读取Hadoop使用的几乎所有文件格式,如Parquet、Avro、RCFile。
与Apache Hive不同,Impala不基于MapReduce算法。它实现了一个基于守护进程的分布式架构,它负责在同一台机器上运行的查询执行的所有方面。因此,它减少了使用MapReduce的延迟,这使得Impala比Apache Hive快。
- impala计算流程图:
impala优劣
01 优点
基于内存进行计算,能够对PB级数据进行交互式实时查询、分析
无需转换为MR,直接读取HDFS及Hbase数据 ,从而大大降低了延迟
兼容HiveSQL,支持hive基本的一些查询等
具有数据仓库的特性,可对hive数据直接做数据分析
支持Data Local数据本地化,无需数据移动,减少数据的传输
支持JDBC/ODBC远程访问
使用impala,可以使用传统的SQL知识以极快的速度处理存储在HDFS中的数据
02 不足
- Impala不提供任何对序列化和反序列化的支持
- Impala只能读取文本文件,而不能读取自定义二进制文件
- 每当新的记录/文件被添加到HDFS中的数据目录时,该表需要被刷新
- 对内存依赖大,只在内存中计算,内存不够会报错
- 需要依赖hive,从Hive元数据库中同步元数据,分发表的元数据信息到各个impala中
- 稳定性不如hive
对数据进行批量处理时,impala不如hive稳定可靠,对数据进行实时查询时hive步骤繁琐速度不如impala。而impala是使用hive的元数据,所以我们可以在同一套数据中搭配hive和impala进行使用,Impala应对秒级的交互查询,Hive应对批量数据的分析。
参考: https://www.cnblogs.com/laoqing/p/11362899.html https://blog.csdn.net/yu616568/article/details/52431835 https://www.jianshu.com/p/917780978e8c技术11期:对Flink Time和Watermark的理解
本周回顾:全球首个纯机器人配送包裹;下载2GB文件只需20秒!
想学习更多技术内容 别忘了关注 普适极客