Apache Drill JSON查询性能

时间:2017-11-08 19:15:11

标签: apache-drill

我需要帮助来尝试提高运行json的聚合查询的性能。

我对json的简单count(*)聚合查询需要11分钟才能完成,只需要640MB的数据。

我有一个单节点集群(8核,8GB内存,使用本地SSD存储)。

数据统计:

  • 163,783 json files
  • 640MB总计

从钻取UI我可以看到以下内容:

DURATION: 11 min 27.665 sec
*PLANNING*: 06 min 30.337 sec
QUEUED: Not Available
EXECUTION: 04 min 57.328 sec

我可以做些什么来提高性能?我是否需要更改json文件的存储或压缩以提高读取性能?

1 个答案:

答案 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数据上的简单计数()更好,更可靠。