大資料六大核心技術

好程式設計師發表於2020-12-03

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

   1 、大資料生命週期

   底層是基礎設施,涵蓋計算資源、記憶體與儲存和網路互聯,具體表現為計算節點、叢集、機櫃和資料中心。在此之上是資料儲存和管理,包括檔案系統、資料庫和類似YARN 的資源管理系統。然後是計算處理層,如 hadoop MapReduce Spark ,以及在此之上的各種不同計算正規化,如批處理、流處理和圖計算等,包括衍生出程式設計模型的計算模型,如 BSP GAS 等。資料分析和視覺化基於計算處理層。分析包括簡單的查詢分析、流分析以及更復雜的分析 ( 如機器學習、圖計算等 ) 。查詢分析多基於表結構和關係函式,流分析基於資料、事件流以及簡單的統計分析,而複雜分析則基於更復雜的資料結構與方法,如圖、矩陣、迭代計算和線性代數。一般意義的視覺化是對分析結果的展示。但是透過互動式視覺化,還可以探索性地提問,使分析獲得新的線索,形成迭代的分析和視覺化。基於大規模資料的實時互動視覺化分析以及在這個過程中引入自動化的因素是目前研究的熱點。

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

   2 、大資料技術生態

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

   Hadoop 是一個能夠讓使用者輕鬆架構和使用的分散式計算平臺。使用者可以輕鬆地在 Hadoop 上開發和執行處理海量資料的應用程式。 Hadoop 是一個資料管理系統,作為資料分析的核心,彙集了結構化和非結構化的資料,這些資料分佈在傳統的企業資料棧的每一層。 Hadoop 也是一個大規模並行處理框架,擁有超級計算能力,定位於推動企業級應用的執行。 Hadoop 又是一個開源社群,主要為解決大資料的問題提供工具和軟體。雖然 Hadoop 提供了很多功能,但仍然應該把它歸類為多個元件組成的 Hadoop 生態圈,這些元件包括資料儲存、資料整合、資料處理和其他進行資料分析的專門工具。

   低成本、高可靠、高擴充套件、高有效、高容錯等特性讓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 平臺改進後將與各種新的計算模式和系統共存,並相互融合,形成新一代的大資料處理系統和平臺。

   3 、大資料採集與預處理

   在大資料的生命週期中,資料採集處於第一個環節。根據MapReduce 產生資料的應用系統分類,大資料的採集主要有 4 種來源:管理資訊系統、 Web 資訊系統、物理資訊系統、科學實驗系統。對於不同的資料集,可能存在不同的結構和模式,如檔案、 XML 樹、關係表等,表現為資料的異構性。對多個異構的資料集,需要做進一步整合處理或整合處理,將來自不同資料集的資料收集、整理、清洗、轉換後,生成到一個新的資料集,為後續查詢和分析處理提供統一的資料檢視。針對管理資訊系統中異構資料庫整合技術、 Web 資訊系統中的實體識別技術和 DeepWeb 整合技術、感測器網路資料融合技術已經有很多研究工作,取得了較大的進展,已經推出了多種資料清洗和質量控制工具,例如,美國 SAS 公司的 Data Flux 、美國 IBM 公司的 Data Stage 、美國 Informatica 公司的 Informatica Power Center

   4 、大資料儲存與管理

   傳統的資料儲存和管理以結構化資料為主,因此關聯式資料庫系統(RDBMS) 可以一統天下滿足各類應用需求。大資料往往是半結構化和非結構化資料為主,結構化資料為輔,而且各種大資料應用通常是對不同型別的資料內容檢索、交叉比對、深度挖掘與綜合分析。面對這類應用需求,傳統資料庫無論在技術上還是功能上都難以為繼。因此,近幾年出現了 oldSQL NoSQL NewSQL 並存的局面。總體上,按資料型別的不同,大資料的儲存和管理採用不同的技術路線,大致可以分為 3 類。第 1 類主要面對的是大規模的結構化資料。針對這類大資料,通常採用新型資料庫叢集。它們透過列儲存或行列混合儲存以及粗粒度索引等技術,結合 MPP(Massive Parallel Processing) 架構高效的分散式計算模式,實現對 PB 量級資料的儲存和管理。這類叢集具有高效能和高擴充套件性特點,在企業分析類應用領域已獲得廣泛應用 ; 2 類主要面對的是半結構化和非結構化資料。應對這類應用場景,基於 Hadoop 開源體系的系統平臺更為擅長。它們透過對 Hadoop 生態體系的技術擴充套件和封裝,實現對半結構化和非結構化資料的儲存和管理 ; 3 類面對的是結構化和非結構化混合的大資料,因此採用 MPP 並行資料庫叢集與 Hadoop 叢集的混合來實現對百 PB 量級、 EB 量級資料的儲存和管理。一方面,用 MPP 來管理計算高質量的結構化資料,提供強大的 SQL OLTP 型服務 ; 另一方面,用 Hadoop 實現對半結構化和非結構化資料的處理,以支援諸如內容檢索、深度挖掘與綜合分析等新型應用。這類混合模式將是大資料儲存和管理未來發展的趨勢。

   5 、大資料計算模式與系統

   計算模式的出現有力推動了大資料技術和應用的發展,使其成為目前大資料處理最為成功、最廣為接受使用的主流大資料計算模式。然而,現實世界中的大資料處理問題複雜多樣,難以有一種單一的計算模式能涵蓋所有不同的大資料計算需求。研究和實際應用中發現,由於MapReduce 主要適合於進行大資料線下批處理,在面向低延遲和具有複雜資料關係和複雜計算的大資料問題時有很大的不適應性。因此,近幾年來學術界和業界在不斷研究並推出多種不同的大資料計算模式。

   所謂大資料計算模式,即根據大資料的不同資料特徵和計算特徵,從多樣性的大資料計算問題和需求中提煉並建立的各種高層抽象(abstraction) 或模型 (model) 。例如, MapReduce 是一個平行計算抽象,加州大學伯克利分校著名的 Spark 系統中的“分佈記憶體抽象 RDD ”, CMU 著名的圖計算系統 GraphLab 中的“圖並行抽象” (Graph Parallel Abstraction) 等。傳統的平行計算方法,主要從體系結構和程式語言的層面定義了一些較為底層的平行計算抽象和模型,但由於大資料處理問題具有很多高層的資料特徵和計算特徵,因此大資料處理需要更多地結合這些高層特徵考慮更為高層的計算模式。

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

   6 、大資料分析與視覺化

   在大資料時代,人們迫切希望在由普通機器組成的大規模叢集上實現高效能的以機器學習演算法為核心的資料分析,為實際業務提供服務和指導,進而實現資料的最終變現。與傳統的線上聯機分析處理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 的優勢,在實際應用系統中得到了廣泛的使用。


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69913864/viewspace-2739092/,如需轉載,請註明出處,否則將追究法律責任。

相關文章