1. 程式人生 > >學習大資料分析,一定要掌握這些核心技術

學習大資料分析,一定要掌握這些核心技術

目前,大資料領域每年都會湧現出大量新的技術,成為大資料獲取、儲存、處理分析或視覺化的有效手段。大資料技術能夠將大規模資料中隱藏的資訊和知識挖掘出來,為人類社會經濟活動提供依據,提高各個領域的執行效率,甚至整個社會經濟的集約化程度。

01 大資料生命週期

學習大資料分析,一定要掌握這些核心技術

我自己是一名從事了5年大資料探勘、分析開發的工程師,我花了一個月整理了一份最適合小白學習的大資料乾貨,包括資料採集。資料儲存和管理。資料處理和分析。資料隱私和安全。雲安全,雲技術,人工智慧等資料都有整理,送給每一位大資料小夥伴,這裡是大資料學習者聚集地,歡迎初學和進階中的小夥伴。

加QQ群:591305687(招募中)

圖1展示了一個典型的大資料技術棧。底層是基礎設施,涵蓋計算資源、記憶體與儲存和網路互聯,具體表現為計算節點、叢集、機櫃和資料中心。在此之上是資料儲存和管理,包括檔案系統、資料庫和類似YARN的資源管理系統。

然後是計算處理層,如hadoop、MapReduce和Spark,以及在此之上的各種不同計算正規化,如批處理、流處理和圖計算等,包括衍生出程式設計模型的計算模型,如BSP、GAS 等。資料分析和視覺化基於計算處理層。分析包括簡單的查詢分析、流分析以及更復雜的分析(如機器學習、圖計算等)。查詢分析多基於表結構和關係函式,流分析基於資料、事件流以及簡單的統計分析,而複雜分析則基於更復雜的資料結構與方法,如圖、矩陣、迭代計算和線性代數。

一般意義的視覺化是對分析結果的展示。但是通過互動式視覺化,還可以探索性地提問,使分析獲得新的線索,形成迭代的分析和視覺化。基於大規模資料的實時互動視覺化分析以及在這個過程中引入自動化的因素是目前研究的熱點。

有2個領域垂直打通了上述的各層,需要整體、協同地看待。一是程式設計和管理工具,方向是機器通過學習實現自動最優化、儘量無需程式設計、無需複雜的配置。另一個領域是資料安全,也是貫穿整個技術棧。除了這兩個領域垂直打通各層,還有一些技術方向是跨了多層的,例如“記憶體計算”事實上覆蓋了整個技術棧。

02 大資料技術生態

大資料的基本處理流程與傳統資料處理流程並無太大差異,主要區別在於:由於大資料要處理大量、非結構化的資料,所以在各處理環節中都可以採用並行處理。目前,Hadoop、MapReduce和Spark等分散式處理方式已經成為大資料處理各環節的通用處理方法。

Hadoop是一個能夠讓使用者輕鬆架構和使用的分散式計算平臺。使用者可以輕鬆地在Hadoop上開發和執行處理海量資料的應用程式。Hadoop 是一個數據管理系統,作為資料分析的核心,彙集了結構化和非結構化的資料,這些資料分佈在傳統的企業資料棧的每一層。

Hadoop也是一個大規模並行處理框架,擁有超級計算能力,定位於推動企業級應用的執行。Hadoop又是一個開源社群,主要為解決大資料的問題提供工具和軟體。雖然Hadoop提供了很多功能,但仍然應該把它歸類為多個元件組成的Hadoop生態圈,這些元件包括資料儲存、資料整合、資料處理和其他進行資料分析的專門工具。

學習大資料分析,一定要掌握這些核心技術

 

圖2 展示了Hadoop 的生態系統,主要由HDFS、MapReduce、Hbase、Zookeeper、Oozie、Pig、Hive等核心元件構成,另外還包括Sqoop、Flume等框架,用來與其他企業融合。同時,Hadoop 生態系統也在不斷增長,新增Mahout、Ambari、Whirr、BigTop 等內容,以提供更新功能。

低成本、高可靠、高擴充套件、高有效、高容錯等特性讓Hadoop成為最流行的大資料分析系統,然而其賴以生存的HDFS 和MapReduce 元件卻讓其一度陷入困境——批處理的工作方式讓其只適用於離線資料處理,在要求實時性的場景下毫無用武之地。因此,各種基於Hadoop的工具應運而生。為了減少管理成本,提升資源的利用率,有當下眾多的資源統一管理排程系統,例如Twitter 的Apache Mesos、Apache 的YARN、Google 的Borg、騰訊搜搜的Torca、Facebook Corona(開源)等。

