从 HDFS 到 ES 的数据加载需要很长时间

Data load from HDFS to ES taking very long time

我在配置单元中创建了一个外部 table 并且需要将数据移动到 ES(2 个节点,每个节点有 1 TB)。下面的常规查询需要很长时间(超过 6 小时)才能获得具有 9GB 数据的源 table。

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

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

您没有提到将数据输入 ES 所使用的方法,因此很难看出您是否使用了摄取管道或什么技术来弥补差距。鉴于此,我会坚持 generic advice on how to optimize ingestion into Elasticsearch.

Elastic 发布了一些优化摄取系统的指南,我们发现以下三点确实产生了真正的影响:

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

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