1.impala也支持Hive标准,即在Hive中的语句也可以在Impala中执行!
2.impala可以共用hive的元数据库,impala离开hive就活不下去了,即添加一个impala服务就要添加一个hive服务1
3.impala是基于内存计算的,所以速度非常快,而hive是转换成MR执行,所以Impala比较耗内存,Impala有数据仓库的特性就是因为它依赖于hive特性!
4.在CDH5.x是不兼容Spark sql的!
Cloudera公司推出,提供对HDFS、 Hbase数据的高性能、低延迟的交互式SQL查询功能。
基于Hive使用内存计算,兼顾数据仓库、具有实时、批处理、多并发等优点
是CDH平台首选的PB级大数据实时查询分析引擎
5.impala特点:
1、基于内存进行计算,能够对PB级数据进行交互式实时查询、 分析
2、无需转换为MR,直接读取HDFS数据
3、 C++编写,LLVM统一编译运行
4、兼容HiveSQL
5、具有数据仓库的特性,可对hive数据直接做数据分析
6、支持Data Local
7、支持列式存储
8、支持JDBC/ODBC远程访问
6.Impala劣势:(官方建议128G,实际上一般公司也就32G,64G基本上就够了!)
1、对内存依赖大
2、 C++编写 开源?!
3、完全依赖于hive
4、实践过程中 分区超过1w 性能严重下下降
5、稳定性不如hive
6.impala不支持hive中的函数以及复杂查询的!
7.hive支持和Hbase整合,所以Impala也支持和Hbase整合,而且hiveserver2中支持JDBC/ODBC远程访问,所以Impala也是支持JDBC/ODBC远程访问的!
8.本身Hbase只做数据存储,用impala或者hive或者MR进行分析!
9.使用Impala一般就会使用CDH,使用CDH一般就会使用Impala!
10.
Impala的三大组件:
impala Catalog Server(存储和同步hive的元数据信息,但是在hive中创建的表在impala Catalog Server是同步不过来的,必须需要impala-shell -r执行之后,才会同步过来)
impala-shell -r会刷新所有的元数据
Impala StateStore
Impala Daemon
impala Catalog Server 与 Impala StateStore 安装在一起(一台机子上),Impala Daemon(计算的)是安装在Datanode上的,提高数据可用性!
11.数据分析一般就两种:
1.汇总:在发送Impala请求的时候,通过代码的负载均衡,将像汇总的分析发送给内存大的Impala Daemon 所在机器的那一台!
2.统计:发送Impala请求的时候,通过代码的负载均衡,将像汇总的分析发送给内存小的Impala Daemon 所在机器的那一台
12.通过CDH管理服务的时候,要通过CDH界面平台修改配置文件,否则就要修改集群上的每一份配置文件,再启动服务,这样就有点麻烦了!
13.Impala Shell:
1.内部shell(进入Impala shell之后敲的命令)
connect hostname:port 连接主机,默认端口21000
refresh tablename 增量刷新元数据库(重点)
invalidate metadata 全量刷新元数据库(慎用,资源让费大)
======================================================================================
explain <sql> 显示查询执行计划、步骤信息
set explain_level(默认级别是2,级别分为:0,1,2,3)
profile (查询完成后执行): 查询最近一次查询的底层信息
========================================================================================
profile 与explain的区别:可以查看上一条SQL语句耗费的硬件的信息,以及执行时间等等!
shell <shell> 不退出impala-shell 执行linux命令!
2.外部shell:(进入Impala shell之前敲的命令)
==========================================================================================================================
-p 可以查看SQL执行计划:(通过查看SQL的执行计划,然后优化代码!)----》多个命令可以结合使用,进入命令行之后,所有sql的执行计划都会输出!
===============================================================================================================================
-i 可以指定连接的连接的主机!(重点)可以轮番请求Impala Daemon服务器!
-r 同步hive中所有元数据!
-q 从命令行执行查询
-d 指定数据库
-B 去格式化输出(减少结果集大小,提高性能)
-f file:执行查询文件,以分号分隔(重点)
-o fileame 结果输出到指定文件中!(重点)
-c 查询执行失败时继续执行(跳过有问题的SQL语句,然后执行下面的没有问题SQL语句!)
Impala中的的认证是默认安全认证是kerberos认证!
14.再做Impala升级的时候,要将Impala Shell和 Server shell两个都升级,否则会有问题!
15.hive的复杂数据类型,在Impala中是不支持的!例如Map类型,Array类型的!
16.在impala中不同的文件类型对应不同的压缩方式和不同的操作!默认是用Text存储方式-----------》(重点)
官方建议使用parquet文件类型!
17.impala的信息是共用hive的元数据信息,当不能用impala时,可以选用hive来做!
18.压缩比越高:
1.优点:节省存储空间,节省网络传输IO操作
2.缺点:解压,压缩比较消耗内存
19.在hive中不建议使用insert into table values()这样的语句,因为在hive中它会转化成mapreduce,比较慢!但是Impala中不会转换成MapReduce,所以在Impala中可以使用这种方式!
20.Impala中是不支持 Map,Struct,Array,Complex等复杂数据类型的(Impala5.5以上才有点支持复杂类型,但是支持的也不好)!
所以这种复杂类型我们基本上都是在hive中处理的,
21. 此外,Impala不支持HiveQL以下特性:
– 可扩展机制,例如:TRANSFORM、自定义文件格式、自定义SerDes
– XML、 JSON函数
– 某些聚合函数:
covar_pop, covar_samp, corr, percentile, percentile_approx,histogram_numeric, collect_set
Impala仅支持:AVG,COUNT,MAX,MIN,SUM(基本的UDA聚合函数时不支持的)
– 多Distinct查询(一个子查询语句中只能有一个distinct语句,但是可以写多个子查询来实现)
– HDF、 UDAF(用户自定义函数在Impala中也是不支持的!)
– 以下语句:
ANALYZE TABLE (Impala:COMPUTE STATS)、 DESCRIBE COLUMN、
DESCRIBE DATABASE、 EXPORT TABLE、 IMPORT TABLE、 SHOW
TABLE EXTENDED、 SHOW INDEXES、 SHOW COLUMNS、
22.直接插入值方式:insert into t_person values()这种语句会产生很多的小文件,这种文件存储在HDFS上,比较小,建议要优化!
批量导入文件方式:load data local inpath '/xxx/xxxx' into table tb1;这种方式存储在HDFS上的文件是一个大文件,不用做另外的优化了!
23.数据文件处理
– 加载数据:
• 1、 insert语句:插入数据时每条数据产生一个数据文件,不建议用此方式加载批量数据
• 2、 load data方式:在进行批量插入时使用这种方式比较合适
• 3、来自中间表:此种方式使用于从一个小文件较多的大表中读取文件并写入新的表生产少量的数据文件。也可以通过此种方式进行格式转换。
– 空值处理:
• impala将“ \n” 表示为NULL,在结合sqoop使用是注意做相应的空字段过滤,
• 也可以使用以下方式进行处理:
• alter table name set tblproperties (“serialization.null.format”=“null”)
24.Impala和Hbase整合,其实Impala和hive是共用同一套元数据信息,所以Impala和Hbase整合实际上就是hive与hbase整合!这就是Impala和Hbase整合的思想!
25.hbase的客户端命令行中的,语句后面不要分号!
26.在hive中创建一个表,在hbase中刷新只能是全量刷新!
27.Impala可以通过Hive外部表方式和HBase进行整合,步骤如下:
• 步骤1:创建hbase 表,向表中添加数据
– create 'test_info', 'info'
– put 'test_info','1','info:name','zhangsan'
– put 'test_info','2','info:name','lisi'
• 步骤2:创建hive表
– 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表
– invalidate metadata
28.Impala JDBC
• 配置:
– impala.driver=org.apache.hive.jdbc.HiveDriver
– impala.url=jdbc:hive2://node2:21050/;auth=noSasl
– impala.username=
– impala.password=
• 尽量使用PreparedStatement执行SQL语句:
– 1.性能上PreparedStatement要好于Statement
– 2.Statement存在查询不出数据的情况
29.Impala最少的依赖包!
30.jar包最好去官网找,不要随便去CSDN上下载,版本不一致问题!
31.impala性能优化:
执行计划
– 查询sql执行之前,先对该sql做一个分析,列出需要完成这一项查询的详细方案
– 命令:explain sql、 profile
要点:
• 1、 SQL优化,使用之前调用执行计划
• 2、选择合适的文件格式进行存储
• 3、避免产生很多小文件(如果有其他程序产生的小文件,可以使用中间表)
• 4、使用合适的分区技术,根据分区粒度测算
• 5、使用compute stats进行表信息搜集(重点!)
• 6、网络io的优化:
– a.避免把整个数据发送到客户端
– b.尽可能的做条件过滤
– c.使用limit字句
– d.输出文件时,避免使用美化输出
• 7、使用profile输出底层信息计划(可以看一下CPU和内存的使用情况,看某一条sql运行CPU和内存的使用情况,看看是否如果这条语句执行,会不会让其他资源没法运行!),在做相应环境优化
32.Impala没有转为MapReduce执行,所以快,基于内存,底层是C++,劣势存储所以可以和Hbase整合(本质就是Hive与hbase的整合)!
2.impala可以共用hive的元数据库,impala离开hive就活不下去了,即添加一个impala服务就要添加一个hive服务1
3.impala是基于内存计算的,所以速度非常快,而hive是转换成MR执行,所以Impala比较耗内存,Impala有数据仓库的特性就是因为它依赖于hive特性!
4.在CDH5.x是不兼容Spark sql的!
Cloudera公司推出,提供对HDFS、 Hbase数据的高性能、低延迟的交互式SQL查询功能。
基于Hive使用内存计算,兼顾数据仓库、具有实时、批处理、多并发等优点
是CDH平台首选的PB级大数据实时查询分析引擎
5.impala特点:
1、基于内存进行计算,能够对PB级数据进行交互式实时查询、 分析
2、无需转换为MR,直接读取HDFS数据
3、 C++编写,LLVM统一编译运行
4、兼容HiveSQL
5、具有数据仓库的特性,可对hive数据直接做数据分析
6、支持Data Local
7、支持列式存储
8、支持JDBC/ODBC远程访问
6.Impala劣势:(官方建议128G,实际上一般公司也就32G,64G基本上就够了!)
1、对内存依赖大
2、 C++编写 开源?!
3、完全依赖于hive
4、实践过程中 分区超过1w 性能严重下下降
5、稳定性不如hive
6.impala不支持hive中的函数以及复杂查询的!
7.hive支持和Hbase整合,所以Impala也支持和Hbase整合,而且hiveserver2中支持JDBC/ODBC远程访问,所以Impala也是支持JDBC/ODBC远程访问的!
8.本身Hbase只做数据存储,用impala或者hive或者MR进行分析!
9.使用Impala一般就会使用CDH,使用CDH一般就会使用Impala!
10.
Impala的三大组件:
impala Catalog Server(存储和同步hive的元数据信息,但是在hive中创建的表在impala Catalog Server是同步不过来的,必须需要impala-shell -r执行之后,才会同步过来)
impala-shell -r会刷新所有的元数据
Impala StateStore
Impala Daemon
impala Catalog Server 与 Impala StateStore 安装在一起(一台机子上),Impala Daemon(计算的)是安装在Datanode上的,提高数据可用性!
11.数据分析一般就两种:
1.汇总:在发送Impala请求的时候,通过代码的负载均衡,将像汇总的分析发送给内存大的Impala Daemon 所在机器的那一台!
2.统计:发送Impala请求的时候,通过代码的负载均衡,将像汇总的分析发送给内存小的Impala Daemon 所在机器的那一台
12.通过CDH管理服务的时候,要通过CDH界面平台修改配置文件,否则就要修改集群上的每一份配置文件,再启动服务,这样就有点麻烦了!
13.Impala Shell:
1.内部shell(进入Impala shell之后敲的命令)
connect hostname:port 连接主机,默认端口21000
refresh tablename 增量刷新元数据库(重点)
invalidate metadata 全量刷新元数据库(慎用,资源让费大)
======================================================================================
explain <sql> 显示查询执行计划、步骤信息
set explain_level(默认级别是2,级别分为:0,1,2,3)
profile (查询完成后执行): 查询最近一次查询的底层信息
========================================================================================
profile 与explain的区别:可以查看上一条SQL语句耗费的硬件的信息,以及执行时间等等!
shell <shell> 不退出impala-shell 执行linux命令!
2.外部shell:(进入Impala shell之前敲的命令)
==========================================================================================================================
-p 可以查看SQL执行计划:(通过查看SQL的执行计划,然后优化代码!)----》多个命令可以结合使用,进入命令行之后,所有sql的执行计划都会输出!
===============================================================================================================================
-i 可以指定连接的连接的主机!(重点)可以轮番请求Impala Daemon服务器!
-r 同步hive中所有元数据!
-q 从命令行执行查询
-d 指定数据库
-B 去格式化输出(减少结果集大小,提高性能)
-f file:执行查询文件,以分号分隔(重点)
-o fileame 结果输出到指定文件中!(重点)
-c 查询执行失败时继续执行(跳过有问题的SQL语句,然后执行下面的没有问题SQL语句!)
Impala中的的认证是默认安全认证是kerberos认证!
14.再做Impala升级的时候,要将Impala Shell和 Server shell两个都升级,否则会有问题!
15.hive的复杂数据类型,在Impala中是不支持的!例如Map类型,Array类型的!
16.在impala中不同的文件类型对应不同的压缩方式和不同的操作!默认是用Text存储方式-----------》(重点)
官方建议使用parquet文件类型!
17.impala的信息是共用hive的元数据信息,当不能用impala时,可以选用hive来做!
18.压缩比越高:
1.优点:节省存储空间,节省网络传输IO操作
2.缺点:解压,压缩比较消耗内存
19.在hive中不建议使用insert into table values()这样的语句,因为在hive中它会转化成mapreduce,比较慢!但是Impala中不会转换成MapReduce,所以在Impala中可以使用这种方式!
20.Impala中是不支持 Map,Struct,Array,Complex等复杂数据类型的(Impala5.5以上才有点支持复杂类型,但是支持的也不好)!
所以这种复杂类型我们基本上都是在hive中处理的,
21. 此外,Impala不支持HiveQL以下特性:
– 可扩展机制,例如:TRANSFORM、自定义文件格式、自定义SerDes
– XML、 JSON函数
– 某些聚合函数:
covar_pop, covar_samp, corr, percentile, percentile_approx,histogram_numeric, collect_set
Impala仅支持:AVG,COUNT,MAX,MIN,SUM(基本的UDA聚合函数时不支持的)
– 多Distinct查询(一个子查询语句中只能有一个distinct语句,但是可以写多个子查询来实现)
– HDF、 UDAF(用户自定义函数在Impala中也是不支持的!)
– 以下语句:
ANALYZE TABLE (Impala:COMPUTE STATS)、 DESCRIBE COLUMN、
DESCRIBE DATABASE、 EXPORT TABLE、 IMPORT TABLE、 SHOW
TABLE EXTENDED、 SHOW INDEXES、 SHOW COLUMNS、
22.直接插入值方式:insert into t_person values()这种语句会产生很多的小文件,这种文件存储在HDFS上,比较小,建议要优化!
批量导入文件方式:load data local inpath '/xxx/xxxx' into table tb1;这种方式存储在HDFS上的文件是一个大文件,不用做另外的优化了!
23.数据文件处理
– 加载数据:
• 1、 insert语句:插入数据时每条数据产生一个数据文件,不建议用此方式加载批量数据
• 2、 load data方式:在进行批量插入时使用这种方式比较合适
• 3、来自中间表:此种方式使用于从一个小文件较多的大表中读取文件并写入新的表生产少量的数据文件。也可以通过此种方式进行格式转换。
– 空值处理:
• impala将“ \n” 表示为NULL,在结合sqoop使用是注意做相应的空字段过滤,
• 也可以使用以下方式进行处理:
• alter table name set tblproperties (“serialization.null.format”=“null”)
24.Impala和Hbase整合,其实Impala和hive是共用同一套元数据信息,所以Impala和Hbase整合实际上就是hive与hbase整合!这就是Impala和Hbase整合的思想!
25.hbase的客户端命令行中的,语句后面不要分号!
26.在hive中创建一个表,在hbase中刷新只能是全量刷新!
27.Impala可以通过Hive外部表方式和HBase进行整合,步骤如下:
• 步骤1:创建hbase 表,向表中添加数据
– create 'test_info', 'info'
– put 'test_info','1','info:name','zhangsan'
– put 'test_info','2','info:name','lisi'
• 步骤2:创建hive表
– 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表
– invalidate metadata
28.Impala JDBC
• 配置:
– impala.driver=org.apache.hive.jdbc.HiveDriver
– impala.url=jdbc:hive2://node2:21050/;auth=noSasl
– impala.username=
– impala.password=
• 尽量使用PreparedStatement执行SQL语句:
– 1.性能上PreparedStatement要好于Statement
– 2.Statement存在查询不出数据的情况
29.Impala最少的依赖包!
30.jar包最好去官网找,不要随便去CSDN上下载,版本不一致问题!
31.impala性能优化:
执行计划
– 查询sql执行之前,先对该sql做一个分析,列出需要完成这一项查询的详细方案
– 命令:explain sql、 profile
要点:
• 1、 SQL优化,使用之前调用执行计划
• 2、选择合适的文件格式进行存储
• 3、避免产生很多小文件(如果有其他程序产生的小文件,可以使用中间表)
• 4、使用合适的分区技术,根据分区粒度测算
• 5、使用compute stats进行表信息搜集(重点!)
• 6、网络io的优化:
– a.避免把整个数据发送到客户端
– b.尽可能的做条件过滤
– c.使用limit字句
– d.输出文件时,避免使用美化输出
• 7、使用profile输出底层信息计划(可以看一下CPU和内存的使用情况,看某一条sql运行CPU和内存的使用情况,看看是否如果这条语句执行,会不会让其他资源没法运行!),在做相应环境优化
32.Impala没有转为MapReduce执行,所以快,基于内存,底层是C++,劣势存储所以可以和Hbase整合(本质就是Hive与hbase的整合)!