Apache Mesos是Apache孵化器中的一個開源專案,使用ZooKeeper實現容錯複製,使用Linux Containers 來隔離任務,支援多種資源計劃分配(記憶體和CPU)。提供高效、跨分散式應用程式和框架的資源隔離和共享,支援Hadoop、MPI、Hypertable、Spark 等。YARN 又被稱為MapReduce 2.0,借鑑Mesos,YARN 提出了資源隔離解決方案Container,提供Java 虛擬機器記憶體的隔離。對比MapReduce 1.0,開發人員使用ResourceManager、ApplicationMaster與NodeManager代替了原框架中核心的JobTracker 和TaskTracker。在YARN平臺上可以執行多個計算框架,如MR、Tez、Storm、Spark等。

基於業務對實時的需求,有支援線上處理的Storm、Cloudar Impala、支援迭代計算的Spark 及流處理框架S4。Storm是一個分散式的、容錯的實時計算系統,由BackType開發,後被Twitter捕獲。Storm屬於流處理平臺,多用於實時計算並更新資料庫。Storm也可被用於“連續計算”(Continuous Computation),對資料流做連續查詢,在計算時就將結果以流的形式輸出給使用者。它還可被用於“分散式RPC”,以並行的方式執行昂貴的運算。Cloudera Impala是由Cloudera開發,一個開源的Massively Parallel Processing(MPP)查詢引擎。

與Hive 相同的元資料、SQL語法、ODBC 驅動程式和使用者介面(HueBeeswax),可以直接在HDFS 或HBase 上提供快速、互動式SQL 查詢。Impala是在Dremel的啟發下開發的,不再使用緩慢的Hive+MapReduce 批處理,而是通過與商用並行關係資料庫中類似的分散式查詢引擎(由Query Planner、Query Coordinator 和Query Exec Engine這3部分組成),可以直接從HDFS 或者HBase 中用SELECT、JOIN 和統計函式查詢資料,從而大大降低了延遲。

Hadoop社群正努力擴充套件現有的計算模式框架和平臺,以便解決現有版本在計算效能、計算模式、系統構架和處理能力上的諸多不足,這正是Hadoop2.0 版本“ YARN”的努力目標。各種計算模式還可以與記憶體計算模式混合,實現高實時性的大資料查詢和計算分析。混合計算模式之集大成者當屬UC Berkeley AMP Lab 開發的Spark生態系統,如圖3所示。Spark 是開源的類Hadoop MapReduce的通用的資料分析叢集計算框架,用於構建大規模、低延時的資料分析應用,建立於HDFS之上。

Spark提供強大的記憶體計算引擎,幾乎涵蓋了所有典型的大資料計算模式,包括迭代計算、批處理計算、記憶體計算、流式計算(Spark Streaming)、資料查詢分析計算(Shark)以及圖計算(GraphX)。Spark 使用Scala 作為應用框架,採用基於記憶體的分散式資料集,優化了迭代式的工作負載以及互動式查詢。與Hadoop 不同的是,Spark 和Scala 緊密整合,Scala 像管理本地collective 物件那樣管理分散式資料集。Spark支援分散式資料集上的迭代式任務,實際上可以在Hadoop檔案系統上與Hadoop一起執行(通過YARN、Mesos等實現)。

另外,基於效能、相容性、資料型別的研究,還有Shark、Phoenix、Apache Accumulo、Apache Drill、Apache Giraph、Apache Hama、Apache Tez、Apache Ambari 等其他開源解決方案。預計未來相當長一段時間內,主流的Hadoop平臺改進後將與各種新的計算模式和系統共存,並相互融合,形成新一代的大資料處理系統和平臺。

學習大資料分析,一定要掌握這些核心技術

 

03 大資料採集與預處理

在大資料的生命週期中,資料採集處於第一個環節。根據MapReduce產生資料的應用系統分類,大資料的採集主要有4種來源:管理資訊系統、Web資訊系統、物理資訊系統、科學實驗系統。對於不同的資料集,可能存在不同的結構和模式,如檔案、XML 樹、關係表等,表現為資料的異構性。對多個異構的資料集,需要做進一步整合處理或整合處理,將來自不同資料集的資料收集、整理、清洗、轉換後,生成到一個新的資料集,為後續查詢和分析處理提供統一的資料檢視。

針對管理資訊系統中異構資料庫整合技術、Web 資訊系統中的實體識別技術和DeepWeb整合技術、感測器網路資料融合技術已經有很多研究工作,取得了較大的進展,已經推出了多種資料清洗和質量控制工具,例如,美國SAS公司的Data Flux、美國IBM 公司的Data Stage、美國Informatica 公司的Informatica Power Center。

