Impala是什么:

  Impala是Cloudera提供的⼀款开源的针对HDFS和HBASE中的PB级别数据进⾏交互式实时查询(Impala 速度快),Impala是参照⾕歌的新三篇论⽂当中的Dremel实现⽽来,其中旧三篇论⽂分别是 (BigTable,GFS,MapReduce)分别对应我们即将学的HBase和已经学过的HDFS以及MapReduce。

   Impala最⼤卖点和最⼤特点就是快速,Impala中⽂翻译是⾼⻆羚⽺。

Impala优势:

  之前学习的Hive以及MR适合离线批处理,但是对交互式查询的场景⽆能为⼒(要求快速响应),所以为了 解决查询速度的问题,Cloudera公司依据Google的Dremel开发了Impala,Impala抛弃了MapReduce 使⽤了类似于传统的MPP数据库技术,⼤⼤提⾼了查询的速度。

MPP是什么?

  MPP (Massively Parallel Processing),就是⼤规模并⾏处理,在MPP集群中,每个节点资源都是独⽴ 享有也就是有独⽴的磁盘和内存,每个节点通过⽹络互相连接,彼此协同计算,作为整体提供数据服 务。

Impala 优势:

  • Impala没有采取MapReduce作为计算引擎,MR是⾮常好的分布式并⾏计算框架,但MR引擎更多 的是⾯向批处理模式,⽽不是⾯向交互式的SQL执⾏。与 Hive相⽐:Impala把整个查询任务转为 ⼀棵执⾏计划树,⽽不是⼀连串的MR任务,在分发执⾏计划后,Impala使⽤拉取的⽅式获取上个 阶段的执⾏结果,把结果数据、按执⾏树流式传递汇集,减少的了把中间结果写⼊磁盘的步骤,再 从磁盘读取数据的开销。Impala使⽤服务的⽅式避免 每次执⾏查询都需要启动的开销,即相⽐ Hive没了MR启动时间。
  • 使⽤LLVM(C++编写的编译器)产⽣运⾏代码,针对特定查询⽣成特定代码。
  • 优秀的IO调度,Impala⽀持直接数据块读取和本地代码计算。
  • 选择适合的数据存储格式可以得到最好的性能(Impala⽀持多种存储格式)。
  • 尽可能使⽤内存,中间结果不写磁盘,及时通过⽹络以stream的⽅式传递。

Impala与Hive对⽐分析:

查询过程

  • Hive:在Hive中,每个查询都有⼀个“冷启动”的常⻅问题。(map,reduce每次都要启动关闭,申 请资源,释放资源。。。)
  • Impala:Impala避免了任何可能的启动开销,这是⼀种本地查询语⾔。 因为要始终处理查询,则 Impala守护程序进程总是在集群启动之后就准备就绪。守护进程在集群启动之后可以接收查询任 务并执⾏查询任务。

中间结果

  • Hive:Hive通过MR引擎实现所有中间结果,中间结果需要落盘,这对降低数据处理速度有不利影 响。
  • Impala:在执⾏程序之间使⽤流的⽅式传输中间结果,避免数据落盘。尽可能使⽤内存避免磁盘 开销

交互查询

  • Hive:对于交互式计算,Hive不是理想的选择。
  • Impala:对于交互式计算,Impala⾮常适合。(数据量级PB级)

计算引擎

  • Hive:是基于批处理的Hadoop MapReduce
  • Impala:更像是MPP数据库

容错

  • Hive:Hive是容错的(通过MR&Yarn实现)
  • Impala:Impala没有容错,由于良好的查询性能,Impala遇到错误会重新执⾏⼀次查询

查询速度

  • Impala:Impala⽐Hive快3-90倍。

Impala优势总结

  • 1. Impala最⼤优点就是查询速度快,在⼀定数据量下;
  • 2. 速度快的原因:避免了MR引擎的弊端,采⽤了MPP数据库技术

元数据更新:

因为impala 不能自动感知 hive对元数据的更新操作。

  • 更新所有元数据,⼿动执⾏invalidate metadata;
  • 更新某一个表的元数据,refresh dbname.tablename

impala架构图:

如果是大表join ,impala使用hash join,使得hash 值一样的 id去往同一节点,这样不同节点可以并行执行join操作。

如果是小表,impala使用 广播 join。

group by 操作: impala 会对分组字段进行hash 分发,这样不同节点可以并行执行局部group by 操作,最终merge所有节点的结果。

jdbc连接 impala:

  impala的sql语法与hive基本一样,支持大部分的hive内置函数。

  impala的命令行是impala-shell

  关于impala的相关配置参考word 文档。

<dependencies>
<!-- https://mvnrepository.com/artifact/org.apache.hadoop/hadoopcommon -->
<dependency>
<groupId>org.apache.hadoop</groupId>
<artifactId>hadoop-common</artifactId>
<version>2.9.2</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.apache.hive/hive-common --
>
<dependency>
<groupId>org.apache.hive</groupId>
<artifactId>hive-common</artifactId>
<version>2.3.7</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.apache.hive/hive-metastore
-->
<dependency>
<groupId>org.apache.hive</groupId>
<artifactId>hive-metastore</artifactId>
<version>2.3.7</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.apache.hive/hive-service -
->
<dependency>
<groupId>org.apache.hive</groupId>
<artifactId>hive-service</artifactId>
<version>2.3.7</version>
</dependency> <!-- https://mvnrepository.com/artifact/org.apache.hive/hive-jdbc -->
<dependency>
<groupId>org.apache.hive</groupId>
<artifactId>hive-jdbc</artifactId>
<version>2.3.7</version> <!-- https://mvnrepository.com/artifact/org.apache.hive/hive-exec -->
<dependency>
<groupId>org.apache.hive</groupId>
<artifactId>hive-exec</artifactId>
<version>2.3.7</version>
</dependency>
</dependencies>
package com.lagou.impala.jdbc;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
public class ImpalaTest {
public static void main(String[] args) throws Exception {
//定义连接impala的驱动和连接url
String driver = "org.apache.hive.jdbc.HiveDriver";
String driverUrl = "jdbc:hive2://linux122:21050/default;auth=noSasl";
//查询的sql语句
String querySql = "select * from t1";
//获取连接
Class.forName(driver);
//通过Drivermanager获取连接
final Connection connection = DriverManager.getConnection(driverUrl);
final PreparedStatement ps = connection.prepareStatement(querySql);
//执⾏查询
final ResultSet resultSet = ps.executeQuery();
//解析返回结果
//获取到每条数据的列数
final int columnCount = resultSet.getMetaData().getColumnCount();
//遍历结果集
while (resultSet.next()) {
for (int i = 1; i <= columnCount; i++) {
final String string = resultSet.getString(i);
System.out.print(string + "\t");
}
System.out.println();
}
//关闭资源
ps.close();
connection.close();
}
}

