Apache Drill不使用max RAM

时间:2016-02-05 15:34:07

标签: apache-drill

我在拥有16GB内存的ubuntu机器上本地运行apache drill 1.0(然后是1.4)。当我使用非常大的制表符分隔文件(52百万行,7GB),并执行

Select distinct columns[0] from `table.tsv` 

,在第二次运行相同的查询时,性能似乎没有提高(两者都耗时53秒)。通常第二次运行相同的查询时,与第一次查询相比,所需时间不到一半。好像Drill没有使用所有已分配的内存。

我的conf / drill-env.sh文件如下所示:

DRILL_MAX_DIRECT_MEMORY="14G"
DRILL_HEAP="14G"

export DRILL_JAVA_OPTS="-Xms$DRILL_HEAP -Xmx$DRILL_HEAP -XX:MaxDirectMemorySize=$DRILL_MAX_DIRECT_MEMORY -XX:MaxPermSize=14G -XX:ReservedCodeCacheSize=1G -Ddrill.exec.enable-epoll=true"

我也在演练

中做了这个
alter system set `planner.memory.max_query_memory_per_node`=12884901888

但是,当我使用smem检查内存使用情况时,它只使用大约5GB的RAM。

如果我将表格大小减少到只有1百万行,我可以看到第一个查询在3.6秒内完成,第二次查询运行相同的查询,只花了1.8秒

我错过了什么?

2 个答案:

答案 0 :(得分:0)

您只有16 GB的RAM,Drill不可能使用14 GB的堆和14 GB的直接内存。这些类型的内存不重叠。

我建议您为操作系统保留2 GB,因此剩下14 GB,为直接内存分配12 GB,为堆分配2 GB。

您将找到名为 planner.width.max_per_node 的选项,其值为核心数的70%。将其增加到您认为合适的数量。

您可能需要阅读the answers for this question

答案 1 :(得分:0)

我可以获得查询以使用所有可用内存(如定义的那样) 由set planner.memory.max_query_memory_per_node = n)来 set planner.memory.min_memory_per_buffered_op = n(与...相同) planner.memory.max_query_memory_per_node。

我无法在set planner.memory.min_memory_per_buffered_op上找到任何文档,我不确定这是否是预期的行为。