Spark精华问答 | Spark的三种运行模式有何区别?
戳藍字“CSDN云計算”關(guān)注我們哦!
Spark是一個針對超大數(shù)據(jù)集合的低延遲的集群分布式計算系統(tǒng),比MapReducer快40倍左右,是hadoop的升級版本,Hadoop作為第一代產(chǎn)品使用HDFS,第二代加入了Cache來保存中間計算結(jié)果,并能適時主動推Map/Reduce任務(wù),第三代就是Spark倡導(dǎo)的流Streaming。今天,就讓我們一起來看看關(guān)于它的更加深度精華問答吧!
1
Q:Spark的三種運行模式有何區(qū)別?Spark?Client?和?Spark?Cluster的區(qū)別??
A:單機:
local[n]?單機偽分布式模式,n個線程分別充當driver和Executors,由于driver和Executors處于同一個jvm,算子可以訪問外部的變量。很多新手的壞習(xí)慣就是從這里養(yǎng)成的。
集群:
standalone?spark?worker組成集群,Spark內(nèi)置的集群搭建模式。適合于不太依賴Hadoop的運算環(huán)境,或者存儲集群和計算集群分離的場景。
yarn?運行與Hadoop?Yarn集群之上。作業(yè)調(diào)度、資源調(diào)度由Yarn分配。Yarn在這方面做得比Spark?standalone集群好,適用于存儲計算合一,或者需要依賴MR、Hive等作業(yè)的場景。
部署模式:
client?driver運行于執(zhí)行spark-submit腳本的機器上。這機器不一定是集群的節(jié)點,你可以在Windows上運行driver,Linux集群運行Executors。cluster?作業(yè)提交后,driver運行于集群上的某一個節(jié)點上,集群視其為一個Executor,相當于后臺程序。
standalone和yarn(還有mesos,這個不了解)都支持client/cluster兩種模式。前者由--master參數(shù)控制,后者由deploy-mode參數(shù)控制。
Q:Spark算子內(nèi)能不能引用SparkSession?
A:Spark的算子是在executor上執(zhí)行的,數(shù)據(jù)也是放在executor上。executor和driver并不在同一個jvm(local[*]除外),所以算子是不能訪問在driver上的SparkSession對象。
好好品味一下這個圖:
? ? ?
如果一定要“在算子里訪問SparkSession”,那只能把數(shù)據(jù)collect回Driver,然后用Scala?集合的算子去做。這種情況下只能適用于數(shù)據(jù)量不大(多大取決于分配給Driver的內(nèi)存)。另外建議是通過join的方式獲取關(guān)聯(lián)數(shù)據(jù)并進行處理。
Q:一個使用Sparksql查詢Hbase數(shù)據(jù)的功能,只取結(jié)果的1000條數(shù)據(jù),用的limit算子,最后用foreachPartition算子將數(shù)據(jù)插入數(shù)據(jù)庫中,但是Hbase那張表的數(shù)據(jù)量很大,有3000多個region,查看sparkui,發(fā)現(xiàn)竟然是要把所有的數(shù)據(jù)都要加載一遍取出對應(yīng)的數(shù)據(jù),所以Sparksql計算的時候是要把所有的數(shù)據(jù)都要加載一遍計算嗎?
A:如果數(shù)據(jù)量巨大而集群計算資源吃不消的話,就建議不要用HBase存儲數(shù)據(jù),HBase并不留存任何結(jié)構(gòu)化信息,同時也沒有索引,因此并不適合多維查詢。用Hive+Parquet+合理的分區(qū)分桶優(yōu)化+SparkSQL查詢性能會可觀得多。另外更酷炫的是Spark+CarbonData,滿足絕大多數(shù)OLAP需求,甚至詳單查詢的性能也很恐怖,并且支持update?delete?insert。
Q:在其他機器上部署了HDFS、HBase、Spark,請問怎么在本地調(diào)試Java?Spark來操作遠程的HBase,就像操作遠程數(shù)據(jù)庫一樣?
A:1.?HBase是一個數(shù)據(jù)庫(分布式),有自己的JDBC,可以根據(jù)HBase的JDBC開發(fā)自己應(yīng)用,?只要能連接上,本地遠程都可以。
2.?Spark集群部署好了,寫好Spark作業(yè)提交給Spark集群,Spark?cluster計算完成后,可以參看結(jié)果。
3.?Spark相關(guān)的rest?server是livy,然而并不是很好用有一定的版本和環(huán)境要求,很多開發(fā)者會選擇避開這個坑,所以你會看到網(wǎng)上的大部分博客。
4.?推薦Linux環(huán)境下開發(fā),少爬很多坑,Windows不適合大數(shù)據(jù)相關(guān)的開發(fā)。
Q:HDP2.4.0版本,Spark?SQL運行在yarn-client模式,現(xiàn)在發(fā)現(xiàn)有些語句跑特別慢,20個節(jié)點,一千多個CPU核心,8TB內(nèi)存,數(shù)據(jù)量不到一億條,都是類似這樣的語句:
group?by十個字段,然后sum20多個值,竟然要十分鐘以上,而把數(shù)據(jù)加載到一臺oracle服務(wù)器,開啟多核計算,同樣語句只要30秒。
Spark?SQL設(shè)置成動態(tài)分配,spark.dynamicallocation.enabled=true,設(shè)置成最大最小和初始化都是300。發(fā)現(xiàn)是卡在最后一個task里,例如有200個任務(wù),卡在最后一個任務(wù)里,最后一個任務(wù)占95%以上時間。Java調(diào)用Spark的thrift?server接口,直接運行SQL語句,沒有采用調(diào)Spark?rdd方法,請問是什么問題?
A:典型的數(shù)據(jù)傾斜問題。在一個stage里,每個task對應(yīng)一個partition,當有一個partition的數(shù)據(jù)量大于其他的,就會出現(xiàn)這樣的情況。這種情況只能用代碼的方法,觀察問題所在的stage對應(yīng)的dataset,然后在執(zhí)行SQL前,reparation(>200,有文檔建議是2k)。如果問題仍存在,就要對group?by的字段值加鹽,group?by一輪后,去鹽再group?by得到最終數(shù)據(jù)。
---------------- ?完? --------------
小伙伴們沖鴨,后臺留言區(qū)等著你!
關(guān)于Spark,今天你學(xué)到了什么?還有哪些不懂的?除此還對哪些話題感興趣?快來留言區(qū)打卡啦!留言方式:打開第XX天,答:……
同時歡迎大家搜集更多問題,投稿給我們!風里雨里留言區(qū)里等你~
---------------- ?完? --------------
1.微信群:
添加小編微信:color_ld,備注“進群+姓名+公司職位”即可,加入【云計算學(xué)習(xí)交流群】,和志同道合的朋友們共同打卡學(xué)習(xí)!
2.征稿:
投稿郵箱:liudan@csdn.net;微信號:color_ld。請備注投稿+姓名+公司職位。
推薦閱讀
Gartner的預(yù)言:通向混合IT之旅
崩潰!新浪程序員加班錯失 77 萬年會大獎
剛剛!華為又被美國盯上了!
阿里“菜鳥”AI?
以太坊升級的拖油瓶,竟只是這幾行代碼
程序員有話說 | 程序猿在乘地鐵的時候都在想什么?
清華北大“世界排名斷崖式下跌”?
點擊“閱讀原文”,打開 CSDN App 閱讀更貼心!
總結(jié)
以上是生活随笔為你收集整理的Spark精华问答 | Spark的三种运行模式有何区别?的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 钱袋宝交易是什么意思
- 下一篇: 只了解View的事件分发是不够的,来看下