Apache spark 性能优化

Apache spark 性能优化,apache-spark,optimization,query-optimization,spark-streaming,Apache Spark,Optimization,Query Optimization,Spark Streaming,我在蜂箱里有6张桌子。我使用spark streaming将这些表与即将到来的Kafka流数据连接起来。我使用了RegisterEmptable函数并注册了所有6个表,甚至还注册了传入的Kafka数据。然后我在所有表之间应用了内部联接 范例- select * from tableA a join tableB b on a.id = b.id join tableC c on b.id = c.id ...... ...... 完成连接大约需要3分钟。我可以看到大量的数据混乱。

我在蜂箱里有6张桌子。我使用spark streaming将这些表与即将到来的Kafka流数据连接起来。我使用了RegisterEmptable函数并注册了所有6个表,甚至还注册了传入的Kafka数据。然后我在所有表之间应用了内部联接

范例-

select * from tableA a 
join tableB b on a.id = b.id     
join tableC c on b.id = c.id
......
......
完成连接大约需要3分钟。我可以看到大量的数据混乱。

我使用了以下属性-

  conf.set("spark.serializer", "org.apache.spark.serializer.KryoSerializer")
  conf.set("spark.kryoserializer.buffer.max", "512")
  conf.set("spark.sql.broadcastTimeout", "36000")
  conf.set("spark.sql.autoBroadcastJoinThreshold", "94371840")
有没有办法减少无序读写。

您需要:

  • 将数据帧转换为键/值pairdd
  • 使用相同的分区器对所有对RRDD进行分区
  • cache()
    中间结果
  • 然后,您可以在连接操作中使用RDD(但还需要将kafka数据转换为PairRDD)
  • 这样一来,第一次连接会很慢,而下一次连接会更快,因为数据的重新分区只会发生一次


    关于spark中的连接,有一些很好的提示

    我是否正确地理解了,您需要定期执行此连接?是的,每5分钟执行一次。