Spark 高難度對話 SQL Server 續篇
- 2019 年 12 月 25 日
- 筆記
GIIS (Global Information Industry Summit)峰會已經進行如火如荼進行了半程。商業數據庫這邊明顯已經冷了下來,$1100 一天的峰會價格,並不是每個企業都吃得消,再者,在東半球上海舉行的 QCon 已經吸引了更多的關注,那裡的互聯網應用似乎更加吸引資本的青睞,入會價格同樣不低,接近 6K RMB ,好在是全場票。
L 這兩天拿着 Spark, Hive, Hadoop 的資料,欣喜若狂。作為技術愛好者,有機會和同門師兄弟切磋,對於一個黃金單身漢來說,簡直比遇見蒼老師還興奮。 這麼大閱讀量,怎麼能少了每一天一杯星巴克。這會兒才 7 點,L已經拿着大杯焦糖拿鐵星冰樂,坐在星巴克碩大的落地窗前,看起資料來。
9 點峰會正式開場,只是準時來參加峰會的人比起前兩天少了許多,又或許都是單位付費,大家都選擇更晚的 10 點來參與。畢竟 5 星級酒店的自助餐,要好好享用嘛。
趁着空檔,L 看到 SQL Server 和 Spark 兩人又出來抽煙了。 L 拿起雜誌,悄悄的站在離他們倆不遠的巴洛克風柱旁。
SQL Server: 小 S ,你們那邊生意可真好。我們這裡都準備收拾回家了,你們那邊好像下半場才剛剛開始一樣。好生羨慕,這好讓我懷念 7,8年前的 MS SQL Summit. 誰都有年輕,芳華正茂的時候啊。
Spark: 大 S ,你也別惆悵了,你們 RDBMS 都風光多少年了。三十年河西,也該輪到我們了。放心吧,後浪只會推你們前浪,絕對拍不死你的。
說完,兩人又是俯首大小,笑得跟兄弟一樣親。
L 看着兩人的背影,想着明年就到 30 歲的坎了,也是唏噓不已,MD,老子連浪都沒見過呢。
SQL Server : 這幾年我們最精湛的幾個維修師傅都出逃了,能守住一片田地也實屬不易。往後的日子真不知道怎整。昔日的輝煌可能很難維繫。這把老骨頭也經不起折騰了。
Spark 彈了彈煙頭燃盡的灰落,「這老傢伙,今天這麼失落,不會是來套話的吧」。想雖然這麼想,但畢竟也不好得罪這北美市場的老大哥,話說出來,卻另改了一番口吻,「瘦死的駱駝,比馬大。北美市場以及歐洲市場,你們還是不可動搖的扛把子。我們就不一樣了,身形小,資本少,說沒就沒,還得依仗大哥們拉一把」
SQL Server 先是眉頭一緊,心裏也翻着不小的嘀咕,「這屆年輕人,口風真緊」。接着眼開口笑,說道,「市場與資本風向,普遍傾向於你們年輕人,你看 Hortonworks 和 Cloudera 兩家的合併,吸引了多少資本進去。這麼強大的平台,可謂是巨人的肩膀啊,你們 Spark 卻牢牢站在了風口。」
Spark : 說起這個事來,真還不讓我省心。本來抱一家大腿就可以了。現在兩家合併了,反而想抱也抱不緊了。那麼多小弟都盯着這頭巨象,Flink, MapR, Kylin, 都是曾經的小弟,給誰不給誰,大哥們也為難。外人看我們容易,平台大了,市場更多了,實際上這世界只認第一啊,誰能給第二容下一點點餘地呢。
SQL Server : 那這麼說,我們更愁。被 O 記壓了那麼多年,好不容易穩住了,卻由面臨你們年輕人的挑戰。
Spark: 成年人的世界哪有 TMD 容易兩字呢!
SQL Server: 說得真好,這話誰說的?
Spark: 好像是,尼古拉斯凱奇吧。在他《天氣預報員》那片子里,這片子適合你看,抽空看看。
SQL Server: 就是那背着弓箭到處跑的那個主角吧。沒錯,中年男人,倒是一點都不油膩,只是比較廢。
SQL Server: 有時間嗎,給我講講你們的內幕唄。
Spark: 我們一窩子都是壯士,有啥好講的,你們那裡不是妹子多嘛。門口站着的「海瑟薇」,花多少美金雇來的
SQL Server: 又不正經了,那是哈佛商學院來的市場總監。我想要聽聽你們的技術內部原理。畢竟技術出身,還是對代碼感興趣,可能唯一能抓得住的也就是代碼了。
轉身看了眼「海瑟薇」,SQL Server 一個念想,「上一次碰自家媳婦,還是8年,9年前?,老了真不中用!可憐我的老母親,連個孫子都還沒報上……」
「走走走,我這回請你星爸爸」
「那還等什麼,走唄。我要瑪奇朵啊,超大杯的」
L 可喜壞了,這麼大杯下去,還不興奮的講個不停,拿起手中的星冰樂,疾步跟了進去。
Spark 正藉著 Starbucks的黑牆,畫著幾幅草圖,當 L 找個好位置坐定的時候,Spark 也畫完了 3 幅畫中的最後的一幅。

