impala 3.2.0

这里目录

  • impala 3.2.0
    • 1、架构
      • 1.1、Impala 存储的状态
      • 1.2、Impala元数据和元存储
      • 1.3、查询处理接口
      • 1.4、查询执行过程
    • 2、与hive异同
      • 2.1、执行计划
      • 2.2、数据流
      • 2.3、内存
      • 2.4、调度
      • 2.5、容错
      • 2.6、适用面
    • 3、impala-shell 语法
      • 3.1、impala-shell 语法
      • 3.2、shell内部命令行
        • 3.2.1、show table stats 检查统计信息
        • 3.2.2、compute stats收集统计信息
        • 3.2.3、显示执行计划explain
    • 4、impala数据类型
    • 4、DDL操作
      • 4.1、创建表
      • 4.2、删除表与清空表
      • 4.3、insert 语句
      • 4.4、alter table语句
    • 5、内外部表
      • 5.1、内部表
      • 4.5、创建视图
      • 5.2、外部表
      • 5.3、外部表导入数据

基于hive 2.1.1 kudu1.9

Impala是用于处理存储在Hadoop集群中的大量数据的MPP(大规模并行处理)sql查询引擎。 它是一个用C ++和Java编写的开源软件。 与其他Hadoop的SQL引擎相比,它提供了高性能和低延迟。

换句话说,Impala是性能最高的SQL引擎(提供类似RDBMS的体验),它提供了访问存储在Hadoop分布式文件系统中的数据的最快方法。

Impala是基于Hive的大数据实时分析查询引擎,直接使用Hive的元数据库Metadata,意味着impala元数据都存储在Hive的metastore中。并且impala兼容Hive的sql解析,实现了Hive的SQL语义的子集,

1、架构

Impala是在hadoop集群中的许多系统上运行的MPP(大规模并行处理)查询执行引擎。 与传统存储系统不同,impala与其存储引擎解耦。 它有四个主要组件,即Impala daemon(Impalad),Impala Statestore和impala Catelog,以及CLI。

Impalad:负责协调客户端提交变得查询的执行,与HDFS的数据节点运行在同一节点上。

State Store:负责收集分布在集群中各个Impalad进城的资源信息用于查询调度。

Impala Catelog:Catalog 负责将元数据变化推送到所有的Impalad 进程节点上,例如创建,修改,删除或者 Insert / load 等操作,Catalog 会连接到元数据库并进行元数据更新操作。Catalog还负责从HiveMetestore 获取元数据。

impala元数据:由hive metastore 存储元数据。

CLI: 提供给用户查询使用的命令行工具(Impala Shell使用python实现),同时Impala还提供了Hue,JDBC, ODBC使用接口。

DBeaver中配置的使用JDBC来访问。

1.1、Impala 存储的状态

Impala有另一个称为Impala State存储的重要组件,它负责检查每个Impalad的运行状况,然后经常将每个Impala Daemon运行状况中继给其他守护程序。 这可以在运行Impala服务器或群集中的其他节点的同一节点上运行。
Impala State存储守护进程的名称为存储的状态。 Impalad将其运行状况报告给Impala State存储守护程序,即存储的状态。
在由于任何原因导致节点故障的情况下,Statestore将更新所有其他节点关于此故障,并且一旦此类通知可用于其他impalad,则其他Impala守护程序不会向受影响的节点分配任何进一步的查询。

1.2、Impala元数据和元存储

Impala元数据和元存储是另一个重要组件。 Impala使用传统的MySQL或postgresql数据库来存储表定义。 诸如表和列信息和表定义的重要细节存储在称为元存储的集中式数据库中。
每个Impala节点在本地缓存所有元数据。 当处理极大量的数据和/或许多分区时,获得表特定的元数据可能需要大量的时间。 因此,本地存储的元数据缓存有助于立即提供这样的信息。
当表定义或表数据更新时,其他Impala后台进程必须通过检索最新元数据来更新其元数据缓存,然后对相关表发出新查询。

