寫給初學者,長文闡述大數據學習與面試
本文轉載自微信公眾號「五分鐘學大數據」,作者園陌。轉載本文請聯系五分鐘學大數據公眾號。
最近有讀者私聊我時發現有不少應屆生和初學者,他們在大數據怎么學,以及大數據怎么面試,簡歷怎么寫等方面有很大的困擾,今天我們就來談談關于大數據的一些事。
寫在前面:每個人的學習方法可能不一樣,只有找到適合自己的才是最好的,以下這些只是我在學習大數據時的一些總結及經驗,有不全面的地方還請各位大佬多包涵,互相學習,共同進步,非常感謝!
我之前在知乎回答過類似的問題,有人問大數據工程師的日常工作內容是干嘛?,我當時看到之后就隨意回答了下,先說了下大數據日常干嘛,然后又說了下怎么準備大數據的面試,怎么學大數據等等,沒想到反響還挺好,截圖了部分評論:
今天走心回答一波,把知乎回答的內容再整理下。
1. 大數據學習
大數據怎么學,該學哪些東西,不需要學哪些東西,是大家問的最多的一個問題,也有不少同學問培訓機構講的框架太多了,是否都要掌握,接下來我們逐個解析。
從 2008 年 Hadoop 成為 Apache 頂級項目開始,大數據迎來了體系化的快速發展,到如今已經走過十幾個年頭,這些年里大數據框架層出不窮,可以用“亂花漸欲迷人眼”形容,框架這么多,應該怎么學?
我們可以思考下整個大數據的流程是什么,從數據采集->數據存儲->數據處理->數據應用,再加一個任務調度。每個流程都有很多對應的大數據框架,我們學習其中一兩個比較重要,也就是企業用的較多的框架即可。
數據采集:就是把數據從其他平臺采集到我們大數據平臺,只是負責采集數據,所以對這個流程的框架要求是會用即可,日志采集工具如Flume,大數據平臺與傳統的數據庫(mysql、postgresql...)間進行數據的傳遞工具如Sqoop,我們會用即可,這種工具上手也很快,沒有太復雜的功能。
數據存儲:數據存儲就比較重要了,大數據如此流行,和大規模分布式數據存儲快速發展有很大關系,當然數據存儲的框架也比較多,不同的框架,功能不太一樣,首先第一個:Hadoop HDFS,分布式文件系統,HDFS的誕生,解決了海量數據的存儲問題, 但是一個優秀的數據存儲系統需要同時考慮數據存儲和訪問兩方面的問題,比如你希望能夠對數據進行隨機訪問,這是傳統的關系型數據庫所擅長的,但卻不是分布式文件系統所擅長的,那么有沒有一種存儲方案能夠同時兼具分布式文件系統和關系型數據庫的優點,基于這種需求,就產生了 HBase、MongoDB等。
數據處理:大數據最重要的環節就是數據處理了,數據處理通常分為兩種:批處理和流處理。
- 批處理:對一段時間內海量的離線數據進行統一的處理,對應的處理框架有 Hadoop MapReduce、Spark、Flink 等;
- 流處理:對運動中的數據進行處理,即在接收數據的同時就對其進行處理,對應的處理框架有 Spark Streaming、Flink 等。
批處理和流處理各有其適用的場景,時間不敏感或者硬件資源有限,可以采用批處理;
時間敏感和及時性要求高就可以采用流處理。隨著服務器硬件的價格越來越低和大家對及時性的要求越來越高,流處理越來越普遍,如股票價格預測和電商運營數據分析等。
大數據是一個非常完善的生態圈,有需求就有解決方案。為了能夠讓熟悉 SQL 的人員也能夠進行數據處理與分析,查詢分析框架應運而生,常用的有 Hive 、Spark SQL 、Flink SQL、Phoenix 等。這些框架都能夠使用標準的 SQL 或者 類 SQL 語法靈活地進行數據的查詢分析。
這些 SQL 經過解析優化后轉換為對應的作業程序來運行,如 Hive 本質上就是將 SQL 轉換為 MapReduce 或 Spark 作業,Phoenix 將 SQL 查詢轉換為一個或多個 HBase Scan。
大數據流處理中使用的比較多的另外一個框架是 Kafka,Kafka是一種高吞吐量的分布式發布訂閱消息系統,它可以用于消峰,避免在秒殺等場景下并發數據對流處理程序造成沖擊。
數據應用:處理好的數據就可以輸出應用了,如可視化展示,推動業務決策,用于推薦算法,機器學習等。
任務調度:復雜大數據處理的另外一個顯著的問題是,如何調度多個復雜的并且彼此之間存在依賴關系的作業?基于這種需求,產生了 Azkaban 和 Oozie 等工作流調度框架。
同時針對集群資源管理的需求,又衍生了 Hadoop YARN,資源調度框架。
想要保證集群高可用,需要用到 ZooKeeper ,ZooKeeper 是最常用的分布式協調服務,它能夠解決大多數集群問題,包括首領選舉、失敗恢復、元數據存儲及其一致性保證。
以上,在分析大數據處理流程中,我們把常用的框架都說了下,基本上也是大數據中最常用的框架,盡量全部掌握。
以上框架大部分是用Java寫的,有部分是用Scala寫的,所以我們必須掌握的語言是Java、Scala,以便我們開發相關應用及閱讀源碼等。
總結
我們總結下重點框架:
- 語言:Java 和 Scala(語言以這兩種為主,需要重點掌握)
- Linux(需要對Linux有一定的理解)
- Hadoop(需理解底層,能看懂源碼)
- Hive(會使用,理解底層SQL轉化原理及優化)
- Spark(能進行開發。對源碼有了解)
- Kafka(會使用,理解底層原理)
- Flink(能進行開發。對源碼有了解)
- HBase(理解底層原理)
- Zookeeper(會用,最好理解原理)
- Sqoop、Flume、Oozie/Azkaban(會用即可)
如果走數倉方向,需要掌握以下技能:
- 離線數倉建設(搭建數倉,數倉建模規范)
- 維度建模(建模方式常用的有范式建模和維度建模,重點關注維度建模)
- 實時數倉架構(兩種數倉架構:Lambda架構和Kappa架構)
不管離線還是實時,重中之重就是:SQL。多找一些SQL題練習!
等工作之后,有時間還需要學習比較流行的 OLAP 查詢引擎:
Impala 、Presto、Druid 、Kudu 、ClickHouse 、Doris
如果還有時間,需學習數據質量及數據治理相關的內容!
另還有元數據管理工具:Atlas
數據湖-Data Lake 三劍客:Delta、Hudi、Iceberg
2. 大數據面試
如果讓我招大數據工程師,我第一看中的不是技術,而是你有沒有獨立思考的能力,給你一個你毫不熟悉的項目,能不能快速理清業務邏輯,能不能將需求完整的復述一遍,因為這太重要了,我司目前招進來兩個大數據初級,不知道是跨行業的原因,還是其他,需求始終理解的差那么一點,也可能是我們的業務比較復雜。但是需求理解不到位,技術在厲害也是沒用
但是話又說回來,需求這東西你沒辦法提前復習啊,只有需求來了才知道要干什么,所以面試時只能考察技術及你的過往項目經歷,通過你之前做的項目看你對這個項目的理解情況,這主要看和面試官有沒有眼緣,沒有具體標準,因為每個人做的項目可能不一樣,你項目中會的地方多說一點,不會的少說一點或者干脆不說,面試官感覺你說得好,你就有希望
但是技術是有標準的,問你某個技術點,你會就是會,不會就是不會
但是在學技術的時候要多思考,這個技術點為什么這樣實現,有什么好處,多思考會讓大腦越來越靈活,就比如Flink支持精準一次處理語義,但是大家深入思考下flink的精準處理是怎么實現的,有人說是通過兩階段提交協議實現的,對,是通過這個協議,那再深入思考下,這個協議的主要內容是什么,底層的算法是怎么實現的,這樣一步步的向下思考,你就會發現一個新世界。
以上說這么多,其實就兩點,面試主要考察技術和項目。項目也是非常重要的,通過項目一方面可以考察你的技術掌握情況,另一方面考察你對項目的理解情況,如果你連自己簡歷中的項目都不太熟悉,說的磕磕絆絆,那么你進到公司后,怎么能短時間內快速熟悉業務呢。
所以,簡歷中一定要寫項目,并且對項目要非常熟悉!
公眾號后臺對話框發送:面試,會有一份帶解析的超全大數據面試題!
3. 大數據簡歷
對于許多應屆生來說,有不少是帶著學生思維來撰寫簡歷,不僅于求職加分無益,還給自己挖了許多坑。敗在簡歷關,等于一場馬拉松摔輸在了起跑線,還沒開始就結束了。
簡歷的大忌:
海投簡歷
不要一份簡歷原封不動地發送給數十家企業。這樣的結果往往是石沉大海。
求職講求“人崗匹配”,即面試者個人素質與職位要求高度一致。要針對崗位要求適當修改簡歷,提升崗位匹配度。
簡歷毫無重點
一篇優秀的簡歷,應該是懂得“舍棄”的簡歷。你不需要將自己大學幾年來所有的事件經歷都羅列上去,而是應該根據企業和崗位的需求進行取舍,選取出最匹配的經歷大篇幅呈現出來,其他經歷大可一筆帶過甚至干脆不談。
簡歷怎么寫:
重點來啦!!!寫簡歷一定要用四大原則和STAR法則!
什么是四大原則,什么是STAR法則,接下來我們就逐項解析:
四大原則:
關鍵詞原則
關鍵詞原則指的是,多使用一些行業術語或專業詞匯放入你的經歷描述中,凸顯出你的專業性以及對該行業的熟悉程度。
動詞原則
動詞是一個句子的靈魂所在,也是面試官判斷你的個人經歷是否真實的重要標準之一。在經歷描述中,要著重注意動詞的挑選,最準確的動詞才能夠傳達出你的經歷價值。
比如表明自己行為的動詞“從事”“積累”“得到”,似乎是所有工作中都用得到,但根本看不出這份經歷的獨特性。
為了展現你的經歷真實與價值,足夠專業化的動詞才是加分項。
數字原則
多用數字其實是簡歷很好的加分項,數字的意義是將你的經歷量化。豐富的數字比華麗的形容詞要更有說服力。
數字一般可以用于三種維度:價值,時間,數量。
牢記,能夠量化的內容都量化,用數據展現你豐厚的經歷。
結果原則
許多同學在經歷描述時會忽略自己經歷的最終成果,但結果是證明你經歷價值的重要依據之一。
STAR法則
Situation 項目背景
介紹一下你所處的平臺和團隊有多優秀,以證明你曾經的被認可程度。
Task 項目目標
介紹一下你們此項活動的具體目標與設想,有時可以和上一部分進行合并。
Action 你做了什么
說明你在團隊中做出了怎樣的努力,充當了怎樣的角色,發揮了什么樣的作用,以此展現你的個人實力和在團隊中的成長與歷練。這一部分往往是最重要的。
Result 得到怎樣的結果
說明你最終取得了怎樣的工作成果,表述時可以參照上部分的“四大原則”。
公眾號后臺對話框發送:簡歷,會有幾十份大數據簡歷模板供你參考!
最后給大家一些高逼格的關鍵詞和動詞,僅供娛樂:
注:以下詞語簡歷及面試時可以用,但是別太過!
高逼格名詞:生命周期,價值轉化,強化認知,資源傾斜,完善邏輯,抽離透傳,復用打法,商業模式,快速響應,定性定量,關鍵路徑,去中心化,結果導向,垂直領域,歸因分析,體驗度量,信息屏障,資源整合
高逼格動詞:復盤,賦能,加持,沉淀,倒逼,落地,串聯,協同,反哺,兼容,包裝,重組,履約,響應,量化,布局,聯動,細分,梳理,輸出,加速,共建,支撐,融合,聚合,集成,對標,聚焦,抓手,拆解,抽象,摸索,提煉,打通,打透,吃透,遷移,分發,分裝,輻射,圍繞,復用,滲透,擴展,開拓,皮實,共創,共建,解耦,集成,對齊,拉齊,對焦,給到,拿到,死磕
你們對這些詞有什么看法呢。
最后,來一個面試官的死亡提問:
你這個問題的底層邏輯是什么?頂層設計在哪?最終交付價值是什么?過程的抓手在哪?如何保證回答閉環?你比別人的亮點在哪?優勢在哪?你的思考和沉淀是什么?這個問題換成我來問是否會不一樣?你的獨特價值在哪?