2016-02-05 14 views
4

我在本地运行apache drill 1.0(然后在1.4)有一个16GB的内存的Ubuntu机器。当我有一个非常大的制表符分隔的文件(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秒

我在想什么了?

回答

0

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

我建议你为操作系统留下2GB的空间,所以你剩下14GB,为直接内存分配12GB,为堆分配2GB。

您会发现一个选项名为planner.width.max_per_node,核心数量为70%。将其增加到您认为合适的数量。

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

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。

我找不到所设置的任何文件planner.memory.min_memory_per_buffered_op,并且我不确定这是否是期望的行为。

+0

这并不真正回答这个问题。如果您有其他问题,可以通过单击[提问](https://stackoverflow.com/questions/ask)。你也可以[添加赏金](https://stackoverflow.com/help/privileges/set-bounties)来绘制mor一旦你有足够的[声誉](https://stackoverflow.com/help/whats-reputation),请关注这个问题。 - [来自评论](/ review/low-quality-posts/18547918) –