04 大資料儲存與管理

傳統的資料儲存和管理以結構化資料為主,因此關係資料庫系統(RDBMS)可以一統天下滿足各類應用需求。大資料往往是半結構化和非結構化資料為主,結構化資料為輔,而且各種大資料應用通常是對不同型別的資料內容檢索、交叉比對、深度挖掘與綜合分析。面對這類應用需求,傳統資料庫無論在技術上還是功能上都難以為繼。

因此,近幾年出現了oldSQL、NoSQL 與NewSQL 並存的局面。總體上,按資料型別的不同,大資料的儲存和管理採用不同的技術路線,大致可以分為3類。第1類主要面對的是大規模的結構化資料。針對這類大資料,通常採用新型資料庫叢集。

它們通過列儲存或行列混合儲存以及粗粒度索引等技術,結合MPP(Massive Parallel Processing)架構高效的分散式計算模式,實現對PB 量級資料的儲存和管理。這類叢集具有高效能和高擴充套件性特點,在企業分析類應用領域已獲得廣泛應用;第2類主要面對的是半結構化和非結構化資料。

應對這類應用場景,基於Hadoop開源體系的系統平臺更為擅長。它們通過對Hadoop生態體系的技術擴充套件和封裝,實現對半結構化和非結構化資料的儲存和管理;第3類面對的是結構化和非結構化混合的大資料,因此採用MPP 並行資料庫叢集與Hadoop 叢集的混合來實現對百PB 量級、EB量級資料的儲存和管理。

一方面,用MPP 來管理計算高質量的結構化資料,提供強大的SQL和OLTP型服務;另一方面,用Hadoop實現對半結構化和非結構化資料的處理,以支援諸如內容檢索、深度挖掘與綜合分析等新型應用。這類混合模式將是大資料儲存和管理未來發展的趨勢。

05 大資料計算模式與系統

計算模式的出現有力推動了大資料技術和應用的發展,使其成為目前大資料處理最為成功、最廣為接受使用的主流大資料計算模式。然而,現實世界中的大資料處理問題複雜多樣,難以有一種單一的計算模式能涵蓋所有不同的大資料計算需求。

研究和實際應用中發現,由於MapReduce主要適合於進行大資料線下批處理,在面向低延遲和具有複雜資料關係和複雜計算的大資料問題時有很大的不適應性。因此,近幾年來學術界和業界在不斷研究並推出多種不同的大資料計算模式。

所謂大資料計算模式,即根據大資料的不同資料特徵和計算特徵,從多樣性的大資料計算問題和需求中提煉並建立的各種高層抽象(abstraction)或模型(model)。例如,MapReduce 是一個平行計算抽象,加州大學伯克利分校著名的Spark系統中的“分佈記憶體抽象RDD”,CMU 著名的圖計算系統GraphLab 中的“圖並行抽象”(Graph Parallel Abstraction)等。

傳統的平行計算方法,主要從體系結構和程式語言的層面定義了一些較為底層的平行計算抽象和模型,但由於大資料處理問題具有很多高層的資料特徵和計算特徵,因此大資料處理需要更多地結合這些高層特徵考慮更為高層的計算模式。

根據大資料處理多樣性的需求和以上不同的特徵維度,目前出現了多種典型和重要的大資料計算模式。與這些計算模式相適應,出現了很多對應的大資料計算系統和工具。由於單純描述計算模式比較抽象和空洞,因此在描述不同計算模式時,將同時給出相應的典型計算系統和工具,如表1所示,這將有助於對計算模式的理解以及對技術發展現狀的把握,並進一步有利於在實際大資料處理應用中對合適的計算技術和系統工具的選擇使用。

學習大資料分析,一定要掌握這些核心技術

 

06 大資料分析與視覺化

在大資料時代,人們迫切希望在由普通機器組成的大規模叢集上實現高效能的以機器學習演算法為核心的資料分析,為實際業務提供服務和指導,進而實現資料的最終變現。與傳統的線上聯機分析處理OLAP不同,對大資料的深度分析主要基於大規模的機器學習技術,一般而言,機器學習模型的訓練過程可以歸結為最優化定義於大規模訓練資料上的目標函式並且通過一個迴圈迭代的演算法實現,如圖4所示。因而與傳統的OLAP相比較,基於機器學習的大資料分析具有自己獨特的特點。

(1)迭代性:由於用於優化問題通常沒有閉式解,因而對模型引數確定並非一次能夠完成,需要迴圈迭代多次逐步逼近最優值點。

