heap-memory - 如何选择钻头以使用偏移量运行查询?
问题描述
例如,我有两个在不同机器上运行的钻头和一个有 200 行的表。是否可以手动选择drillbit1获取前100 行,drillbit2使用偏移查询获取下100 行并获得合并结果(共200 行)?
因为在我的情况下,我有一个大小约为 500kb 的镶木地板文件,但我无法select * from dfs.'/path/to/parquet/file';
通过 web ui 无限制地获取查询结果,因为它返回错误:
RESOURCE ERROR: There is not enough heap memory to run this query using the web interface.
Please try a query with fewer columns or with a filter or limit condition to limit the data returned.
You can also try an ODBC/JDBC client.
以下是两个钻头的配置:
机器上的 RAM 大小 = 8G
DRILLBIT_MAX_PROC_MEM = "6G"
DRILL_HEAP = "2G"
DRILL_MAX_DIRECT_MEMORY = "3G"
Apache Drill 版本:1.14.0
我已经按照其他站点上的建议运行了以下查询,以避免堆内存空间错误:
alter session set planner.width.max_per_node = 1
alter system set planner.width.max_per_query = 2
但我仍然面临堆空间错误。任何帮助,将不胜感激。
解决方案
您无需管理钻头执行和合并结果。Drill 在内部为您完成。而且 Drill 中的数据不在堆上,它使用直接内存。堆主要用于Drill计划和执行过程。
看起来您有问题,因为您的 Drill 内存非常有限。Drill 的推荐堆大小为 4-8G,请在此处查看详细信息:https ://drill.apache.org/docs/configuring-drill-memory/
目前所有 Drill 单元测试都无法通过 8G 内存机器,用作 CI(TravisCI 和 CircleCI):https ://github.com/apache/drill/blob/master/.circleci/config.yml#L52
推荐阅读
- java - 画圈
- c - 如何阻止 c 编程舍入小数位
- c++ - CMAKE 删除 lib 并使用 prebuild one
- html - 如何使文本相对于按钮居中,但不在容器中居中?
- spring - Spring Integration:发布/订阅:订阅者是否有办法让消息为它排队,即使它暂时处于非活动状态?
- mongodb - 如何在 Mongo 服务器端 javascript 中使用二进制或 UUID 类型?
- arrays - 为什么我在排序数组的第一个元素中得到一个随机数?
- bash - 如何从案例中获取名称列表?
- python - 如何在python中使用正则表达式跳过字符串中2个字符之间的字符?
- oracle - 如何使用气流将数据从一个 oracle 数据库传输到另一个 oracle 数据库