Apache Impala总结
Impala
基于hive,使用内存计算,提供对HDFS、Hbase数据的高性能、低延迟的交互式SQL查询功能。Impala适合用来处理输出数据适中或比较小的查询。
组件简绍
Impala Statestore :检查集群各个节点上Impala daemon的健康状态,同时不间断地将结果反馈给各个Impala daemon
Impala Catalog :分发hive 的元数据信息到 Impala Daemon,接收来自Statestore的所有请求,一个集群中只需要 一个节点上有这个守护进程,
Impala Daemon :Impalad接收client请求,负责读写数据文件,基于内存运行Sql
部署注意事项:
如果Impalad与 Catalog安装到一块,当内存消耗很大时会影响元数据的同步,因此要部署到不同的机器上,Catalog与StateStore 需要进行通信,所以最好部署到同一机器
常遇问题:
1.内存消耗过大导致分析任务异常的BUG
2.impala通常与MR等离线任务运行在一个集群上, 通过YARN统一管理资源, 如何同时满足交互式查询和离线查询两种需求具有较大挑战性。 YARN通过全局唯一的Resource Mananger调度资源, 好处是RM拥有整个集群全局信息,能做出更好调度决策, 缺点是资源分配的性能不足。 Impala每个查询都需要分配资源, 当每秒查询数上千时, YARN资源分配的响应时间变的很长, 影响到查询性能。
3.一个用户执行大量的insert操作,其实这些任务本身是能正常执行的,但是当这种任务大量地执行时,很有可能会对整个集群的io造成一定的影响,这时候正好又有一定数量复杂查询的反复提交,综合起来会使集群在某个时间段内出现io或者某些表被锁住。
4.大量的insert操作或者select操作,会导致对impala的元数据库进行大量的读写,这种频繁的读写操作会造成mysql的锁表。
5.如果在同一个shell脚本中,先执行了ddl操作,然后又对相应的库执行查询,会出现元数据同步延迟导致无法读取信息的操作。
内存溢出问题
Impala从Impala 1.4 for CDH4、CDH5.1版本开始新增了“SQL Operations that Spill to Disk”功能,即当Impala内存运算溢出时转移到磁盘进行运算,虽然在计算时需要占用临时的磁盘空间,增加了磁盘I/O,导致运算时间远高于纯内存运算,但至少解决了内存溢出时分析任务直接失败这一“0”容错的致命问题。
在impalashell中执行“setDISABLE_UNSAFE_SPILLS=0”或者“setDISABLE_UNSAFE_SPILLS=FALSE”命令即可。当设置DISABLE_UNSAFE_SPILLS参数的值为0(FALSE)时,内存运算濒临溢出时转为磁盘运算;设置为1(TRUE)时,当内存溢出时直接报内存溢出“Memory limit exceeded”错误
建议用户尽可能的规避触发“Spill to Disk”功能。该功能目前存在的限制包括:
- 不是所有的SQL语句都能触发,例如union关键字还是会触发内存溢出错误;
- 各个节点的内存峰值限制不能过低,低于运算所需分配给各个节点的最小内存;
- 运算explain输出的各个节点预估内存不能过分高于各个节点的实际物理内存;
- 当触发“Spill to Disk”功能时有其他并发查询,仍会触发内存溢出错误;
- 对磁盘的空间有一定的要求,磁盘运算的数据会写入到impala各个节点的临时目录下,增加了磁盘I/O,并且会引发不可控制的磁盘占用。
优化:
1.分区不能超过1w多,否则严重影响查询性能
2.join时,把小表写前面,会把小表广播到其他节点。
3.引入快速、非集中式的查询准入机制, 控制查询并发度。
4.LLAM(low latency application master)通过缓存资源, 批量分配,增量分配等方式实现降低资源分配延时
5.为Impala中源数据、中间表、结果表选择合适的存储结构。Impala默认是建立TEXT格式的表存储,而对于海量数据的存储,优选Parquet格式的存储方式。在建表时显示的指定以Parquet格式建表,并且避免使用INSER…VALUES语句向Parquet表中插入数据。因为这种方式每插入一行数据就会在HDFS上产生单独的一个小数据文件,会降低数据查询的并行度从而影响查询速度。
6.在Impala的分析任务中,无论是数据库中的原始表、中间表、结果表还是查询用到的海量数据表或者影响性能的关键表,建议在生成表之后执行COMPUTE STATS table_name命令对表的相关信息进行统计,集群会根据统计信息自动选择优化的查询方案。越是规模大的表(GB、TB级以上)统计命令执行时间越长,统计完成后的查询优化效果越是明显
注:压缩数据带来cpu额外耗时,但是减少了io耗时。
元数据操作优化
1.只有通过hdfs增加或删除分区中文件后,才需要人为更新元数据,其余情况依赖impala自带更新机制即可。
2.通过hdfs增加或删除分区中文件后一律使用refresh tablename操作,性能损耗最低。
3.日常查询操作一律不加-r参数。如果出现提示元数据过期,可断开重连或者使用refresh操作。
Apache Impala总结相关推荐
- Apache Impala
记一次impala的认识与学习. 概念 impala是一个实时的sql查询工具,类似于hive的操作方式,只不过执行的效率极高,号称当下大数据生态圈中执行效率最高的sql类软件. impala来自于c ...
- Apache Impala 4.1概览
Apache Impala 4.1概览 自从Impala 4.0发布后,历时近11个月,Impala 4.1终于发布了!新版本在Iceberg集成.Catalog优化.Parquet/ORC读取性能. ...
- 初探Apache Impala
Impala是什么? Impala提高了Apache Hadoop上SQL查询性能的标准,同时保留了熟悉的用户体验.使用Impala,您可以实时查询存储在HDFS或Apache HBase中的数据-包 ...
- Apache Impala : Impala安装部署
Impala Impala安装部署 安装前提 下载安装包.依赖包 虚拟机新增磁盘(可选) 关机新增磁盘 开机挂载磁盘 配置本地yum源 上传安装包解压 配置本地yum源信息 安装Impala 集群规划 ...
- Apache Impala: Impala的java开发
Impala的java开发 在实际工作当中,因为impala的查询比较快,所以可能有会使用到impala来做数据库查询的情况,可以通过java代码来进行操作impala的查询. 下载impala jd ...
- Apache Impala —— 3.4.0版本官方文档百度网盘下载链接
百度网盘链接: https://pan.baidu.com/s/18OW28Qp–5nEhmwpNosnCw 提取码:pfhw 文档目录内容
- 未明确定义列存储过程没问题_使用Apache Kudu和Impala实现存储分层
当为应用程序的数据选择一个存储系统时,我们通常会选择一个最适合我们业务场景的存储系统.对于快速更新和实时分析工作较多的场景,我们可能希望使用 Apache Kudu ,但是对于低成本的大规模可伸缩性场 ...
- 使用Apache Kudu和Impala实现存储分层
为什么80%的码农都做不了架构师?>>> 当为应用程序的数据选择一个存储系统时,我们通常会选择一个最适合我们业务场景的存储系统.对于快速更新和实时分析工作较多的场景,我们可能希 ...
- Apache Kudu 与 Impala Shell 的结合使用文档(创建表、删、改、查)
Kudu与Apache Impala紧密集成,允许您在Impala使用Impala的SQL语法从Kudu去做 插入,查询,更新和删除数据,作为使用Kudu API 构建自定义Kudu应用程序的替代方法 ...
最新文章
- java做直播需要哪些技术_直播APP开发中需要解决哪些技术难点?千联信息
- 调用webservice时提示对操作的回复消息正文进行反序列化时出错
- Java StringBuffer类
- 谈一谈synchronized关键词
- bcb隐藏窗口_BCB隐藏Windows任务栏的方法
- [Python] 索引序列函数:enumerate() / enumerate(sequence, start=0)
- Photoshop 操作显示滞后问题及解决方法
- 倍福--编码器模块的使用
- php图书管理系统外文文献,JSP图书管理系统论文+源码+英文文献翻译+参考文献 第10页...
- 阿里云服务器价格表,阿里云服务器最新收费标准大全
- 心酸的两天(1):Nacos 启动后输入默认密码后:“用户名或密码错误”
- linux系统下mysql编码格式,Windows、Linux系统下mysql编码设置
- lgg7深度详细参数_深度学习显卡参数详细对比
- 深度模型(一):LSTM
- CSDN ARIMA R语言_R语言时间序列:ARIMA / GARCH模型的交易策略在外汇市场预测应用...
- 2022.09青少年软件编程(Python)等级考试试卷(四级)
- 云端虚拟机规格参数快速对比说明
- 使用Dnsmasq搭建本地dns服务器上网
- 4270. 【NOIP2015模拟10.27】魔道研究
- 7-8 金银铜牌 (15 分)