(2)容錯性:機器學習的演算法設計和模型評價容忍非最優值點的存在,同時多次迭代的特性也允許在迴圈的過程中產生一些錯誤,模型的最終收斂不受影響。

(3)引數收斂的非均勻性:模型中一些引數經過少數幾輪迭代後便不再改變,而有些引數則需要很長時間才能達到收斂。

這些特點決定了理想的大資料分析系統的設計和其他計算系統的設計有很大不同,直接應用傳統的分散式計算系統應用於大資料分析,很大比例的資源都浪費在通訊、等待、協調等非有效的計算上。

傳統的分散式計算框架MPI(message passing interface,資訊傳遞介面)雖然程式設計介面靈活功能強大,但由於程式設計介面複雜且對容錯性支援不高,無法支撐在大規模資料上的複雜操作,研究人員轉而開發了一系列介面簡單容錯性強的分散式計算框架服務於大資料分析演算法,以MapReduce、Spark和引數伺服器ParameterServer等為代表。

分散式計算框架MapReduce將對資料的處理歸結為Map和Reduce兩大類操作,從而簡化了程式設計介面並且提高了系統的容錯性。但是MapReduce受制於過於簡化的資料操作抽象,而且不支援迴圈迭代,因而對複雜的機器學習演算法支援較差,基於MapReduce的分散式機器學習庫Mahout需要將迭代運算分解為多個連續的Map 和Reduce 操作,通過讀寫HDFS檔案方式將上一輪次迴圈的運算結果傳入下一輪完成資料交換。

在此過程中,大量的訓練時間被用於磁碟的讀寫操作,訓練效率非常低效。為了解決MapReduce上述問題,Spark 基於RDD 定義了包括Map 和Reduce在內的更加豐富的資料操作介面。

不同於MapReduce 的是Job 中間輸出和結果可以儲存在記憶體中,從而不再需要讀寫HDFS,這些特性使得Spark能更好地適用於資料探勘與機器學習等需要迭代的大資料分析演算法。基於Spark實現的機器學習演算法庫MLLIB已經顯示出了其相對於Mahout 的優勢,在實際應用系統中得到了廣泛的使用。

近年來,隨著待分析資料規模的迅速擴張,分析模型引數也快速增長,對已有的大資料分析模式提出了挑戰。例如在大規模話題模型LDA 中,人們期望訓練得到百萬個以上的話題,因而在訓練過程中可能需要對上百億甚至千億的模型引數進行更新,其規模遠遠超出了單個節點的處理能力。

為了解決上述問題,研究人員提出了引數伺服器(Parameter Server)的概念,如圖5所示。在引數伺服器系統中,大規模的模型引數被集中儲存在一個分散式的伺服器叢集中,大規模的訓練資料則分佈在不同的工作節點(worker)上,這樣每個工作節點只需要儲存它計算時所依賴的少部分引數即可,從而有效解決了超大規模大資料分析模型的訓練問題。目前引數伺服器的實現主要有卡內基梅隆大學的Petuum、PSLit等。

學習大資料分析,一定要掌握這些核心技術

 

在大資料分析的應用過程中,視覺化通過互動式視覺表現的方式來幫助人們探索和理解複雜的資料。視覺化與可視分析能夠迅速和有效地簡化與提煉資料流,幫助使用者互動篩選大量的資料,有助於使用者更快更好地從複雜資料中得到新的發現,成為使用者瞭解複雜資料、開展深入分析不可或缺的手段。大規模資料的視覺化主要是基於並行演算法設計的技術,合理利用有限的計算資源,高效地處理和分析特定資料集的特性。

通常情況下,大規模資料視覺化的技術會結合多解析度表示等方法,以獲得足夠的互動效能。在科學大規模資料的並行視覺化工作中,主要涉及資料流線化、任務並行化、管道並行化和資料並行化4 種基本技術。

微軟公司在其雲端計算平臺Azure 上開發了大規模機器學習視覺化平臺(Azure Machine Learning),將大資料分析任務形式為有向無環圖並以資料流圖的方式向用戶展示,取得了比較好的效果。在國內,阿里巴巴旗下的大資料分析平臺御膳房也採用了類似的方式,為業務人員提供的互動式大資料分析平臺。

學習大資料分析,一定要掌握這些核心技術

 

在不久的將來,多智時代一定會徹底走入我們的生活,有興趣入行未來前沿產業的朋友,可以收藏多智時代,及時獲取人工智慧、大資料、雲端計算和物聯網的前沿資訊和基礎知識,讓我們一起攜手,引領人工智慧的未來!