带有数十亿条记录的BloomFilter的Spark导致Kryo序列化失败:缓冲区溢出。

may*_*yur 5 scala bloom-filter bigdata apache-spark

我在Apache Spark中使用了Bloom过滤器的Breeze实现。我的布隆过滤器需要200,000,000个密钥。但是我面临以下异常:

User class threw exception: org.apache.spark.SparkException: Job aborted due to stage failure: Task 1 in stage 5.0 failed 4 times, most recent failure: Lost task 1.3 in stage 5.0 (TID 161, SVDG0752.ideaconnect.com): org.apache.spark.SparkException: Kryo serialization failed: Buffer overflow. Available: 0, required: 1 
Run Code Online (Sandbox Code Playgroud)

我知道要避免这种情况,我可以增加spark.kryoserializer.buffer.max值,但是由于群集资源的限制,我不能将其增加到2GB以上。

以下是代码:

val numOfBits=2147483647
val numOfHashFun=13
val bf = hierachyMatching.treeAggregate(new BloomFilter[String](numOfBits,numOfHashFun))(
  _ += _, _ |= _)
Run Code Online (Sandbox Code Playgroud)

其中hierachyMatching是包含200M条记录的String类型的Rdd。

我的问题:

  • 我如何在不增加buffer.max值的情况下解决此异常?
  • 是否可以使用驱动程序存储器6512mb和How构造一个在火花上包含超过20亿位的Bloom过滤器?

任何与此有关的想法或建议,将不胜感激。提前致谢。