image
Spark 指着第一幅,清了清嗓子,開始了:
這是基礎原理圖,在所有用到我們的程序里,都是 RDD 做引子。定義好 RDD 的數據源,轉換操作以及行為操作,剩下的都是集群里的哥們負責處理,用戶都是小白,啥都不用設計,就像 T-SQL 一樣,表定義好了,函數和存儲過程一寫,數據流怎麼動,都是引擎的事兒。
關鍵的問題我也羅列出來了,回答出來這塊就差不多了。
接下來,再看看如何提交我們的 Spark SQL 怎麼去連你們的 SQL Server.

image
通常 Spark SQL 程序都會有一個引子程序,叫做 driver. 我們定義 RDD 的數據源,轉換以及操作都是在 driver 里完成。
但是和其他語言不一樣的是,我們定義的 RDD 操作,並不是每一步都隨行同步執行的。這一點非常關鍵,否則你無法理解,我們的並行處理。
一般的解釋性語言或者編譯型語言,代碼執行到哪一步,那一步就會執行響應的操作。但 Spark 卻不是。代碼的執行,在 transformation 階段,也只不過是在完成數據流的定義而已,真正執行數據的統計等聚合操作,都是在 action 階段。
這幅圖,完成的就是並行連接 SQL Server 讀取大數據量的表,拉取到 Spark 集群做處理。注意,這裡必須有分區來提高讀取速度。
比較費解的是,這些 Jar 路徑的配置,這一塊是我們永遠的痛。
知道你在想啥,你肯定是想,用 c# 完善一套序列化和反序列化的操作,一樣可以實現分佈式處理嘛,再把 SQL 關係引擎的實現,加入一層網絡文件系統,一樣實現我們的功能,對吧!
SQL Server: 不好意思,我認為還確實是這樣!
Spark: 不可能,就問一個問題,你們捨得免費么!
最後一張圖,複雜一些,看仔細咯:

image
正確操作 Spark SQL 的兩種方式:一是 DataSet/DataFrame 的DSL, 一種是 Spark 純 SQL 方式。DSL 類似於 c# 的 LINQ, 不過你們的名字很歐口,LINQ,怎麼讀呢,Q的發音是 ke 嗎?反正就是類似的一套 api 接口,看 scala 源代碼就知道怎麼玩弄這些 api 了。
這張圖內涵就不講了,太多了。夠你消化段時間了。謝謝你的咖啡,回頭見
SQL Server: 怪人!
說完,拿出新買的 iPhone X MAX, 啪啪的亮了幾下,灌了一口咖啡,低頭琢磨起來。
L 看着SQL Server 壯實卻略駝的背影,看似年輕,可華髮已生,心裏好一陣凄涼,難道這就是技術人的一生?飛速的手指,劃拉着屏幕,旁邊的「蘇菲」,明顯已經抗議表示電量吃緊了。藉著還雜誌的空檔,L 故意放慢腳步來到 SQL Server 旁邊瞅了一眼,只見 「 SQL 2019 」 紅字標題躍然於蘇菲筆記本屏幕之上。12.1 英寸的屏幕上,還印着剛做完的草圖

image
L 看完,想起一句話 「小孩子才分對錯,成年人,只看利弊」。Spark 固然年輕可畏,卻也架不住老司機的算計。In Memory 這種半殘次作品,早該用 Spark 來代替了。