Kylin Ambassador 訪談 | 源碼達人?吸貓纔是本體?

Apache Kylin 所依賴的複雜的環境配置經常讓初入門的小夥伴們暈頭轉向,社區開發者驗證 patch 的時候也多有不便。輕量級的部署方式「Kylin Docker Image」的出現完美地解決了這個老大難問題,上線後的短短 6 個月時間裏被 pull 了 2.9 k+ 次,來自螞蟻金服的朱衛斌同學正是這個便捷工具的作者。

除了 Docker Image,衛斌的源碼閱讀文章《可能是全網最深度的 Apache Kylin 查詢剖析》一經推出也收穫了公衆號、CSDN 等平臺上的滿滿閱讀量,社區郵件組也經常有衛斌同學的身影。憑藉在社區中獨特的影響力,衛斌同學被評選爲「Kylin Ambassador」。讓我們來看看衛斌「混跡」社區的經驗分享,非常適合初入門 Kylin 的同學學習~

 

注:文末有大大大大彩蛋

 

Q:可以簡單介紹下自己嗎?

A:目前就職於螞蟻金服,曾就職於金山軟件,主要工作是大數據平臺建設、大數據計算引擎優化。熟悉 Kylin、Spark、Calcite 等計算引擎。個人愛好是羽毛球和動漫。

Q:你和 Kylin 是怎麼結緣的呢?

A:公司內部一個項目剛好也需要使用到預計算技術,所以就想在開源社區調研看看做類似事情的方案,Apache Kylin 在 OLAP、預計算方向上大名鼎鼎,很自然就想要了解 Kylin 是怎麼做的來達成超大數據集上的亞秒級查詢這樣一個目的。然後就開始閱讀 Kylin 的源碼,在閱讀源碼的過程中,發現有一些可以改進的地方或者發現一些 bug,就向社區提交了 jira/pr。從基礎的環境部署、使用上的一些問題到比較深入的框架、源碼優化的討論都在社區得到了很好的反饋。

Q:讀懂源碼可以讓大家理解底層實現,有助於更好地使用 Kylin 和快速定位、解決問題;同時也是提升自身技術能力的很好途徑。作爲《可能是全網最深度的 Apache Kylin 查詢剖析》的作者,可以和大家分享下你的源碼閱讀經驗嗎?

A:閱讀源碼前需要做一些準備。

1)心理準備

首先,需要做好一定的心理準備,閱讀開源項目源碼:

· 是一件需要持續投入的事情:如果你只是心血來潮想隨便花點時間看看,以期望收穫對某個開源項目的深度理解,那是不可能的。

· 短期並不會有明顯的收益:也許你花了不少時間搞明白了某個功能是怎麼實現的,可能一下子也沒有可以施展的地方。

2)閱讀官方文檔

首先,對於一個你並不熟悉的項目,我並不建議一上來就讀源碼。我們需要一個從宏觀到微觀的過程,對於一個不熟悉的項目,首先要做的是閱讀該項目的官方文檔,通過官方文檔我們可以瞭解到:

· 這個項目的背景

· 是用來解決什麼樣的問題的

· 包含哪幾個部分、每個部分的作用是什麼

· 都有哪些配置,這些配置是用來控制什麼的

· 可以用來體驗的 examples

· …

在閱讀官方文檔後,在心裏對這個項目其實就有了一個大概的輪廓,雖然細節還是不清楚,但是知道了個大概,也瞭解到了這個項目相關的很多名詞。閱讀官方文檔的另一個好處是,它是最權威的,你可以完全信任它,但閱讀其他人的翻譯或者分析文章,由於作者英語、技術水平的參差不齊,文章質量相差也很大,甚至可能是錯誤的。

3)初步體驗項目

接下來,建議動手去用一用這個項目,至少要跑一跑項目自帶的 examples,對項目有一個體感。比如Kylin項目,你可以下載Docker Image快速體驗下Kylin的亞秒級查詢:https://kylin.apache.org/docs/install/kylin_docker.html。

如果你已經閱讀了官方文檔並有一定的實際使用經驗,就可以開始閱讀源碼了。

1)帶着問題找答案

比如我開始看 Kylin 的源碼時,是帶着 “Kylin 是怎麼做到查詢時輸入的SQL是事實表、維表相關的,但最終查的是 Cube 的數據”這個問題去看的。看源碼時,特別是一開始,如果不帶着問題,容易迷失在海量的代碼中,不知道從何看起,看着看着就不知道在看啥了。對於這個“問題”,可以是一個大的話題,如果是大的話題,你需要把大的話題隨着看代碼的過程,拆分爲多個子問題去各個擊破,子問題可以繼續拆分爲子問題,這樣能讓目標變得容易實現,當你解決一個子問題時,容易建立信心來解決接下來的問題。

2)Debug 式閱讀

用 debug 的方式去跟讀源碼,相比於直接看源碼是更加高效的方式。debug 能讓你很清楚的看到執行某一個邏輯時:

· 各個類、方法之間的調用順序是怎麼樣的

· 每個方法的輸入輸出是怎麼樣的

· 每個步驟調用前後狀態、數據發生了什麼樣的變化

3)畫流程圖

我另一個習慣是畫流程圖,從《可能是全網最深度的Apache Kylin 查詢剖析》可以看出。源碼畢竟是比較龐雜、細碎的,但比如達成一個子功能的關鍵步驟其實並不會特別多,通過流程圖可以讓我們更好的提煉出有哪幾個關鍵步驟,這幾個關鍵步驟做了什麼樣的事情,讓狀態、數據發生了什麼樣的改變。說白了就是要抓住重點。這裏我推薦一個很好用的工具:PlantUml(https://plantuml.com/zh/),它可以通過寫簡單 “代碼”的方式畫出各種常用的圖,並且在 IDEA 中有插件支持。

4)費曼學習法

最後,我推薦一個四步學習法,即費曼技巧,我覺得非常適用於閱讀源碼:

· 第一步:選擇一個你想要理解的概念,然後拿出一張白紙,把這個概念寫在白紙的最上邊。

· 第二步:假想你正要向別人傳授這個概念,然後在白紙上寫下你對這個概念的解釋,就像你在教一位新接觸這個概念的學生一樣。這樣做的時候,你會清楚的意識到關於這個概念你理解了多少,是否還存在理解不清的地方。

· 第三步:無論何時你感覺卡殼了,都要回到原始的學習資料,並重新學習讓你感到卡殼的那部分,直到你領會得足夠順暢,順暢到可以在紙上解釋這個部分爲止

· 第四步:用你自己的語言,而不是學習資料中的語言來解釋概念。如果你的解釋很冗長或者令人迷惑,那就說明你對概念的理解可能並沒有你自己想象得那麼順暢。你要努力簡化語言表達,或者與已有的知識建立一種類比關係(比喻),以便更好地理解它。

Q:爲什麼做 Kylin Docker Image 呢?

A:我第一次想去把 Kylin 跑起來進行試用的時候,發現 Kylin 的依賴非常多,包括:Hadoop, Hive, HBase, Spark, Zookeeper, Kafka, Livy(可選),並且沒有一個 local 模式可以啓動。對比過往熟悉的引擎,比如 Spark,有自己的 Standalone 模式可以自行運行起來,不用有其他的依賴。對於想試用或者在本地試用 Kylin 的用戶來說,要部署這麼一套系統成本非常大,所以我希望能夠有一個能 “一鍵”啓動 Kylin 的功能,不需要做這麼繁重的依賴部署,經過和社區同學的討論,最終以 Docker 的方式來承載這樣一個功能:用戶只需要執行。

docker run -d \
-m 8G \
-p 7070:7070 \
-p 8088:8088 \
-p 50070:50070 \
-p 8032:8032 \
-p 8042:8042 \
-p 16010:16010 \
apache-kylin-standalone

一條命令就能把 Kylin 跑起來,並自動 build example Cube 進行試用。

(Kylin Docker Image 見:https://hub.docker.com/r/apachekylin/apache-kylin-standalone)

Q:聽說你還做了 Kylin 支持 Spark SQL 作爲數據源的功能?

A:對。我之前發現 Kylin 只支持 Hive 和 JDBC 數據源,但還有很多數據源/數據格式也得到了非常廣泛的應用,如:Alluxio、Cassandra、Kudu、Orc 等等。如果 Kylin 也能試用這些數據源進行 Cube 構建,那麼其應用範圍將會更加廣泛。Spark SQL DataSource 本身就支持衆多的數據源,並且開發了自定義 DataSource 的能力,具有很強的擴展性。恰好能解決 Kylin 數據源很有限的問題,所以就開發了 Kylin 支持 Spark Sql 數據源的能力來藉助 Spark Sql 的能力讀取更多的數據源(該 PR 還在 Review 中)。

 

彩蛋環節

運營小姐姐:聽說你們平時比較忙?

衛斌童鞋:是的。不過頭可破,血可流,髮型不能亂。

運營小姐姐:每天堅持洗頭是作爲程序員最後的倔強嗎?

衛斌童鞋:可能我比較勤快吧。。。(臉紅)

運營小姐姐:又要忙工作又要參與社區,有什麼解壓小訣竅呢?

衛斌童鞋:忙的時候,擼擼貓就能很放鬆。大概兩年前,我在路邊撿到一隻剛出生沒多久的流浪貓(下圖白貓),後來機緣巧合又收養了一隻(下圖灰貓),平時回家一般會吸吸貓,是很好的解壓方式。

 

 

 

坐擁兩隻「小可愛」,這就是傳說中的「大戶人家」嗎?有組團偷貓的小夥伴嗎?評論區留言走起~

 

PS:

悄悄附上衛斌同學的博客地址:https://www.jianshu.com/u/001d44710e2e

乾貨滿滿,不容錯過~

 

瞭解更多大數據資訊,點擊進入Kyligence官網

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章