我正在寻找处理来自大索引的并行数据的方法,
我考虑过快照索引(到hdfs),然后提交spark作业来处理记录。
解决它的另一种方法是使用elastic with spark。
我的问题:
------编辑------
我的索引有些变化,有Dogs索引,即dogs-relations索引。
狗指数:
...
{
name: "rex",
id: 1,
...
},
{
name: "bobby",
id : 2,
...
}
...
狗狗关系指数:
...
{
first_dog_id: 1,
second_dog_id: 2,
relation_type: "enemies",
...
}
...
该关系是多对多的,因此每条狗在狗关系索引中可以有许多文档。我想创建2个RDD(狗和关系),并以某种方式将它们加入内存,而不广播数据(大索引)
最佳答案
点1.
我不这么认为,AFAIK最接近的选择是使用扫描/滚动API(取决于您所使用的ES版本):ES v5.1 scroll api。
您可以通过这种方式将索引“导出”到文本文件。
点2。
做代码的最简单方法(按代码进行)(每个狗文档的elasticsearch查询)是使用elastic-hadoop加载dogsRDD,然后对于子查询行为,执行以下操作:
dogsRDD.mapPartitions { dogsPart =>
// this code is executed by the workers
dogsPart.map { dog =>
// do the dog specific ES queries here
}
}
但是,您将无法使用
elastic-hadoop
来完成特定于狗的工作,而必须使用scala ES连接器或HTTP,以及ES扫描/滚动API。您可能可以通过更详细地了解用例来改善此情况,也许可以将工作分解为多个可管理的步骤idk。
这可能对您生命周期的后期没有帮助,但是我想以最有 build 性的方式提出一些意见:
只是以为我会分享我的一些发现,以防它在某种程度上有用。 :)
关于hadoop - 如何基于弹性hadoop加入RDD,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41552208/