1.3、查询处理接口

要处理查询,Impala提供了三个接口,如下所示。

  • Impala-shell - 使用Cloudera VM设置Impala后,可以通过在编辑器中键入impala-shell命令来启动Impala shell。 我们将在后续章节中更多地讨论Impala shell。
  • Hue界面 - 您可以使用Hue浏览器处理Impala查询。 在Hue浏览器中,您有Impala查询编辑器,您可以在其中键入和执行impala查询。 要访问此编辑器,首先,您需要登录到Hue浏览器。
  • ODBC / JDBC驱动程序 - 与其他数据库一样,Impala提供ODBC / JDBC驱动程序。 使用这些驱动程序,您可以通过支持这些驱动程序的编程语言连接到impala,并构建使用这些编程语言在impala中处理查询的应用程序。

1.4、查询执行过程

每当用户使用提供的任何接口传递查询时,集群中的Impalads之一就会接受该查询。 此Impalad被视为该特定查询的协调程序。
在接收到查询后,查询协调器使用Hive元存储中的表模式验证查询是否合适。 稍后,它从HDFS名称节点收集关于执行查询所需的数据的位置的信息,并将该信息发送到其他impalad以便执行查询。
所有其他Impala守护程序读取指定的数据块并处理查询。 一旦所有守护程序完成其任务,查询协调器将收集结果并将其传递给用户。

2、与hive异同

相同:

  • 数据存储:使用相同的存储数据池都支持把数据存储于HDFS, HBase。
  • 元数据:两者使用相同的元数据。
  • SQL解释处理:比较相似都是通过词法分析生成执行计划。

2.1、执行计划

hive依赖MapReduce

Impala把执行计划表现为一颗完整的执行计划树,可以更自然的分发执行计划到个Impalad执行查询。

2.2、数据流

hive采用推的方式,计算完成后主动推送到后续节点

Impala采用拉的方式,后续节点通过getNext主动向前节点要数据,以此方式数据可以流式的返回给客户端,且只要有1条数据被处理完,就可以立即展现出来,而不用等到全部处理完成,更符合SQL交互式查询使用。

2.3、内存

hive在执行过程中内存放不下所有数据则会适用堆外内存,保证query顺序完成,每一轮MapReduce结束,中间结果也会写入HDFS中,

impala:在遇到内存放不下数据时,当前版本1.0.1是直接返回错误,而不会利用外存,以后版本应该会进行改进。

2.4、调度

Hive: 任务调度依赖于Hadoop的调度策略。

Impala: 调度由自己完成,目前只有一种调度器simple-schedule,它会尽量满足数据的局部性,扫描数据的进程尽量靠近数据本身所在的物理机器。

2.5、容错

Hive: 依赖于Hadoop的容错能力。

impala: 在查询过程中,没有容错逻辑,如果在执行过程中发生故障,则直接返回错误(这与Impala的设计有关,因为Impala定位于实时查询,一次查询失败, 再查一次就好了,再查一次的成本很低)。

2.6、适用面

Hive: 复杂的批处理查询任务,数据转换任务。

Impala:实时数据分析,因为不支持UDF,能处理的问题域有一定的限制,与Hive配合使用,对Hive的结果数据集进行实时分析。

  • Impala不提供虚拟列。

  • Impala不公开锁定。

  • Impala不公开某些配置属性。

3、impala-shell 语法

3.1、impala-shell 语法

  1. impala-shell 【参数】[sql]
  2. -h 查看帮助文档
  3. -r 刷新整个元数据,量大时比较消耗服务器性能 impala-shell -r
  4. -B 去格式化,查询大量数据 impala-shell -q sql -B加上分隔符 --output_delimiter=
  5. -f 执行查询文件 impala-shell -f /opt/.sql
  6. -i 连接指定impalad执行任务 impala-shell -i node01
  7. -o 保存结果到文件中去 impala-shell -f sql -o txt
  8. -p 显示查询计划 impala-shell -f sql -p
  9. -q 执行片段sql语句 impala-shell -q "sql"
  10. -c 失败继续执行 impala-shell -c -f tt.sql

