java - Apache 钻机 : How to resolve - RESOURCE ERROR: One or more nodes ran out of memory while executing the query?

标签 java out-of-memory apache-drill

我正在使用Apache Drill版本1.14windows系统并使用以下命令运行 Drill:

sqlline.bat -u "jdbc:drill:zk=local"

我正在尝试execute一个join query两个compressedarchived CSV文件。

查询:

SELECT  *  FROM dfs.`C:\Users\admin\Desktop\DRILL_FILES\csvFileParquet\TBL_MOREDATA-20180924181406.tar.gz` AS Table0 INNER JOIN dfs.`C:\Users\admin\Desktop\DRILL_FILES\csvFileParquet\TBL_MOREDATA1-20180924181406.tar.gz` AS Table1  ON  Table0.columns[0]=Table1.columns[0]

但是内存不足,发生错误:

org.apache.drill.common.exceptions.UserRemoteException: RESOURCE ERROR: One or more nodes ran out of memory while executing the query. Unable to allocate buffer of size 131072 (rounded from 86104) due to memory limit (630194176). Current allocation: 630108434 Fragment 0:0 [Error Id: 585c0644-5fd5-446e-b9b3-d48e0771eb2a on DESKTOP-SM3E3KM:31010]

为了解决该问题,我尝试更新 config\drill-env.sh文件,但问题仍然相同,看起来更新脚本文件没有反射(reflect)更改,因为我试图在每次钻头和平启动时将直接内存增加到系统内存(RAM)之外。甚至没有提示您超出了内存,因此,看起来更改没有反射(reflect)。

export DRILLBIT_MAX_PROC_MEM=12G
export DRILL_HEAP=2G
export DRILL_MAX_DIRECT_MEMORY=10G

而我的系统主内存只有 8 GB。

请帮助我解决内存不足错误。我什至运行了以下查询,以便遵循故障排除说明,但问题仍然相同。

alter session set `planner.enable_hashagg` = false;  
alter session set `planner.enable_hashjoin` = false;
alter session set planner.width.max_per_node=3; 
alter system set planner.width.max_per_query = 100;

最佳答案

基于doc Drill仅支持压缩文件读取,不支持存档。您可以创建 Jira 票证来实现它。 如果读取存档的压缩 CSV 文件,Drill 将返回第一行不可读的数据。因此您可以使用offset 1

Drill 利用直接内存来存储批处理。所以JOIN操作需要更多的直接内存。 减少并行性可以减少内存消耗:
planner.width.max_per_node(以及可选的planner.width.max_per_query)设置为1。
禁用 HashJoin 运算符使用:planner.enable_hashjoin
查看更多Drill documentation.
另请考虑启用planner.memory.enable_memory_estimation选项。

要验证是否应用了 drill-env.sh 中的配置,请运行以下查询:

select * from sys.memory;

关于java - Apache 钻机 : How to resolve - RESOURCE ERROR: One or more nodes ran out of memory while executing the query?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52973880/

相关文章:

java - ListView 项目文本不改变颜色

Java 8,在流中使用 .parallel 会导致 OOM 错误

python - MemoryError 将两个数据帧与 pandas 和 dasks 合并——我该怎么做?

apache-drill - Apache Drill 与 Kerberos

apache-drill - Apache 钻 > sqlline : how to run a sql script containing variable

java - 使用 GWT 的 "shared"文件夹来存储 EJB bean

java - 为什么在maven周期的install阶段,也会调用package阶段?

android - Android 在消耗多少内存后抛出 OutOfMemoryException

tensorflow - 未能分配 X 字节的统一内存;结果 : CUDA_ERROR_OUT_OF_MEMORY: out of memory

apache - 如何使用 Windows 在单个节点中启动分布式钻头?