Android内存管理(android内存管理机制)
837
2022-05-30
1 Presto性能调优
1.1 概述
1.1.1 Presto架构
图1-1 Presto架构
Presto是一个分布式的查询引擎,本身并不存储数据,但是可以接入多种数据源,并且支持跨数据源的级联查询。
Presto的架构分为:
Coodinator:解析SQL语句,生成执行计划,分发执行任务给Worker节点执行。
Discovery Server:Worker节点启动后向Discovery Server服务注册,Coordinator从Discovery Server获得可以正常工作的Worker节点。
Worker:负责执行实际查询任务,访问底层存储系统。
存储:Presto的数据可以存储在HDFS/OBS,推荐热数据存储在HDFS,冷数据存储在OBS。
1.2 内存调优
1.2.1 内存管理原理
Presto有三种内存池,分别为GENERAL_POOL、RESERVED_POOL、SYSTEM_POOL。
GENERAL_POOL:用于普通查询的physical operators。GENERAL_POOL值为 总内存(Xmx值)- 预留的(max-memory-per-node)- 系统的(0.4 * Xmx)。
SYSTEM_POOL:系统预留内存,用于读写buffer,worker初始化以及执行任务必要的内存。大小由config.properties里的resources.reserved-system-memory指定。默认值为JVM max memory * 0.4。
RESERVED_POOL:大部分时间里是不参与计算的,只有当同时满足如下情形下,才会被使用,然后从所有查询里获取占用内存最大的那个查询,然后将该查询放到 RESERVED_POOL 里执行,同时注意RESERVED_POOL只能用于一个Query。大小由config.properties里的query.max-memory-per-node指定,默认值为:JVM max memory * 0.1。
GENERAL_POOL有节点出现阻塞节点(block node)情况,即该node内存不足。
RESERVED_POOL没有被使用
l query.max-memory:表示单个查询在分布在所有相关节点上能用的内存之和的最大值。
l query.max-memory-per-node:表示单个查询在单个节点上用户内存能用的最大值。
l query.max-total-memory-per-node:表示单个查询在单个节点上用户内存能用的最大值和系统内存量。其中系统内存是读取器、写入器和网络缓冲区等在执行期间使用的内存。
l memory.heap-headroom-per-node:这个内存主要是第三方库的内存分配,无法被统计跟踪,默认值是-Xmx * 0.3。
注意点:
query.max-memory-per-node小于query.max-total-memory-per-node。
query.max-total-memory-per-node 与memory.heap-headroom-per-node 之和必须小于 jvm max memory 也就是jvm.config 中配置的-Xmx。
图1-2 Presto内存池
图1-3 Presto内存配置
1.2.2 内存调优参数
操作场景
Presto由于是完全基于内存的计算,经常出现OOM,需要调整内存。
修改参数
参数名
默认值
描述
优化建议
修改位置
query.max-memory-per-node
jvm * 0.1
表示单个查询在单个节点上用户内存能用的最大值
jvm * 0.25
config.properties
query.max-total-memory-per-node
> query.max-memory-per-node
表示单个查询在单个节点上用户内存能用的最大值和系统内存量。其中系统内存是读取器、写入器和网络缓冲区等在执行期间使用的内存
jvm * 0.4
config.properties
memory.heap-headroom-per-node
jvm * 0.3
这个内存主要是第三方库的内存分配,无法被统计跟踪
jvm * 0.2
config.properties
query.max-memory
< query.max-memory-per-node * worker
表示单个查询在分布在所有相关节点上能用的内存之和的最大值
query.max-memory-per-node * worker * 0.8
config.properties
query.low-memory-killer.policy
none
当查询发生OOM时的处理策略。配置total-reservation的作用是kill掉所有查询里最费内存的查询;而total-reservation-on-blocked-nodes杀死在内存不足(阻塞)的节点上使用最多内存的查询
total-reservation-on-blocked-nodes
jvm.config
experimental.reserved-pool-enabled
true
是否启用Reserved Pool
并发较多时, RESERVED_POOL可能被闲置,可以关闭RESERVED_POOL
config.properties
1.2.3 常见OOM报错
1.3 并行度
操作场景
调整线程数增大task的并发以提高效率。
修改参数
参数名
默认值
描述
优化建议
修改位置
task.concurrency
16
执行join,aggregation等操作的并发度
串行调高并行调低
config.properties
task.max-worker-threads
cpu core * 2
worker处理split的线程数
如果工作器CPU利用率低并且所有线程都在使用中,则增加此数目可以提高吞吐量,但是会导致堆空间使用率增加。将该值设置得太高可能会由于上下文切换而导致性能下降。线程数可通过com.facebook.presto.execution.executor:name = TaskExecutor.RunningSplits JXM对象的RunningSplits属性获得
config.properties
node-scheduler.max-splits-per-node
100
每个worker上处理的split数
单个split处理时间短时调大
config.properties
1.4 元数据缓存
操作场景
Presto支持Hive connector,元数据存储在Hive metastore中,调整元数据缓存的相关参数可以提高访问元数据的效率。
修改参数
参数名
默认值
描述
优化建议
修改位置
hive.metastore-cache-ttl
Time to live Hive metadata cache
1440s
catalog/hive.properties
hive.metastore-refresh-interval
How often to refresh the Hive metastore cache
1h
catalog/hive.properties
hive.metastore-cache-maximum-size
Hive metastore cache maximum size
10000
catalog/hive.properties
hive.metastore-refresh-max-threads
Maximum number of threads to refresh Hive metastore cache.
100
catalog/hive.properties
1.5 Hash优化
操作场景
针对Hash场景的优化。
修改参数
参数名
默认值
描述
优化建议
修改位置
query.initial-hash-partitions
8, If the value is larger than the number of machines available during query scheduling, Presto will use all available machines
当分区系统设置为FIXED时,此值用于确定可以有多少个节点共享同一查询
Value lower then number of presto nodes may lower the utilization of cluster in low traffic environment. Setting the number to to high value will cause assigning multiple partitions of same query to one node or ignoring the setting - in some configurations the value is internally capped at number of available worker nodes
config.properties
optimizer.optimize-hash-generation
Compute hash codes for distribution, joins, and aggregations early in query plan which may allow to drop some of computation later in query processing with the cost of increased preprocessing. In most cases it should decrease overall query processing time
true
config.properties
1.6 优化OBS相关参数
操作场景
Presto支持on OBS,读写OBS过程中可以调整OBS客户端参数来提交读写效率。
修改参数
参数名
默认值
描述
优化建议
修改位置
fs.obs.readahead.range
读数据时,发起预读建立range读的请求大小
4194304
core-site.xml
fs.obs.write.buffer.size
OBS FS中的读写缓冲区大小
262144
core-site.xml
fs.obs.read.buffer.size
OBS FS中的读写缓冲区大小
262144
core-site.xml
本博客地址:https://bbs.huaweicloud.com/blogs/173486
大数据
版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。