面試問答
遇到 Data Skew 的時候如何解決?
1. Reparti...
▍流程
HR 電話訪談 → 技術面談(兩位技術主管)-> CIO -> CEO
1. 第一關:
沒有白板題,兩位技
術主管,在我自我介紹後直接根據過去經驗追問細節,以及問 Spark, Data Pipeline, Database, Airflow 相關問題。其實只要把自己過去處理過的問題、解決方法、實際範例說明清楚即可,這部分每個人經歷不同,所以重點就是呈現「我能提供多少價值」為出發點準備,建議使用 STAR 原則回答:Situation, Target, Action, Result,口語表達奇差如我也能表現不錯!
2. 第二關:
跟 CIO 面試,雖然過程很像閒聊,但流程大致分為前半討論過去經歷、解決過什麼問題,後半系統設計。前半就跟第一關差不多,只是 CIO 的觀點更 High-level 所以可以少提技術細節、多提帶來的價值。後半就經典的系統設計,請你設計一個 Data Pipeline 處理 RTB (Real-Time Bidding) 資料,例如我提了一個 Kafka + Flink + Redis(Temp Queue) + Iceberg 的方案,然後就開始被深問技術細節跟選擇。
3. 後來中間因為收到 Offer 了,所以中斷面試,但後面跟 CEO 應該也是行為面試居多。
▍花費時間
HR 滿積極的,大概都 5 天內就會安排下一階段,中間為了加速甚至 2 天就安排下一關,推推
每一關的花費時間大概都一個半小時
▍補一些被問的問題
個人相關:
- 過去接觸了哪些 Data Pipeline 的工作?
- 過去接觸的資料量級為何?
- 有用過什麼雲服務嗎?
- 你之前都是 Machine Learning 相關的工作,為什麼轉換跑道?
- 平常怎麼學習的?
Spark 相關:
- 解釋 Spark 的基礎架構
- 過去如何監控 Spark Performance 或者運行狀況?
- 過去遇過什麼 Spark Performance 問題?怎麼解決?
- 平常怎麼 tune Spark Performance?
- 遇到 Data Skew 的時候如何解決?
- RDD 跟 Dataframe 差別是什麼?
- 幫我設計一個 Data Pipeline 的系統架構可以允許 QPS 大於 100 萬
Kafka 相關:
- 解釋 Kafka 的基礎架構?
- Broker, Partition, Topics, Record 關係是什麼?
- 過去如何監控 Kafka Performance 或者運行狀況?
- 過去遇過什麼 Kafka Performance 問題?怎麼解決?
- 平常怎麼 tune Kafka Performance?發生 consumer lag or throughput 不足怎麼辦
- 什麼是 Data Shuffle?
Database 相關:
- 過去用了哪些資料庫?選擇這些的場景及原因是什麼?
- 如何 tune SQL Query Performance?
- CDC 用了哪些工具?如何處理 update 資料的問題
面試問答
遇到 Data Skew 的時候如何解決?
1. Repartitioning
使用 repartition() 或 coalesce() 重新分配數據,選擇更均勻的分區鍵
2. Salting
在 join key 前加上隨機前綴,打散熱點數據,先進行預聚合,再去除 salting value
3. Broadcast Join
將小表廣播到各個節點,避免 shuffle,使用 broadcast() 函數
4. Pre-aggregation
先在局部進行 aggregate,減少 shuffle 的數據量,使用 reduceByKey() 替代 groupByKey()
5. 調整並行度
增加 partition 數量:spark.sql.shuffle.partitions,使用 coalesce() 合併小分區
6. Bucketing
對大 key 進行採樣分析,使用 bucketing 預先分桶存資料
面試建議
面試過程都滿簡單的,不會有刻意刁難或者要考很學科理論的知識,主要著重在過去的經驗以及對工具有沒有更深的認識,而不是只會用。另外因為是 Senior 缺,所以會比較重視系統設計這塊,建議準備好幾個 modern 的設計方式。