大數據領域的正確打開方式

  • 2020 年 4 月 10 日
  • 筆記

大家好,非常榮幸能夠和大家一同分享大數據領域相關的經驗。首先簡單的自我介紹一下,大家可以叫我小朱,之前從事JavaWeb開發,後來轉為大數據開發,目前從事大數據培訓,那我今天的主題主要是和大家分享如何踏入這一領域,以一個開發者的身份以及一個初學者的身份如何去進行規劃和學習。

大數據概念的由來

首先我們來認識一下,什麼是大數據,現在這個詞已經沒有那麼火熱了,很多人也多少有了一些認識。大家打開百度,也可以直接查到一些定義和特性。那在這裡我以開發者的視角來給大家講一個小故事。在比較久遠的年代,人們記錄資訊只能通過文字,也就是說數據的作用是能夠把需要的資訊記錄下來。在那個時候,數據的流通並不是很方便,數據的增長量也不是很大,數據的類型也比較單一。隨著科技的發展,聲音和影像都可以通過相應的設備進行記錄並且以相應格式的文件存儲在電腦的磁碟中,也就是說數據的類型不再是單一的文本類型。在《遺失的訪談》:塵封的預見一文中,喬布斯說:「軟體行業正在發生兩件激動人心的事:一個是面向對象編程,另一個就是Web。Web將實現我們盼望已久的夢想,電腦不再僅僅充當計算工具,開始承擔通訊功能。」這個訪談發生在1995年,我們也不得不佩服一下偉人的遠見。

由於互聯網的發展,數據的流通變得簡單且頻繁,出現了很多電商平台及社交網站,同時還包括各大搜索引擎,這其中的數據都蘊含著很大的價值。此時,在金融證券領域也積攢下了大量的數據。當數據量較小時,我們想要分析這些數據其實並不困難,可以通過相關的建模工具以及資料庫軟體,結合統計分析的方法,還是能夠得出一個比較滿意的結果的。但是,當數據量增大以後,數據類型變得複雜以後,我們依然期望通過對真實的歷史數據進行分析,在可接受的時間範圍內獲得其中潛在的價值,這就是我們需要解決的問題,也是大數據相應的特點。因此,一個龐大的大數據軟體體系誕生,其中包括了大大小小的組件和框架,滿足數據處理過程中各個環節的需要。

大數據的應用領域

那麼剛剛和大家講了一下大數據的相關概念以及致力於解決的問題,核心價值在於能夠創造利潤和提高效益。由於任何行業都離不開數據,所以也可以說數據是無處不在的。作為一個個體,我們使用的電子設備在不斷的進行著數據交互;從宏觀上來說,作為各個軟體服務的提供商收集到的數據量是特別龐大的;例如購物平台的交易數據,金融證券的變化資訊,各應用中能夠採集到的用戶行為資訊,流量中包含的資訊。

大數據涉及的領域是十分廣泛的,並且由於我們處在一個人口大國,在數據量方面的優勢是很明顯的,無論是生物領域的基因大數據,科教領域的智慧教育,和我們生活相關的智慧城市,還是具體到某一個領域的數據分析,你都能夠找到大數據的影子。從事數據分析相關工作的朋友應該知道,對於一個數據計算結果影響更多的還是數據品質,而演算法只能起到修正和調優的作用。那麼數據品質可以通過數據維度的數量以及數據本身是否失真等因素決定,如果數據維度越全面,那麼我們可以將一個角色刻畫的更為細緻和具體,也更容易做出精確的預測。數據維度大家可以理解為是角色的屬性或者發生的某個行為的指標,比如身高,體重,月收入,每個月的花銷等等。

企業的人才需求

既然大數據的應用領域如此之廣,那麼是不是對於從業者的要求都是那麼高呢?其實並不是大家想像的那樣,因為雖然領域不同,但是處理數據的過程是基本一致的,不同的地方在於數據的來源,數據的類型以及使用的演算法和研究的目的。而對於開發者來說,以上的不同可以使用四個字來概括,那就是:業務邏輯。在一個團隊中,必然要有一個相應領域的專家去把握大的方向,而並不需要每個人都在這個領域中鑽研的很深入。