3.2、shell内部命令行

  1. impala-shell 进入内部命令行

  2. help命令

  3. connect 连接指定机器上执行

    connect node02;

  4. refresh 增量刷新(刷新表元数据)

    refresh dbname.tablename;

  5. invalidate metadata 全量刷新 (库元数据刷新)

    invaliddate metadata;

  6. explain 查询sql语句执行计划

    explain sql;

  7. profile 执行sql语句之后执行,可以打印出更详细的执行步骤,

    sql; profile;

  8. 查看hdfs及linux文件系统

    shell hadoop fs -ls /;

    shell ls -al ./;

  9. history

3.2.1、show table stats 检查统计信息

-- 显示表和分区级别的统计信息.
show table stats table_name;
-- 如果返回第一列 #Rows 值-1, 表名还没有收集过统计信息.-- 显示列级别的统计信息.
show column stats table_name ;

3.2.2、compute stats收集统计信息

-- 对于非分区表, 推荐使用COMPUTE STATS, 速度更快
COMPUTE STATS table_name ;
-- --对于分区表, 推荐使用COMPUTE INCREMENTAL STATS, 速度更快一些.
COMPUTE INCREMENTAL STATS table_name ;-- table通过Hive增加了分区, 需要先进行refresh, 然后增量收集统计信息.
REFRESH table_name;
COMPUTE INCREMENTAL STATS table_name;-- 删除统计信息
DROP STATS table_name
DROP INCREMENTAL STATS table_name PARTITION (key_col1=val1 [, key_col2=val2...])]

3.2.3、显示执行计划explain

-- 返回语句的执行计划,显示 Impala 用于读取数据、在集群中的节点之间划分工作以及通过网络传输中间和最终结果的低级机制。使用explain后跟完整的 SELECT查询。
EXPLAIN { select_query | ctas_stmt | insert_stmt }

4、impala数据类型

Sr.No 数据类型 说明
1 BIGINT 此数据类型存储数值,此数据类型的范围为-9223372036854775808至9223372036854775807.此数据类型在create table和alter table语句中使用。
2 BOOLEAN 此数据类型只存储true或false值,它用于create table语句的列定义。
3 CHAR 此数据类型是固定长度的存储,它用空格填充,可以存储最大长度为255。
4 DECIMAL 此数据类型用于存储十进制值,并在create table和alter table语句中使用。
5 DOUBLE 此数据类型用于存储正值或负值4.94065645841246544e-324d -1.79769313486231570e + 308范围内的浮点值。
6 FLOAT 此数据类型用于存储正或负1.40129846432481707e-45 … 3.40282346638528860e + 38范围内的单精度浮点值数据类型。
7 INT 此数据类型用于存储4字节整数,范围从-2147483648到2147483647。
8 SMALLINT 此数据类型用于存储2字节整数,范围为-32768到32767。
9 STRING 这用于存储字符串值。
10 TIMESTAMP 此数据类型用于表示时间中的点。
11 TINYINT 此数据类型用于存储1字节整数值,范围为-128到127。
12 VARCHAR 此数据类型用于存储可变长度字符,最大长度为65,535。
13 ARRAY 这是一个复杂的数据类型,它用于存储可变数量的有序元素。
14 Map 这是一个复杂的数据类型,它用于存储可变数量的键值对。
15 Struct 这是一种复杂的数据类型,用于表示单个项目的多个字段。

4、DDL操作

-- 显示所有库
show database;
-- 显示表创建语句
show create table_name;
-- 创建库
create database dbname;
-- 创建可能存在的库
create database if not exists dbname;
-- 删除库
drop database dbname;
-- 删除可能存在的externaltemp1表
drop table if exists externaltemp1;
-- 显示表结构
describe table_name;
-- 显示表详细结构
describe formatted table_name;
-- 查询建表语句
SHOW CREATE TABLE tablename;

