Spark Sql 介紹與實戰
Spark Sql 介紹與實戰
目錄
Spark Sql介紹
Catalyst
SQL Core
https://spark.apache.org/docs/latest/sql-data-sources.html
SQL實戰
spark-sql#啟動命令 show databases; use ssb; show tables; desc customer; desc extended customer; #更詳細的資訊 select c_region,count(*) from customer group by c_region; explain select c_region,count(*) from customer group by c_region; #不會真正去執行sql語句,只是展示物理的執行計劃 explain extended select c_region,count(*) from customer group by c_region; #更加詳細 beeline -u jdbc:hive2://localhost:10001 -n hadoop show databases; use ssb_5; show tables; select c_region,count(*) from customer group by c_region; explain select * from lineorder,customer where lo_custkey=c_custkey; #檢視物理執行計劃,進行分析優化 desc extended customer/lineorder; #檢視資料量 cache table xxx as sql...; #進行臨時表快取
broadcast join == map join
小表進行廣播到每個executor以實現mapjoin,可以減少shuffle,大表就不用shuffle了
重點問題
DataFrame API的write介面
Catalyst優化的API開發的Spark任務
Spark中支援的不同Join型別、場景
QA
spark 的輸出的 INFO資訊太多了
設定日誌級別:sparkSession.sparkContext.setLogLevel("warn")
比如需要統計某個時間範圍內,客服對使用者的訊息回覆率,用sparksql這塊處理是否合適呢
怎麼寫mysql,就怎麼寫sparksql,業務邏輯的表達都是一樣的
在hive裡面演示explain, 跟在spark-sql的裡面用是一樣的嗎?
explain可以加在所有query前面,是通用的
Broadcast Hash join Shuffle Hash Join Sort-Merge Join Shufffle Nested Loop Join 對應的應用場景嗎
按shuffle型別分為map, shuffle,bucket join.按執行運算元可以分為sortmerge, hash, nestedloop,這兩種是正交的
dataframe和dataset,這兩個區別
dataframe=dataset[row],是種特殊型別的dataset,專門處理關係型資料,處理的資料有schema資訊,所以可以優化執行計劃
Catalyst 會進行sql的優化,那麼是否sql可以不必優化只要表達出想做的的操作就可以麼?sparksql既然通過優化以後會轉化成RDD去執行計劃,是否RDD在處理速度上會更有優勢?尤其是面對複雜的邏輯的時候。
SQL就是個表示式的語言,具體一個SQL怎麼變成一個高效的分散式spark任務就是catalyst做的事情。理論上自己基於rdd可以做到最優,但是絕大部分人沒有這個水平,不如用sparkSQL,簡單高效
spark 開發效率比hadoop高,感覺像寫本地程式。那hadoop能做的mr,spark都能完成嘛?
都能,而且支援更豐富的運算元型別