目前的人才需求主要可以分為兩個大的方向,大數據開發以及數據分析師。大家可能聽說過開發工程師和演算法工程師兩個崗位,但是都比較籠統。在大數據領域中,開發工程師需要從事的工作主要包括大數據集群環境的搭建以及維護,應用的封裝與開發,實現整個數據分析的各個流程的業務銜接;演算法工程師主要負責數據分析的核心部分,即知道了What I want的前提下,進一步確定What I need,最終明確How to do,通常需要數學專業出身,有豐富的業務經驗,吃過大量paper的人才能完美勝任。

大數據的學習路線

那麼剛剛只是在概括的說大數據領域的人才需求,下面以開發者和學習者的角度再來介紹一下如何轉型大數據領域以及如何推開大數據的大門。在確定學習路線之前,我們要關注當下的主流技術,針對去學習,比較直接的方式就是在各大招聘網站去看一下崗位職責以及技術要求,或者通過百度指數的走勢對比來確定學習的優先順序。

現在來說一些專業性的知識,當我們需要處理大數據量的數據時,一台機器是不夠的,核心思想就是分而治之,一項任務由多個人,多台機器一同完成,同時為了保證數據存儲的穩定性,會採用冗餘存儲的方式。早年時Google發布了有關於GFS的論文,提出了分散式和擴展性的概念,這也是大數據存儲的核心思想,將一份數據存儲多份,為此,需要多台電腦協同工作,而Windows在商用伺服器方面的表現一直差強人意。所以我們除了大數據相關概念的學習以外,首先要學習的就是Linux作業系統。

整個大數據處理軟體種類繁多,也各司其職,適用於不同的數據處理需要。從整個數據分析的流程來說,可以分為三大部分:數據採集、數據分析、結果展現。其中數據採集部分根據數據類型的不同也有不同的處理方式。中國主要使用Hadoop作為分散式文件存儲系統,稱之為HDFS。也就是說首先我們需要想辦法將數據存儲到HDFS中,對於文本文件的處理較為簡單,可以直接進行上傳,而對於各應用產生的數據,通常存放在資料庫中,我們會使用Sqoop組件進行數據的拉取,同時使用Hive數據倉庫以及Hbase分散式資料庫進行管理。由於時間的關係我們不能對每一個軟體展開介紹,感興趣的朋友可以關注我的知識星球進行提問。

在數據分析階段,我們需要先進行準備工作,稱之為數據清洗,通常可以使用hql來完成,在數據分析階段,如果是簡單的統計分析,我們可以使用Hadoop封裝的MapReduce計算模型來實現,或者使用hql;如果需要進行預測分析,則需要使用相應支援機器學習庫的計算框架來完成,如Spark,並且整個的分析過程也會發生一些變化,聚類與分類演算法的流程是不同的,隨著學習的深入大家可以自行擴展。

在數據可視化部分主要是使用一些web組件進行圖表的展現,這一部分對於開發者來說應該算是輕車熟路,主要使用的是百度的開源項目Echarts,特別新版本推出以後,對於千萬級別數據的渲染提供了較好的支援。當然,以上介紹的都只是必須掌握的部分,除此之外根據不同的業務場景,還需要針對流數據的處理,低延時的數據分析,深度學習框架等等,在此列舉部分技術點:flume,kafka,Storm,Elasticsearch,Cboard。

那麼對於還在學校中的同學們,如果你是數學專業,而又想向大數據開發崗位發展,那麼恭喜你,你做了一個很明智的選擇,雖然在剛開始的時候受限於編碼的能力,但是數學對人思維的影響是潛移默化的,後期你所展現出的優勢是十分明顯的。除了學好本專業的課程以外,還需要付出一番努力,去接觸一些相關的基礎學習內容,如:Linux,Java,資料庫,軟體工程,數據結構。如果你想在數據分析方向更有建樹,那麼根據我目前對市場的了解,企業還是會更認可研究生學歷,並且科班出身的統計專業以及數學相關專業的學生,如果是非名校畢業的本科生可能很難在一開始就找到十分心儀的數據分析師的工作,畢竟這一崗位需要的並不僅僅是演算法的知識,業務經驗同樣重要。

以上只是我個人的一點認知,供大家學習和參考,不足之處還可以再多多交流,謝謝大家的收聽。

本期撰稿人:小山豬

本期審稿人及播音:聆小小

本期責任編輯:兔子