市面上有一些初學者的誤解,他們拿spark和hadoop比較時就會說,Spark是內存計算,內存計算是spark的特性。請問在計算機領域,mysql,redis,ssh框架等等他們不是內存計算嗎?依據(jù)馮諾依曼體系結構,有什么技術的程序不是在內存中運行,需要數(shù)據(jù)從硬盤中拉取,然后供cpu進行執(zhí)行?所有說sprk的特點是內存計算相當于什么都沒有說。那么spark的真正特點是什么?拋開spark的執(zhí)行模型的方式,它的特點無非就是多個任務之間數(shù)據(jù)通信不需要借助硬盤而是通過內存,大大提高了程序的執(zhí)行效率。而hadoop由于本身的模型特點,多個任務之間數(shù)據(jù)通信是必須借助硬盤落地的。那么spark的特點就是數(shù)據(jù)交互不會走硬盤。只能說多個任務的數(shù)據(jù)交互不走硬盤,但是sprk的shuffle過程和hadoop一樣仍然必須走硬盤的。
本文是翻譯的出處 https://0x0fff.com/spark-misconceptions/。
原文和作者一起討論:http://www.cnblogs.com/intsmaze/p/7197420.html
微信:intsmaze
誤解一:Spark是一種內存技術
大家對Spark最大的誤解就是spark一種內存技術。其實沒有一個Spark開發(fā)者正式說明這個,這是對Spark計算過程的誤解。Spark是內存計算沒有錯誤,但是這并不是它的特性,只是很多專家在介紹spark的特性時,簡化后就成了spark是內存計算。
什么樣是內存技術?就是允許你將數(shù)據(jù)持久化在RAM中并有效處理的技術。然而Spark并不具備將數(shù)據(jù)數(shù)據(jù)存儲在RAM的選項,雖然我們都知道可以將數(shù)據(jù)存儲在HDFS, HBase等系統(tǒng)中,但是不管是將數(shù)據(jù)存儲在磁盤還是內存,都沒有內置的持久化代碼。它所能做的事就是緩存數(shù)據(jù),而這個并不是數(shù)據(jù)持久化。已經緩存的數(shù)據(jù)可以很容易地被刪除,并且在后期需要時重新計算。