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