繁体   English   中英

将大量数据编入Elasticsearch中

[英]Index large amount of data into elasticsearch

我在HBase中拥有超过60亿个社交媒体数据(包括内容/时间/作者和其他可能的字段),在48个服务器中有4100个区域,我现在需要将这些数据刷新到Elasticsearch中。

我对ES的批量API很清楚,并且在Java中使用MapReduce批量使用仍然需要花费很多天(至少一周左右)。 我可以改用spark,但我认为不会有太大帮助。

我想知道是否还有其他技巧可以将这些大数据写入ElasticSearch? 像手动写入es索引文件并使用某种恢复将文件加载到本地文件系统中一样?

感谢任何可能的建议,谢谢。

==============

有关集群环境的一些详细信息:

spark 1.3.1独立(我可以在纱线上更改它以使用Spark 1.6.2或1.6.3)

Hadoop 2.7.1(HDP 2.4.2.258)

ElasticSearch 2.3.3

AFAIK Spark是从以下2个选项中进行索引的最佳选择。 以下是我提供的方法:

划分(输入扫描条件)并征服60亿社交媒体数据:

ID建议使用不同的搜索条件创建多个Spark / Mapreduce作业(根据类别或其他内容将60亿个社交媒体数据分为6部分)并并行触发它们。 例如,基于数据捕获时间范围(scan.setTimeRange(t1,t2))或具有一些模糊行逻辑(FuzzyRowFilter)的速度,肯定可以加快速度。

要么

串流方式:

您还可以考虑在通过spark或mapreduce插入数据时同时为它们创建索引。

例如,在SOLR的情况下, clouder具有NRT hbase lily indexer ...,即当同时基于WAL(预写日志)条目填充hbase表时,它将创建solr索引。 检查弹性搜索是否有类似的东西。

即使它也不适合ES,也不必费心,而使用Spark / Mapreduce程序自行提取数据时,您可以自己创建。

选项1 :

ID建议如果您对Spark没问题,那是一个很好的解决方案。Spark支持hadoop 2.1中ES的本机集成。 看到

elasticsearch-hadoop以RDD(弹性分布式数据集)(准确地说是Pair RDD)的形式提供了Elasticsearch和Apache Spark之间的本机集成,可以从Elasticsearch读取数据。 RDD有两种形式:一种用于Scala(将数据作为带有Scala集合的Tuple2返回),另一种用于Java(将数据作为包含java.util集合的Tuple2返回)。

选项2:您知道比火花慢

将数据写入Elasticsearch借助elasticsearch-hadoop,Map / Reduce作业可以将数据写入Elasticsearch,使其可通过索引进行搜索。 elasticsearch-hadoop支持(所谓的)旧的和新的Hadoop API。

我发现了一个提高自己的大容量索引性能的实用技巧。

我可以在客户端中计算哈希路由,并确保每个批量请求都包含具有相同路由的所有索引请求。 根据路由结果和ip的分片信息,我将批量请求直接发送到相应的分片节点。 此技巧可以避免大量重新路由的成本,并减少可能导致EsRejectedException的大量请求线程池占用。

例如,我在不同的计算机上有48个节点。 假设我将包含3000个索引请求的批量请求发送到任何节点,这些索引请求将根据路由重新路由到其他节点(通常是所有节点)。 客户端线程必须等待整个过程完成,包括处理本地批量和等待其他节点的批量响应。 但是,没有重新路由阶段,网络成本就消失了(转发到副本节点除外),客户端只需等待更少的时间。 同时,假设我只有1个副本,则批量线程的总占用仅为2个。 (客户端->主碎片和主碎片->复制碎片)

路由哈希:

shard_num = murmur3_hash (_routing)%num_primary_shards

尝试看一下: org.elasticsearch.cluster.routing.Murmur3HashFunction

客户端可以根据对Cat api的请求获得分片和索引别名。

碎片信息网址: 猫碎片

别名映射网址: cat别名

注意事项:

  1. ES可能会更改不同版本的默认哈希函数,这意味着客户端代码可能与版本不兼容。
  2. 该技巧基于哈希结果基本平衡的假设。
  3. 客户应考虑容错能力,例如到相应分片节点的连接超时。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM