【问题标题】:Data load from HDFS to ES taking very long time从 HDFS 到 ES 的数据加载需要很长时间
【发布时间】:2019-08-03 06:21:51
【问题描述】:

我在 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 节点摄取。

【问题讨论】:

    标签: elasticsearch hive query-optimization elasticsearch-hadoop


    【解决方案1】:

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

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

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

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

    【讨论】:

    • 谢谢肯德尔。我正在使用 elasticsearch-hadoop 连接器来移动数据。我在我们的数据中使用 id 作为 _id,因为根据需求搜索将仅基于 _id。我将尝试将副本数更改为零并尝试。
    猜你喜欢
    • 2017-08-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-01-19
    • 1970-01-01
    • 2019-12-20
    相关资源
    最近更新 更多