交互式查询⼯具Impala的更多相关文章

  1. 新型查询系统impala

    这羊头很酷... Apache Impala是Apache Hadoop的开源本地分析数据库.Impala由Cloudera,MapR,Oracle和Amazon提供. 在Hadoop上进行BI风格的 ...

  2. ncdu 查找linux下最占空间的文件(交互式查询)

    安装 wget -c https://dev.yorhel.nl/download/ncdu-1.11.tar.gz tar xzvf ncdu-1.11.tar.gz cd ncdu-1.11 ./ ...

  3. Hive、Spark SQL、Impala比较

    Hive.Spark SQL.Impala比较        Hive.Spark SQL和Impala三种分布式SQL查询引擎都是SQL-on-Hadoop解决方案,但又各有特点.前面已经讨论了Hi ...

  4. [spark] spark 特性、简介、下载

    [简介] 官网:http://spark.apache.org/ 推荐学习博客:http://dblab.xmu.edu.cn/blog/spark/ spark是一个采用Scala语言进行开发,更快 ...

  5. 基于Impala平台打造交互查询系统

    本文来自网易云社区 原创: 蒋鸿翔 DataFunTalk 本文根据网易大数据蒋鸿翔老师DataFun Talk--"大数据从底层处理到数据驱动业务"中分享的<基于Impal ...

  6. Impala查询详解

    Impala的定位是一种新型的MPP查询引擎,但是它又不是典型的MPP类型的SQL引擎,提到MPP数据库首先想到的可能是GreenPlum,它的每一个节点完全独立,节点直接不共享数据,节点之间的信息传 ...

  7. Impala的分布式查询

    翻译自<Getting Started with Impala> 分布式查询 分布式查询是impala的核心.曾几何时,你需要研究并行计算,才能开始进行深奥而晦涩的操作.现在,有运行在Ha ...

  8. Impala与Hive的比較

    1. Impala架构        Impala是Cloudera在受到Google的Dremel启示下开发的实时交互SQL大数据查询工具,Impala没有再使用缓慢的Hive+MapReduce批 ...

  9. 【原创】大数据基础之Impala(1)简介、安装、使用

    impala2.12 官方:http://impala.apache.org/ 一 简介 Apache Impala is the open source, native analytic datab ...

随机推荐

  1. P6845 [CEOI2019] Dynamic Diameter

    P6845 [CEOI2019] Dynamic Diameter 题意 一颗带权树,每次更改一条边的权,每次修改后求出最大直径.强制在线. 思路 \(O(n\log^2n)\) 的暴力做法. 根据经 ...

  2. Linux Shell 学习笔记 00

    1.Bash = Bourne Again SHell 2.终端提示符: #普通用户 username@hostname$ #管理员用户 root@hostname# 3.shell脚本通常是一个以s ...

  3. (opencv08)cv.resize()调整图像大小

    (opencv08)cv.resize()调整图像大小 img = cv2.resize(src, dsize, dst=None, fx=None, fy=None, interpolation=N ...

  4. 基于Flask开发网站 -- 前端Ajax异步上传文件到后台

    大家好,我是辰哥~ 辰哥最近利用空闲时间在写一个在线可视化平台,过程中也觉得一些技术还是比较有意思的,所以就以模块化的形式分享出来.如:从网页界面(前端)上传文件到服务器(后端). 放一下该模块的界面 ...

  5. JUC学习笔记(一)

    1.什么是 JUC 1.1.JUC简介 在 Java 中,线程部分是一个重点,本篇文章说的 JUC 也是关于线程的.JUC 就是 java.util .concurrent 工具包的简称.这是一个处理 ...

  6. Kafka原理笔记

    1.什么是kafka? Kafka是一种分布式的,基于发布/订阅的消息系统(消息队列). 2.为什么要用kafka? 当业务逻辑变得复杂,数据量也会越来越多.此时可能需要增加多条数据线,每条数据线将收 ...

  7. 关于Linux下Texlive无法找到已安装字体的问题与解决

    关于Linux下Texlive无法找到已安装字体的问题与解决 当我在Ubuntu系统下使用Latex时,在编译渲染时报出了Font "xxx" does not contain r ...

  8. 【加解密】使用CFSSL生成证书并使用gRPC验证证书

    写在前面的话 CFSSL是CloudFlare旗下的PKI/TLS工具.可以用于数字签名,签名验证和TLS证书捆绑的命令行工具和HTTP API服务器. 是使用golang语言开发的证书工具. 官方地 ...

  9. Golang语言系列-02-常用数据类型

    Go语言常用数据类型 Go 语言中有丰富的数据类型,除了基本的整型.浮点型.布尔型.字符串.byte/rune 之外, 还有数组.切片.函数.map.通道(channel).结构体等. Go语言的基本 ...

  10. 【笔记】Stacking方法

    Stacking 先前学习的集成学习 先前的思路很简单,假设有三个算法,每个算法都对数据进行一个预测,最后综合这三个结果得出一个最终结果,对于分类问题可以进行少数服从多数,对于回归问题可以简单地取平均 ...