[英]How to handle big reference data in Spark
我有一個大數據集(比如說4gb),可以用作處理另一個大數據集(100-200gb)的參考源。我有30個執行者的集群,可以在10個節點上執行此操作。 所以對於每個執行者我都有自己的jvm,對嗎? 每次加載整個參考數據集。 而且它需要很長時間並且效率很低。 是否有什么好的方法可以解決這個問題? 目前,我正在s3 aws上存儲數據,並使用emr運行所有內容。 使用更優雅的存儲(我可以動態查詢)或將例如redis作為群集的一部分並推送數據而不是查詢,這可能是個好習慣嗎?
UPD1:
val df = sparkSession.sqlContext.read.format("com.databricks.spark.csv")
.option("header", "false")
.schema(schema)
.option("delimiter", ",")
.load(path)
.coalesce(3)
.as[SegmentConflationRef]
val data: Seq[SegmentConflationRef] = ds.collect()
val map = mutable.Map[String, Seq[SegmentConflationRef]]()
data.groupBy(_.source_segment_id).map(c => {
map += (c._1 -> c._2.sortBy(_.source_start_offset_m))
})
因此,在這種情況下,我希望在每個執行程序中都復制參考映射。 一個問題是如何在節點之間廣播如此大的地圖,或者什么是更好的方法? 可能不是一開始就使用Spark,而是在每個執行程序中從hdfs本地加載數據嗎?
遺憾的是,Apache Spark並不是解決任何問題的即插即用解決方案。
首先,您必須對Apache Spark的工作原理有一般的了解。 然后,您必須使用Spark UI來監視和查看為什么您的過程不是最佳的。 本頁上鏈接的正式文檔通常是一個好的開始:
https://spark.apache.org/docs/latest/index.html
真正有用的是學習使用Spark Web UI! 一旦了解了每條信息的含義,就知道應用程序的瓶頸在哪里。 本文介紹Spark Web UI的基本組件: https : //databricks.com/blog/2015/06/22/understanding-your-spark-application-through-visualization.html
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.