全國(guó)咨詢(xún)/投訴熱線:400-618-4000

首頁(yè)技術(shù)文章正文

相比Hive,Spark處理數(shù)據(jù)的速度為什么更快?

更新時(shí)間:2021-05-20 來(lái)源:黑馬程序員 瀏覽量:

1577370495235_學(xué)IT就到黑馬程序員.gif

問(wèn)題分析

考官主要考核你對(duì)Spark和Hadoop運(yùn)行機(jī)制的理解,考察你對(duì)技術(shù)應(yīng)用場(chǎng)景的敏感性和理解程度,這對(duì)工作的具體質(zhì)量有很大的影響。

核心問(wèn)題講解

Spark SQL比Hadoop Hive快,是有一定條件的,而且不是Spark SQL的引擎比Hive的引擎快,相反,Hive的HQL引擎還比Spark SQL的引擎更快。
其實(shí),關(guān)鍵還是在于Spark 本身快。那么Spark為什么快呢?

  1. 消除了冗余的HDFS讀寫(xiě)
    Hadoop每次shuffle操作后,必須寫(xiě)到磁盤(pán),而Spark在shuffle后不一定落盤(pán),可以cache到內(nèi)存中,以便迭代時(shí)使用。如果操作復(fù)雜,很多的shufle操作,那么Hadoop的讀寫(xiě)IO時(shí)間會(huì)大大增加。、

  2. 消除了冗余的MapReduce階段
    Hadoop的shuffle操作一定連著完整的MapReduce操作,冗余繁瑣。而Spark基于RDD提供了豐富的算子操作,且action操作產(chǎn)生shuffle數(shù)據(jù),可以緩存在內(nèi)存中。

  3. JVM的優(yōu)化
    Hadoop每次MapReduce操作,啟動(dòng)一個(gè)Task便會(huì)啟動(dòng)一次JVM,基于進(jìn)程的操作。而Spark每次MapReduce操作是基于線程的,只在啟動(dòng)Executor時(shí)啟動(dòng)一次JVM,內(nèi)存的Task操作是在線程復(fù)用的。
    每次啟動(dòng)JVM的時(shí)間可能就需要幾秒甚至十幾秒,那么當(dāng)Task多了,這個(gè)時(shí)間Hadoop不知道比Spark慢了多少。
    總結(jié):Spark比Mapreduce運(yùn)行更快,主要得益于其對(duì)mapreduce操作的優(yōu)化以及對(duì)JVM使用的優(yōu)化。

問(wèn)題擴(kuò)展

Spark快不是絕對(duì)的,但是絕大多數(shù)Spark都比Hadoop計(jì)算要快。
考慮一種極端查詢(xún):Select month_id,sum(sales) from T group by month_id;這個(gè)查詢(xún)只有一次shuffle操作,此時(shí),也許Hive HQL的運(yùn)行時(shí)間也許比Spark還快。

結(jié)合項(xiàng)目中使用

公司在技術(shù)人員儲(chǔ)備滿足的情況下,同樣的業(yè)務(wù)處理,優(yōu)先選擇spark來(lái)進(jìn)行實(shí)現(xiàn),這樣對(duì)統(tǒng)計(jì)分析的執(zhí)行效率會(huì)有很大的提升。
如果業(yè)務(wù)對(duì)性能沒(méi)有要求,而且內(nèi)存資源有限,也可以采用Hive來(lái)進(jìn)行計(jì)算分析。





 



猜你喜歡:

Redis、傳統(tǒng)數(shù)據(jù)庫(kù)、HBase和Hive幾種數(shù)據(jù)存儲(chǔ)的區(qū)別

安裝Hive的步驟有哪些?安裝過(guò)程詳解

實(shí)時(shí)計(jì)算Spark Streaming工作原理是什么?

黑馬程序員Python+大數(shù)據(jù)開(kāi)發(fā)培訓(xùn)

分享到:
在線咨詢(xún) 我要報(bào)名
和我們?cè)诰€交談!