在spark中查找数据的最佳选择

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在spark中查找数据的最佳选择相关的知识,希望对你有一定的参考价值。

我有一个要求,我需要从kafka主题中读取消息,对数据集进行查找,然后根据查找数据的结果发送消息。以下示例使这一点更加清晰。

Kafka主题接收xml消息,该消息具有保存值2345的字段messageID

我们进行查找并确认之前尚未发送此ID的消息。如果这返回false,我们发送消息,然后将此messageID添加到查找数据。如果此messageID已经在查找数据中,我们不会发送它。

目前,这是通过使用hbase表来保存查找数据来实现的。但是,我们每天可以收到数百万条消息,我担心组件的性能会随着时间的推移而降低。

是否有另一种更优化的解决方案来使用hbase来查找此查找数据,例如将此数据存储在RDD的内存中?我尝试了这个,但有一些困难,因为火花上下文显然不可序列化,所以我无法添加到现有的lookuo数据集

任何建议都非常感谢!

非常感谢

Dan

答案

Spark适用于处理大量数据以用于分析目的。创建RDD抽象是为了增强Map-Reduce过程的性能限制。 Spark不像HBase那样取代了键/值存储。 查看您的问题在我看来,您需要在HBase之上的缓存层。这可以通过Redis或其他分布式缓存机制来实现。 RDD cachined在这里没有用,因为

  1. 无法保证整个数据都在内存中
  2. 配对的rdd支持基于键值的查找,但是它遵循用于查找键的map reduce模式。 RDD是一种抽象,它将有关数据位置和Lineage DAG信息的信息保存在其中。除非在其上发生某些操作,否则RDD不会实现数据。现在,即使您将所有数据保存在缓存中,RDD也需要搜索数据以进行查找。它不像HBase,你有一个键的索引,查找可以在恒定的时间内完成。

现在,您可能可以构建一些布隆过滤器,对数据建立索引并使用Spark进行查找。但是,这可能很难。

以上是关于在spark中查找数据的最佳选择的主要内容,如果未能解决你的问题,请参考以下文章

在一些片段之间填充对象变量的最佳方法

spark中将每个组作为新数据帧并在循环中传递另一个函数的最佳方法是啥?

pySpark 在 UDF 中使用 Spark SQL/DF 的最佳选择?

在这个 spark 代码片段中 ordering.by 是啥意思?

在 Spark scala 中更新数据框的最佳方法

Spark SQL下的Parquet使用最佳实践和代码实战