1. 简介

  • Cloudera公司推出,提供对HDFS、Hbase数据的高性能、低延迟的交互式SQL查询功能。

  • 基于Hive使用内存计算,兼顾数据仓库、具有实时、批处理、多并发等优点

  • 是CDH平台首选的PB级大数据实时查询分析引擎

  1. Impala 优势

    • 基于内存进行计算, 能够对 PB 级数据进行交互式实时查询、分析

    • 无需转换为MR, 直接读取HDFS数据

    • C++ 编写, LLVM统一编译运行

    • 兼容 HiveSQL

    • 具有数据仓库的特性, 可对hive数据直接做数据分析

    • 支持Data Local

    • 支持列式存储

    • 支持JDBC / ODBC 远程访问

  2. Impala 劣势

    • 对内存依赖大

    • cpp编写, 非大佬比较难以改源码

    • 完全依赖于hive

    • 实践过程中, 分区超过1w 性能严重下降

    • 稳定性不如 hive

  3. 安装方式

    • ClouderaManager

    • 手动安装

  4. 核心组件

    • Statestore Daemon

      • example*1 - statestored

      • 负责收集分布在集群中各个impalad进程的资源信息、各节点健康状况,同步节点信息.

      • 负责query的调度

    • Catalog Daemon

      • example*2 - catalogd

      • 分发表的元数据信息到各个impalad中

      • 接收来自statestore的所有请求

    • Impala Daemon

      • example*N - impalad

      • 接收client、hue、jdbc或者odbc请求、Query执行并返回给中心协调节点

      • 子节点上的守护进程,负责向statestore保持通信,汇报工作

  5. Impala 架构

  6. Impala Shell

    • 外部命令:

      • -h(--help)帮助

      • -v(--version)查询版本信息

      • -V(--verbose)启用详细输出

      • --quiet 关闭详细输出

      • -p 显示执行计划

      • -i hostname(--impalad=hostname) 指定连接主机 格式hostname:port 默认端口21000

      • -r(--refresh_after_connect)刷新所有元数据

      • -q query(--query=query)从命令行执行查询,不进入impala-shell

      • -d default_db(--database=default_db)指定数据库

      • -B(--delimited)去格式化输出

        • --output_delimiter=character 指定分隔符
        • --print_header 打印列名
      • -f query_file(--query_file=query_file)执行查询文件,以分号分隔

      • -o filename(--output_file filename)结果输出到指定文件

      • -c 查询执行失败时继续执行

      • -k(--kerberos) 使用kerberos安全加密方式运行impala-shell

      • -l 启用LDAP认证

      • -u 启用LDAP时,指定用户名

    • 特殊用法[内部命令]:

      • help

      • connect < hostname:port > 连接主机,默认端口21000

      • refresh 增量刷新元数据库

      • invalidate metadata 全量刷新元数据库

      • explain 显示查询执行计划、步骤信息

        • set explain_level 设置显示级别(0,1,2,3)
      • shell 不退出impala-shell执行Linux命令

      • profile (查询完成后执行) 查询最近一次查询的底层信息

  7. Impala 监控管理

  8. Impala 存储 && 分区

    • 压缩方式

    • 添加分区方式

      • partitioned by 创建表时,添加该字段指定分区列表

      • 使用alter table 进行分区的添加和删除操作

        create table t_person(id int, name string, age int) partitioned by (type string);
        alter table t_person add partition (sex='man');
        alter table t_person drop partition (sex='man');
        alter table t_person drop partition (sex='man',type='boss');
    • 分区内添加数据

      insert into t_person partition (type='boss') values (1,’gaben’,18),(2,’newell’,23);
      insert into t_person partition (type='coder') values (3,Jeep Barnett’,22),(4,’David Nasbeth’,28),(5,’John McDonald’,24);
    • 查询指定分区数据

      select id,name from t_person where type='coder'
  9. Impala SQL

  • 支持数据类型

    • INT
    • TINYINT
    • SMALLINT
    • BIGINT
    • BOOLEAN
    • CHAR
    • VARCHAR
    • STRING
    • FLOAT
    • DOUBLE
    • REAL
    • DECIMAL
    • TIMESTAMP
  • CDH5.5版本后支持以下类型

    • ARRAY
    • MAP
    • STRUCT
    • Complex (复数?)
  • Impala不支持 HiveQL以下特性:

    • 可扩展机制,例如:TRANSFORM、自定义文件格式、自定义SerDes

    • XML、JSON函数

    • 某些聚合函数:

      • covar_pop, covar_samp, corr, percentile, percentile_approx, histogram_numeric, collect_set
      • Impala仅支持:AVG,COUNT,MAX,MIN,SUM
    • 多Distinct查询

    • UDF、UDAF

    • 以下语句:

      ANALYZE TABLE (Impala:COMPUTE STATS)、DESCRIBE COLUMN、DESCRIBE DATABASE、EXPORT TABLE、IMPORT TABLE、SHOW TABLE EXTENDED、SHOW INDEXES、SHOW COLUMNS、
  • 创建数据库

      create database db1;
    use db1;
  • 删除数据库

