在拉勾教育大数据训练营的学习中,关于impala的学习总结
使用MPP没有使用MR,提升速度
使⽤用LLVM(C++编写的编译器器)产生运行代码
优秀的IO调度
选择适合的数据存储格式可以得到最好的性能
尽可能使用内存,中间结果不写磁盘,及时通过网络以stream的⽅式传递
Impala属于MPP架构,只能做到百节点级,一般并发查询个数达到20左右时
资源不不能通过YARN统⼀一资源管理理调度,所以Hadoop集群⽆无法实现Impala、Spark、Hive等组件 的动态资源共享。
查询过程:在Hive中,每个查询都有⼀一个“冷启动”的常⻅见问题。(map,reduce每次都要启动关闭,申 请资源,释放资源。。。)
中间结果:Hive通过MR引擎实现所有中间结果,中间结果需要落盘,impala是流的方式传递
交互查询:Hive不是理想的选择。
计算引擎:hive是MR,impala类似于MPP
容错:Hive是容错的,impala没有
查询速度:Impala⽐比Hive快3-90倍。
Hive: 复杂的批处理理查询任务,数据转换任务,对实时性要求不不⾼高同时数据量又很大的场景。
Impala:实时数据分析,与Hive配合使⽤用,对Hive的结果数据集进⾏行行实时分析。impala不不能完全取代 hive,impala可以直接处理理hive表中的数据。
impalad
负责读写数据文件,接收来自Impala-shell,JDBC,ODBC等的查询请求,与集群其它 Impalad分布式并行完成查询任务,并将查询结果返回给中⼼协调者。
为了了保证Impalad进程了解其它Impalad的健康状况,Impalad进程会⼀直与statestore保持通信。
Impalad服务由三个模块组成:Query Planner、Query Coordinator和Query Executor,前两个 模块组成前端,负责接收SQL查询请求,解析SQL并转换成执⾏计划,交由后端执行,
statestored
statestore监控集群中Impalad的健康状况,并将集群健康信息同步给Impalad,
catalogd
Impala执行的SQL语句引发元数据发生变化时,catalog服务负责把这些元数据的变化同步给其它 Impalad进程(日志验证,监控statestore进程日志)
catalogd进程所有请求都是经过 statestored进程发送,所以官⽅方建议让statestored进程与catalogd进程安排同个节点。
Client提交任务
生成单机和分布式执⾏计划
单机执⾏计划: 根据上一步对SQL语句句的分析,由Planner先生成单机的执行计划,该执行计划是有PlanNode组成的⼀棵树,这个过程中也会执行一些SQL优化,例如Join顺序改变、谓词下推等。
分布式并行物理计划:将单机执⾏计划转换成分布式并行物理执⾏计划,物理执⾏计划由⼀个的Fragment组成,Fragment之间有数据依赖关系,处理过程中需要在原有的执⾏计划 之上加⼊一些ExchangeNode和DataStreamSink信息等。
任务调度和分发
Fragment之间的数据依赖
结果汇总
获取结果
外部命令
impala-shell –h
impala-shell –r
impala-shell –f
impala-shell –i
impala-shell –o
内部命令
connect hostname
refresh dbname.tablename 增量刷新
invalidate metadata全量刷新
explain可以不真正执⾏任务,只是展示任务的执行计划;
profile:需要任务执行完成后调⽤,可以从更底层以及更更详细的层面来观察我们运⾏impala的任务,进行调优。
创建数据库:CREATE DATABASE IF NOT EXISTS database_name;
删除数据库:drop database sample cascade;
create table语句
insert 语句
select语句
describe语句
alter table
delete、truncate table
view视图
order by⼦句
group by⼦句
limit、offset
insert into values
insert into select
create table as select
load data⽅式,这种⽅式不建议在Impala中使⽤用,先使⽤用load data⽅式把数据加载到Hive表中,然后使用以上方式插⼊Impala表中。
HAProxy(官方推荐)
DNS做负载均衡
避免⼩文件:insert ... values 会产⽣⼤量小⽂件,避免使⽤,文件格式:对于大数据量来说,Parquet⽂件格式是最佳的
合理理分区粒度:通常建议分区数量在3万以下 (太多的分区也会造成元数据管理的性能下降)
获取表的统计指标:减少传输客户端数据量:聚合(如 count、sum、max 等);过滤(如 WHERE );limit限制返回条数;返回结果不要使⽤用美化格式进⾏展示
在执⾏之前使⽤用EXPLAIN来查看逻辑规划,分析执⾏逻辑
Impala join⾃动的优化⼿段就是通过使⽤COMPUTE STATS来收集参与Join的每张表的统计信 息,然后由Impala根据表的⼤小、列的唯⼀值数目等来⾃动优化查询