Spark精华问答 | spark的组件构成有哪些?
戳藍(lán)字“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的組建構(gòu)成有哪些?
A:?1:每一個application有自己的executor的進(jìn)程,它們相互隔離,每個executor中可以有多個task線程。這樣可以很好的隔離各個applications,各個spark applications 不能分享數(shù)據(jù),除非把數(shù)據(jù)寫到外部系統(tǒng)。
?2:SparkContext對象可以視為Spark應(yīng)用程序的入口,主程序被稱為driver program,SparkContext可以與不同種類的集群資源管理器(Cluster Manager),例如Hadoop Yarn、Mesos等 進(jìn)行通信,從而分配到程序運行所需的資源,獲取到集群運行所需的資源后,SparkContext將得到集群中其它工作節(jié)點(Worker Node) 上對應(yīng)的Executors (不同的Spark應(yīng)用程序有不同的Executor,它們之間也是獨立的進(jìn)程,Executor為應(yīng)用程序提供分布式計算及數(shù)據(jù)存儲功能),之后SparkContext將應(yīng)用程序代碼分發(fā)到各Executors,最后將任務(wù)(Task)分配給executors執(zhí)行。
2
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ù)并進(jìn)行處理。
3
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。
4
Q:在其他機器上部署了HDFS、HBase、Spark,請問怎么在本地調(diào)試Java Spark來操作遠(yuǎn)程的HBase,就像操作遠(yuǎn)程數(shù)據(jù)庫一樣?
A:1. HBase是一個數(shù)據(jù)庫(分布式),有自己的JDBC,可以根據(jù)HBase的JDBC開發(fā)自己應(yīng)用,?只要能連接上,本地遠(yuǎn)程都可以。
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ā)。
5
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,當(dāng)有一個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天,答:……
同時歡迎大家搜集更多問題,投稿給我們!風(fēng)里雨里留言區(qū)里等你~
福利
1、掃描添加小編微信,備注“姓名+公司職位”,加入【云計算學(xué)習(xí)交流群】,和志同道合的朋友們共同打卡學(xué)習(xí)!
推薦閱讀:
做了中臺就不會死嗎?每年至少40%開發(fā)資源是被浪費的!
美女主播變大媽:在bug翻車現(xiàn)場說測試策略
漫畫高手、小說家、滑板專家……解鎖程序員的另一面!
手把手教你如何用Python模擬登錄淘寶
鴻蒙霸榜 GitHub,從最初的 Plan B 到“取代 Android”?
每天超50億推廣流量、3億商品展現(xiàn),阿里媽媽的推薦技術(shù)有多牛?
真香,朕在看了!
總結(jié)
以上是生活随笔為你收集整理的Spark精华问答 | spark的组件构成有哪些?的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: boost::contract模块实现v
- 下一篇: 微服务的历史与陷阱