use default;
drop database db1;
```
  • 创建表(内部表)

    • 默认方式创建表:

      create table t_person1(
      id int,
      name string
      )
    • 指定存储方式:

      create table t_person2(
      id int,
      name string
      )
      row format delimited
      fields terminated by '\0'
      stored as textfile
      -- (impala1.3.1版本以上支持‘\0’ )
    • 其他方式创建内部表

      • 使用现有表结构:
      create table tab_3 like tab_1;
    • 指定文本表字段分隔符:

    alter table tab_3 set serdeproperties ('serialization.format'=',','field.delim’=',');

    ```

    • 插入数据

      • 直接插入值方式:
      insert into t_person values (1,hex(‘hello world’));
      • 从其他表插入数据:
      insert (overwrite) into tab_3 select * from tab_2 ;
      • 批量导入文件方式方式:
      load data local inpath '/xxx/xxx' into table tab_1;
    • 创建表(外部表)

      • 默认方式创建表:

        create external table tab_p1(
        id int,
        name string
        )
        location '/user/xxx.txt'
      • 指定存储方式:

      create external table tab_p2 like parquet_tab
      '/user/xxx/xxx/1.dat'
      partition (year int , month tinyint, day tinyint)
      location '/user/xxx/xxx'
      stored as parquet;
    • 视图

      • 创建视图:

        create view v1 as select count(id) as total from tab_3;
      • 查询视图:

        select * from v1;
      • 查看视图定义:

        describe formatted v1;
    • 注意

      • 不能向impala的视图进行插入操作
      • insert 表可以来自视图
    • 数据文件处理

      • 加载数据:

        • insert语句:插入数据时每条数据产生一个数据文件,不建议用此方式加载批量数据

        • load data方式:在进行批量插入时使用这种方式比较合适

        • 来自中间表:此种方式使用于从一个小文件较多的大表中读取文件并写入新的表生产少量的数据文件。也可以通过此种方式进行格式转换。

      • 空值处理:

        • impala将“\n”表示为NULL,在结合sqoop使用是注意做相应的空字段过滤,
        • 也可以使用以下方式进行处理:
        • alter table name set tblproperties (“serialization.null.format”=“null”)
  1. Impala Hbase 整合

- Impala可以通过Hive外部表方式和HBase进行整合,步骤如下:

  - 步骤1:创建hbase 表,向表中添加数据

    ```sql
create 'test_info', 'info'
put 'test_info','1','info:name','john'
put 'test_info','2','info:name','ronnie';
``` - 步骤2:创建hive表 ```sql
CREATE EXTERNAL TABLE test_info(key string,name string)
ROW FORMAT SERDE 'org.apache.hadoop.hive.hbase.HBaseSerDe'
STORED by 'org.apache.hadoop.hive.hbase.HBaseStorageHandler'
WITH SERDEPROPERTIES ("hbase.columns.mapping"=":key,info:name")
TBLPROPERTIES
("hbase.table.name" = "test_info");
``` - 步骤3:刷新Impala表 ```sql
invalidate metadata
```
  1. Impala JDBC

    • 配置:

      impala.driver=org.apache.hive.jdbc.HiveDriver
      impala.url=jdbc:hivex://nodex:21050/;auth=noSasl
      impala.username=
      impala.password=
    • 尽量使用PreparedStatement执行SQL语句

      • 性能上PreparedStatement要好于Statement

      • Statement存在查询不出数据的情况

  2. Impala 性能优化

    • 执行计划

      • 查询sql执行之前,先对该sql做一个分析,列出需要完成这一项查询的详细方案

      • 命令:explain sql、profile

        explain select count(name) from t_person;
    • 要点:

      • SQL优化,使用之前调用执行计划
      • 选择合适的文件格式进行存储
      • 避免产生很多小文件(如果有其他程序产生的小文件,可以使用中间表)
      • 使用合适的分区技术,根据分区粒度测算
      • 使用compute stats table_name进行表信息搜集
      • 网络io的优化:
        • 避免把整个数据发送到客户端
        • 尽可能的做条件过滤
        • 使用limit字句
        • 输出文件时,避免使用美化输出
      • 使用profile输出底层信息计划,在做相应环境优化

