我需要帮助来尝试提高运行json的聚合查询的性能。
我对json的简单count(*)
聚合查询需要11分钟才能完成,只需要640MB的数据。
我有一个单节点集群(8核,8GB内存,使用本地SSD存储)。
数据统计:
从钻取UI我可以看到以下内容:
DURATION: 11 min 27.665 sec *PLANNING*: 06 min 30.337 sec QUEUED: Not Available EXECUTION: 04 min 57.328 sec
我可以做些什么来提高性能?我是否需要更改json文件的存储或压缩以提高读取性能?
答案 0 :(得分:1)
有几件事:
如上所述,这是一个小数据集的大量文件。我通常会发现Drill能够最好地处理100-200MB范围内的文件,等待整体数据集大小和用例。然后它通常可以为每个核心处理大约100-200MB / s的JSON,等待JSON和查询的复杂性以及系统的速度。
您可以使用Drill在数据集上创建较小的文件集,尝试在当前数据集上执行CTAS并将格式设置为JSON。将store.json.writer.uglify设置为true也会编写更紧凑的JSON,空格更少(但人类可读性更低)。或者简单地将当前文件与另一个工具合并到大约100-200MB的文件中。
JSON上的count()并不像听起来那么简单。如果您尝试了解记录总数,则可以选择所有记录中存在的字段,然后专门对该字段进行计数。如果你需要像flatten那样进行嵌套操作,你仍然可以选择一个将出现在所有记录中的字段。我发现它比JSON数据上的简单计数()更好,更可靠。