2

我在 hive 中创建了一个外部表,需要将数据移动到 ES(2 个节点,每个节点 1 TB)。对于具有 9GB 数据的源表,以下常规查询需要很长时间(超过 6 小时)。

INSERT INTO TABLE <ES_DB>.<EXTERNAL_TABLE_FOR_ES> 
SELECT COL1, COL2, COL3..., COL10 
  FROM <HIVE_DB>.<HIVE_TABLE>;

ES 索引具有默认的 5 个分片和 1 个副本。增加分片的数量可以加快摄取速度吗?有人可以提出任何改进以加快 ES 节点摄取。

4

1 回答 1

0

您没有提到您用于将数据输入 ES 的方法,因此很难看出您是否使用了摄取管道或什么技术来弥补差距。鉴于此,我将坚持关于如何优化 Elasticsearch 的摄取的一般建议

Elastic 发布了一些关于优化系统摄取的指南,我们发现以下三点确实起到了真正的作用:

  1. 关闭副本:在注入数据时将副本数设置为零,以消除在注入数据时复制数据的需要。这是一个索引级设置(“number_of_replicas”)
  2. 不要指定 ID:从您的数据库架构中不清楚您是否正在跨任何标识符进行映射,但如果您可以避免将文档 ID 指定给 Elastic 并让它指定自己的 ID,从而显着提高性能。
  3. 使用 Parallel Bulk Operators:使用 BulkAPI 将数据推送到 ES 并使用多个线程提供给它,因此它总是有多个 Bulk 请求在服务器端工作。

最后,您是否安装了 Kibana 并监控了您的节点以了解它们受到的限制?特别是 CPU 或内存?

于 2019-03-15T15:27:59.447 回答