Impala 笔记的更多相关文章

  1. Impala笔记之通用命令

    help help命令用于查询其它命令的用法 [quickstart.cloudera:21000] > help select; Executes a SELECT... query, fet ...

  2. impala学习笔记

    impala学习笔记 -- 建库 CREATE DATABASE IF NOT EXISTS database_name; -- 在HDFS文件系统中创建数据库,需要指定要创建数据库的位置. CREA ...

  3. Impala入门笔记

    From:http://tech.uc.cn/?p=817 问题背景: 初步了解Impala的应用 重点测试Impala的查询速度是否真的如传说中的比Hive快3~30倍 写作目的: 了解Impala ...

  4. impala安装笔记(Ubuntu)

    1.Override 1.With Impala, you can query data, whether stored in HDFS or Apache HBase – including SEL ...

  5. Impala 安装笔记3一impala安装

    安装impala之前,确认满足Cloudera Impala Requirements中要求的所有条件: Supported Operating Systems Supported CDH Versi ...

  6. Impala 安装笔记1一Cloudera CDH4.3.0安装

    Impala是Cloudera在受到Google的Dremel启发下开发的实时交互SQL大数据查询工具,Impala没有再使用缓慢的Hive+MapReduce批处理,而是通过使用与商用并行关系数据库 ...

  7. Impala ODBC 安装笔记

    Impala在线文档介绍了 Impala ODBC接口安装和配置 http://www.cloudera.com/content/cloudera-content/cloudera-docs/CDH5 ...

  8. Impala 安装笔记2一hive和mysql安装

    l   安装hive,hive-metastore hive-server $ sudo yum install hive hive-metastore hive-server l   安装mysql ...

  9. Hadoop-Impala学习笔记之入门

    CDH quickstart vm包含了单节点的全套hadoop服务生态,可从https://www.cloudera.com/downloads/quickstart_vms/5-13.html下载 ...

随机推荐

  1. python 网络爬虫(三)

    一.网站地图爬虫 在一个简单的爬虫中,我们将使用实例网站 robots.txt 文件中发现的网站地图来下载所有网站,为了解析网站地图,我们将会使用一个简单的正则表达式,从<loc>标签中提 ...

  2. jqGrid 多选复选框 编辑列 方法事件

    参考:https://blog.csdn.net/zsq520520/article/details/53375284?locationNum=8&fps=1

  3. 新闻网大数据实时分析可视化系统项目——3、Hadoop2.X分布式集群部署

    (一)hadoop2.x版本下载及安装 Hadoop 版本选择目前主要基于三个厂商(国外)如下所示: 1.基于Apache厂商的最原始的hadoop版本, 所有发行版均基于这个版本进行改进. 2.基于 ...

  4. 项目启动异常,java.lang.IllegalStateException: BeanFactory not initialized or already closed - call 'refresh' before accessing beans via the ApplicationContext

    java.lang.IllegalStateException: BeanFactory not initialized or already closed - call 'refresh' befo ...

  5. 实时监听input输入的变化(兼容主流浏览器)

    遇到如此需求,首先想到的是change事件,但用过change的都知道只有在input失去焦点时才会触发,并不能满足实时监测的需求,比如监测用户输入字符数. 在经过查阅一番资料后,欣慰的发现firef ...

  6. boost::property_tree 读取ini配置

    应用场景: 在后端服务器项目开发中,需要初始化一个Socket服务器,需要IP地址与对应端口号等参数:另外还可能因为对接数据库,就还需要数据库的相关配置参数,如我使用的是MySql数据库,就需要数据库 ...

  7. 106、Java中String类之使用contains()方法判断子字符串是否存在

    01.代码如下: package TIANPAN; /** * 此处为文档注释 * * @author 田攀 微信382477247 */ public class TestDemo { public ...

  8. AOP五种执行时机

    动态代理四种增强方式 先创建一个service类 package com.zzj.calculatar.service; import org.springframework.stereotype.S ...

  9. k-近邻算法python代码实现(非常全)

    1.k近邻算法是学习机器学习算法最为经典和简单的算法,它是机器学习算法入门最好的算法之一,可以非常好并且快速地理解机器学习的算法的框架与应用.它是一种经典简单的分类算法,当然也可以用来解决回归问题.2 ...

  10. vSphere 计算vMotion的迁移原理

    1. 计算vMotion 的应用场景 1). 计划内停机维护 2). 提高资源的利用率 2. 计算vMotion 需求: 1).共享存储 vMotion需要解决的核心问题就是:将VMs的内存从源ESX ...