4.1、创建表

create table IF NOT EXISTS database_name.table_name (column1 data_type,column2 data_type,column3 data_type,………columnN data_type
)
-- 字段按照“,”分割
row format delimited fields terminated by ','
-- 行按照“\n”分割
lines terminated by '\n'
-- text格式存储 也可以parquet、kudu等
STORED AS TEXTFILE;
-- Hdfs地址 此为外部表要指明位置,内部表无需指明
LOCATION 'hdfs_path';

4.2、删除表与清空表

  • 删除表
-- 删除表
DROP table database_name.table_name;
drop table if exists my_db.student;-- 清空表数据 保留结构 基于HDFS
truncate tmp.customers;
-- 基于kudu 删除表内容
delete from tmp.t_hy_customer_num_dd where 1=1;

4.3、insert 语句

-- 指明列字段添加数据
insert into table_name (column1, column2, column3,...columnN) values (value1, value2, value3,...valueN);
-- 添加值而不指定列名,但是,您需要确保值的顺序与表中的列的顺序相同
Insert into table_name values (value1, value2, value2);
  • 基于HDFS 可以用 insert overwrite 语句
-- 基于HDFS存储,如果是kudu就不能使用
Insert overwrite table_name values (value1, value2, value2);

4.4、alter table语句

-- 重新命表名
ALTER TABLE my_db.customers RENAME TO my_db.users;-- 向表中添加一列 增加字段
ALTER TABLE tablename  add columns (IS_AUTH VARCHAR(8) comment'是否实名认证0未实名 1已实名')
-- 删除一列
ALTER TABLE tablename  drop  ACTIVE_LENGTH -- 修改字段名称及类型
ALTER TABLE tablename CHANGE old_ind new_ind varchar(40) comment '收取要求'-- 删除分区
ALTER TABLE tablename drop if exists partition(dt = '20190520')
ALTER TABLE  tablename drop partition ( dt !='20201105')

5、内外部表

5.1、内部表

create table t_user2(
id int,
pwd string
) partitioned by(grade int)
row format delimited fields terminated by ','
lines terminated by '\n'
STORED AS TEXTFILE;-- 基于kudu表
PARTITION BY HASH (id) PARTITIONS 3
STORED AS KUDU
TBLPROPERTIES ('kudu.master_addresses'='hbnn1')

4.5、创建视图

-- 创建视图
Create View IF NOT EXISTS view_name as Select statement
-- 修改视图
Alter view customers_view as select id, name, salary from customers;
-- 删除视图
DROP VIEW database_name.view_name;

5.2、外部表

cast(column_name as decimal(10,2)) 获取小数几位数字
-- EXTERNAL 外部表
CREATE EXTERNAL TABLE IF NOT EXISTS test.t_date (date_id BIGINT comment "date id",pdate TIMESTAMP comment "date",pyear STRING comment "a particular year") -- 指明列之间的分隔符为','row format delimited fields terminated by ','-- 指明行之间的分隔符为"\n"lines terminated by '\n'-- 指明外部表数据存储位置location '/user/hive/wbb/t_date';

5.3、外部表导入数据

  1. 加载数据
-- impala 刷新元数据
refresh <tablename>
-- hive加载方式
load data inpath '/user/impala/' into table user;-- 切记必须和hiveserver2在同一个节点才可以上传否则
-- SemanticException Line 1:23 Invalid path ''/root/d3.txt'': No files matching path file
load data local inpath '/root/user.txt' into table t_user;-- 加载并覆盖已有数据
load data inpath '/yjx/user.txt' overwrite into table t_user;
  1. 子查询建表
create  table  user2   as   select * from  user;
  1. insert into # 不推荐使用
  2. insert into select ;

