Spark精华问答 | spark的组件构成有哪些?
戳藍字“CSDN云計算”關注我們哦!
Spark是一個針對超大數據集合的低延遲的集群分布式計算系統,比MapReducer快40倍左右,是hadoop的升級版本,Hadoop作為第一代產品使用HDFS,第二代加入了Cache來保存中間計算結果,并能適時主動推Map/Reduce任務,第三代就是Spark倡導的流Streaming。今天,就讓我們一起來看看關于它的更加深度精華問答吧!
1
Q:Spark的組建構成有哪些?
A:?1:每一個application有自己的executor的進程,它們相互隔離,每個executor中可以有多個task線程。這樣可以很好的隔離各個applications,各個spark applications 不能分享數據,除非把數據寫到外部系統。
?2:SparkContext對象可以視為Spark應用程序的入口,主程序被稱為driver program,SparkContext可以與不同種類的集群資源管理器(Cluster Manager),例如Hadoop Yarn、Mesos等 進行通信,從而分配到程序運行所需的資源,獲取到集群運行所需的資源后,SparkContext將得到集群中其它工作節點(Worker Node) 上對應的Executors (不同的Spark應用程序有不同的Executor,它們之間也是獨立的進程,Executor為應用程序提供分布式計算及數據存儲功能),之后SparkContext將應用程序代碼分發到各Executors,最后將任務(Task)分配給executors執行。
2
Q:Spark算子內能不能引用SparkSession?
A:Spark的算子是在executor上執行的,數據也是放在executor上。executor和driver并不在同一個jvm(local[*]除外),所以算子是不能訪問在driver上的SparkSession對象。
好好品味一下這個圖:
? ? ?
如果一定要“在算子里訪問SparkSession”,那只能把數據collect回Driver,然后用Scala 集合的算子去做。這種情況下只能適用于數據量不大(多大取決于分配給Driver的內存)。另外建議是通過join的方式獲取關聯數據并進行處理。
3
Q:一個使用Sparksql查詢Hbase數據的功能,只取結果的1000條數據,用的limit算子,最后用foreachPartition算子將數據插入數據庫中,但是Hbase那張表的數據量很大,有3000多個region,查看sparkui,發現竟然是要把所有的數據都要加載一遍取出對應的數據,所以Sparksql計算的時候是要把所有的數據都要加載一遍計算嗎?
A:如果數據量巨大而集群計算資源吃不消的話,就建議不要用HBase存儲數據,HBase并不留存任何結構化信息,同時也沒有索引,因此并不適合多維查詢。用Hive+Parquet+合理的分區分桶優化+SparkSQL查詢性能會可觀得多。另外更酷炫的是Spark+CarbonData,滿足絕大多數OLAP需求,甚至詳單查詢的性能也很恐怖,并且支持update delete insert。
4
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不適合大數據相關的開發。
5
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、掃描添加小編微信,備注“姓名+公司職位”,加入【云計算學習交流群】,和志同道合的朋友們共同打卡學習!
推薦閱讀:
做了中臺就不會死嗎?每年至少40%開發資源是被浪費的!
美女主播變大媽:在bug翻車現場說測試策略
漫畫高手、小說家、滑板專家……解鎖程序員的另一面!
手把手教你如何用Python模擬登錄淘寶
鴻蒙霸榜 GitHub,從最初的 Plan B 到“取代 Android”?
每天超50億推廣流量、3億商品展現,阿里媽媽的推薦技術有多牛?
真香,朕在看了!
總結
以上是生活随笔為你收集整理的Spark精华问答 | spark的组件构成有哪些?的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: boost::contract模块实现v
- 下一篇: 微服务的历史与陷阱