impala 3.2.0相关推荐

  1. Apache Impala —— 3.4.0版本官方文档百度网盘下载链接

    百度网盘链接: https://pan.baidu.com/s/18OW28Qp–5nEhmwpNosnCw 提取码:pfhw 文档目录内容

  2. Impala 4.0 启用 LZO

    Impala 4.0 中移除了 Impala-lzo 的直接支持,下面是 "Impala 4 Breaking Changes" 邮件中关于移除 Impala-lzo 支持的说明及 ...

  3. 升级 Impala(翻译)

    2019独角兽企业重金招聘Python工程师标准>>> 升级 Impala 升级 Cloudera Impala 包括停止Impala 所有服务,使用操作系统的包管理工具升级 Imp ...

  4. Impala入门笔记

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

  5. Impala内存优化

    Impala内存优化 一. 引言 Hadoop生态中的NoSQL数据分析三剑客Hive.HBase.Impala分别在海量批处理分析.大数据列式存储.实时交互式分析各有所长.尤其是Impala,自从加 ...

  6. Impala命令COMPUTE STATS的解析

    Impala命令COMPUTE STATS的解析 COMPUTE STATS主要作用: 收集有关表中数据的容量和分布以及所有相关列和分区的信息.这些信息存储在metastore数据库中,Impala使 ...

  7. Impala的命令COMPUTE STATS

    COMPUTE STATS主要作用: 收集有关表中数据的容量和分布以及所有相关列和分区的信息.这些信息存储在metastore数据库中,Impala使用这些信息来帮助优化查询.例如,如果Impala可 ...

  8. Apache Kudu 与 Impala Shell 的结合使用文档(创建表、删、改、查)

    Kudu与Apache Impala紧密集成,允许您在Impala使用Impala的SQL语法从Kudu去做 插入,查询,更新和删除数据,作为使用Kudu API 构建自定义Kudu应用程序的替代方法 ...

  9. Impala入门笔记---比Hive强大

    原文地址:http://www.tuicool.com/articles/iUBNFr 问题背景: 1. 初步了解Impala的应用 2. 重点测试Impala的查询速度是否真的如传说中的比Hive快 ...

最新文章

  1. 剑指offer_第17题_树的子结构_Python
  2. Spark Streaming中的操作函数分析
  3. unity 代码边缘发光_Shader案例之内发光和边缘泛光效果
  4. 贪吃蛇游戏的C++代码
  5. 【自动驾驶】21.左手坐标系和右手坐标系
  6. Spring配置数据源(连接池)
  7. C# log4net 不输出日志
  8. tcp协议与粘包现象【转http://www.cnblogs.com/wzd24/archive/2007/12/24/1011932.html】
  9. .net pdf转图片_pdf2image类库实现批量pdf转图片
  10. MATLAB中计算器的设立,怎样用MATLAB中的GUI做一个简单计算器
  11. 我的世界基岩版种子和java版种子_我的世界:对萌新最友好的种子,基岩版通用,对老玩家也很适合!...
  12. flutter常用内置动画组件
  13. 第O题 巧用二进制解答 现在有n个货物,第i个货物的重量是。。。
  14. mysql group日期_MySQL GROUP BY使用datetime时的日期?
  15. linux 锐捷客户端登录密码,Linux使用经验_使用锐捷客户端登录校园网
  16. 软件架构师必考概念整理
  17. 8.基本数据类型详细讲解-list/tuple
  18. html工作周报,可查看(周报).html
  19. echart旭日图_ECharts 旭日图
  20. 大学物理实验长度的测量实验报告_大学物理实验长度的测量实验总结

热门文章

  1. 计算机网络-HTTP代理服务器
  2. Node.js实践----注册-登录-个人中心(更换密码、头像)接口实现(包含mysql数据库)
  3. easyui中调用textbox实现换行的方式
  4. [RealSense]2-实感摄像头与SDK
  5. .NET面试题——第5篇 ASP.NET MVC面试题
  6. 谷歌J2ObjC(Java to Objective-C)版本更新
  7. 算法设计-动态规划——最长公共子序列
  8. vue学习之VueRouter 路由
  9. spring boot中支付宝生活号事件订阅,中文参数乱码问题解决方案
  10. 删除表中的所有记录 ID从1开始