官术网_书友最值得收藏!

1.3 大數據的存儲與計算模式

大數據時代的出現,簡單地說,是海量數據同完美計算能力結合的結果;準確地說,則是移動互聯網、物聯網產生了海量的數據,大數據計算技術完美地解決了海量數據的收集、存儲、計算、分析的問題。本節將詳細介紹大數據的存儲與處理模式。

1.3.1 大數據的存儲模式

1.大數據存儲問題與挑戰

大數據存儲系統面臨的挑戰主要來自以下3個方面。

● 存儲規模大,通常達到 PB(1 000 TB)甚至 EB(1 000 PB)量級。

● 存儲管理復雜,需要兼顧結構化、非結構化和半結構化的數據。

● 數據服務的種類和水平要求高。換言之,上層應用對存儲系統的性能、可靠性等指標有不同的要求,而數據的大規模和高復雜度放大了達到這些指標的技術難度。

這些挑戰在存儲領域并不是新問題,但在大數據背景下,解決這些問題的技術難度成倍提高,數據的量變終將引起存儲技術的質變。

大數據環境下的存儲與管理軟件棧,需要對上層應用提供高效的數據訪問接口,存取 PB甚至 EB 量級的數據,并且能夠在可接受的響應時間內完成數據的存取,同時保證數據的正確性和可用性;對底層設備,存儲軟件棧需要高效的管理存儲資源,合理地利用設備的物理特性,以滿足上層應用對存儲性能和可靠性的要求。在大數據帶來的新挑戰下,要完成以上這些要求,需要更進一步地研究存儲與管理軟件技術。

2.大數據存儲的關鍵技術

大數據存儲的關鍵技術有以下4個。

(1)分布式文件系統

分布式文件系統所管理的數據存儲在分散的存儲設備或節點上,存儲資源通過網絡連接形成存儲集群。其核心技術主要有以下5個。

① 高效元數據管理技術。在大數據應用中,元數據的規模也非常大,元數據的存取性能是整個分布式文件系統性能的關鍵。常見的元數據管理可以分為集中式和分布式元數據管理架構。集中式元數據管理架構采用單一的元數據服務器,其優點是實現簡單,但存在單點故障等問題。分布式元數據管理架構則將元數據分散在多個節點上,從而解決了元數據服務器性能瓶頸問題,提高了可擴展性,但實現復雜,同時還要解決元數據一致性的問題。此外,還有一種無元數據服務器的分布式架構,使用在線算法組織數據,不需要專用的元數據服務器。但是該架構對數據一致性的保證很困難,實現復雜。另外,文件目錄遍歷操作的效率低下,并且缺乏文件系統全局監控管理功能。

② 系統彈性擴展技術。在大數據環境下,數據規模和復雜度的增加往往非常迅速,因此其存儲系統必須提供按需擴展的功能。實現存儲系統的高可擴展性首先要解決兩個方面的重要問題,即元數據的分配和數據的透明遷移。前者主要通過靜態子樹劃分和動態子樹劃分技術實現,后者則側重數據遷移算法的優化。此外,大數據存儲系統規模龐大,節點失效率高,因此還需要實現一定程度上的自適應管理功能。系統必須能夠根據數據量和計算的工作量估算所需要的節點個數,并動態地將數據在節點間遷移,以實現負載均衡;同時,節點失效時,數據必須可以通過副本等機制進行恢復,不能對上層應用產生影響。

③ 存儲層級內的優化技術。在構建存儲系統時,需要基于成本和性能來考慮,因此存儲系統通常采用多層不同性價比的存儲器件組成存儲層次結構。大數據由于規模大,因此構建高效合理的存儲層次結構,可以在保證系統性能的前提下,降低系統能耗和構建成本。利用數據訪問局部性原理,可以從兩個方面對存儲層次結構進行優化。從提高性能的角度,可以通過分析應用特征,識別熱點數據并對其進行緩存或預取,通過高效的緩存預取算法和合理的緩存容量配比來提高訪問性能。從降低成本的角度來看,采用信息生命周期管理方法,將訪問頻率低的冷數據遷移到低速廉價存儲設備上,可以在小幅犧牲系統整體性能的基礎上,大幅降低系統的構建成本和能耗。

④ 針對應用和負載的存儲優化技術。傳統數據存儲模型需要支持盡可能多的應用,因此需要具備較好的通用性。大數據具有大規模、高動態及快速處理等特性,通用的數據存儲模型通常并不是最能提高應用性能的模型,而大數據存儲系統對上層應用性能的關注遠超過對通用性的追求。針對應用和負載來優化存儲,就是將數據存儲與應用耦合,簡化或擴展分布式文件系統的功能,根據特定應用、特定負載、特定的計算模型對文件系統進行定制和深度優化,使應用達到最佳性能。

⑤ 針對存儲器件特性的優化技術。隨著新型存儲器件的發展和成熟, Flash、PCM 等逐漸開始在存儲層級中占據一席之地,存儲軟件棧也隨之開始逐漸發生變化。以 Flash 為例,起初各廠商通過閃存轉換層 FTL 對新型存儲器進行封裝,以屏蔽存儲器件的特性,適應存儲軟件棧的現有接口。但是隨著 Flash 的普及,產生了許多針對應用對 FTL 進行的優化,以及針對 Flash 特性進行定制的文件系統,甚至有去掉FTL這層冗余直接操作Flash的存儲解決方案。傳統的本地文件系統,包括分布式文件系統,是否能夠與新型存儲器件耦合,最大程度地利用這些存儲器件新特性上的優勢,需要存儲軟件開發者重新審視存儲軟件棧,去除存儲軟件棧的冗余,甚至需要修改一些不再合適的部分。

(2)分布式數據庫

大數據時代,企業對數據的管理、查詢及分析的需求變化促生了一些新技術的出現。需求的變化主要集中在數據規模的增長,吞吐量的上升,數據類型以及應用多樣性的變化。數據規模和吞吐量的增長需求對傳統的關系型數據庫管理系統在并行處理、事務特性的保證、互聯協議的實現、資源管理以及容錯等各個方面帶來了很多挑戰。為此,在分布式文件系統的基礎之上發展出了分布式數據庫技術。

① 事務性數據庫技術。這種技術以NoSQL(即Not Only SQL)為代表。NoSQL系統通過放棄對事務 ACID 語義的方法來增加系統的性能以及可擴展性,具有以下幾個特征。

● 支持非關系數據模型,例如采用鍵值存儲等。

● 簡單操作往往不支持SQL。

● 具備在多個節點中分割和復制數據的能力。

● 用最終一致性機制解決并發讀操作與控制問題。

● 充分利用分布式索引和內存提高性能。

采用NoSQL技術的代表性系統包括 BigTable、Dynamo、HBase、Cassandra、MongoDB。

② 分析型數據庫技術。自從MapReduce被Hadoop開源實現之后,Hadoop廣受歡迎。目前,在大數據領域涌現出了很多針對Hadoop的SQL分析引擎,代表性系統包括Hive、Impala等。其中,Hive是一個基于MapReduce的SQL引擎。Hive提供了一個類似SQL的查詢語言(稱為HQL)。Hive的基本原理是接受HQL,解析HQL,然后把HQL語句翻譯成多個MapReduce的任務,通過MapReduce來實現基本的類似SQL操作。

(3)大數據索引和查詢技術

隨著數據量、數據處理速度和數據多樣性的快速發展,大數據存儲系統不但要處理已有的大數據,還要能快速地處理新數據,這就催生了滿足大數據環境需要的索引和查詢技術。分布式是處理大數據的一個基本思路,這同樣適用于大數據索引和查詢。分布式索引把全部索引數據水平切分后存儲到多個節點上,這樣可以有效避免單個節點構建索引的效率瓶頸問題。當業務增長,需要索引更多的數據或者更快地索引數據時,可以通過水平擴展增加更多的節點來解決。切分索引數據時要注意數據分布的均勻性,要避免大量索引數據分布到一個或者幾個節點上,否則無法達到負載均衡的目的。與分布式索引對應的就是大數據的分布式查詢。所有節點或者部分節點的查詢結果由主節點或者查詢節點進行匯總,然后得到最終結果。

(4)實時流式大數據存儲與處理技術

實時流式大數據的處理與分布式系統在原理上有很多相似之處,但也有其獨特需求。

① 數據流加載。實時流式大數據系統中,數據通常以流的方式進入系統,如何高效且可靠地將數據加載到大數據存儲系統,成為了流式大數據系統實現低延遲處理的基礎。此外,能夠重新處理數據流中的數據也是一個很有價值的特性。

② 復雜事件處理。數據流中的數據源是多種多樣的,數據的格式也是多種多樣的,而數據的轉換、過濾和處理邏輯更是千變萬化,因而需要強大而又靈活的復雜事件處理引擎來適應各種場景下的需求。

③ 高可用性。數據通過復雜處理引擎和流計算框架時,通常會經過很多步驟和節點,而其中任何一步都有出錯的可能,為了保證數據的可靠性和精準投遞,系統需要具有容錯和去重能力。

④ 流量控制和緩存。整個流系統可能有若干個模塊,每個模塊的處理能力和吞吐量差別很大,為了實現總體高效的數據處理,系統需要具備對流量進行控制和動態增加和刪除節點的能力。當數據流入大于流出的速度時,還需要有一定的緩存能力,如果內存不足以緩存快速流入的數據時,需要能夠持久化到存儲層。

1.3.2 大數據的計算模式

1.大數據計算問題與挑戰

人們總是希望有統一的、標準的大數據計算模式,因為有了它,將更加有力地推動大數據技術的應用與發展。所謂大數據計算模式,就是根據大數據的不同數據特征和計算特征,從多樣性的大數據計算問題和需求中提煉并建立的各種抽象或模型(model)。然而,現實世界中的大數據處理問題復雜多樣,難以用一種單一的計算模式來滿足所有不同的大數據計算需求。例如, MapReduce更適合進行線下大數據批處理,而不適合解決低延遲和具有復雜數據關系與復雜計算的大數據問題。

傳統的并行計算方法主要從體系結構和編程語言的層面定義了一些較為底層的并行計算模型,但由于大數據處理問題具有很多高層的數據特征和計算特征,因此傳統的并行計算方法面臨挑戰,其必須結合這些高層特征來定義更高層的并行計算模式。

(1)數據結構特征。從數據結構來看,大數據的數據結構可分為結構化的大數據、半結構化的大數據和非結構化的大數據。在實際應用中,以非結構化為主(如大量的 Internet 站點的日志數據)。

(2)并行計算體系結構特征。由于大數據的存儲通常采用基于集群的分布式存儲,與之對應的大數據的計算處理則必須采用并行計算體系結構。目前,大數據的并行計算結構主要有兩種:一種是以分布式文件系統為基礎的并行計算模式(以Hadoop的MapReduce為代表);另一種是以分布式內存緩存為基礎的并行計算模式(以Spark為代表)。

大數據的上述兩種高層特征決定了不同的大數據處理方式,主要有以下5種分類方法。

(1)數據獲取處理方式。按照數據獲取方式,大數據處理可分為批處理與流式計算。

(2)數據處理類型。從數據處理類型來看,大數據處理可分為傳統的查詢分析計算和復雜的數據挖掘分析計算。

(3)實時響應性能。根據數據計算的響應速度,大數據處理可分為實時計算和非實時計算,有些地方又分為聯機計算(online)和脫機計算(offline)。

(4)迭代計算。根據任務的執行流程,大數據處理可分順序計算和迭代計算。現實的數據處理中有很多計算問題需要大量的迭代計算,為此所采用的計算模式必須具有高效的迭代計算能力。

(5)數據關聯性。當數據關系比較簡單時,可使用MapReduce先進行映射轉換(即map)再進行合并匯總(即reduce)的計算模式。但是對于社會網絡應用場景,數據關系異常復雜,此時必須采用圖結構的計算模式。

2.大數據計算的關鍵技術

不同的大數據的計算模式產生了不同的大數據計算技術,見表1-1。

表1-1 典型大數據計算模式與系統

(1)大數據查詢分析計算模式與技術

當數據規模的增長已大大超過了傳統的關系數據庫的承載和處理能力時,可以使用分布式數據存儲管理和并行化計算方法,大力發展大數據查詢分析計算技術。這種技術提供了面向大數據存儲管理和查詢分析的能力。為了滿足企業日常的經營管理需求,大數據查詢分析計算技術必須解決在數據量極大時如何提供實時或準實時的數據查詢分析能力這一難題。能否達到關系數據庫處理中小規模數據時那樣的秒級響應性能,將決定大數據查詢分析計算技術的成敗。目前,具備大數據查詢分析計算模式的典型系統有Hadoop下的HBase和Hive,Facebook開發的Cassandra, Google公司的Dremel,Cloudera公司的實時查詢引擎Impala。此外,為了實現更高性能的數據查詢分析,還出現了基于內存的分布式數據存儲管理和查詢系統,包括Berkeley AMPLab的Spark數據倉庫Shark,SAP公司的Hana等。

(2)批處理計算模式與技術

最適合于完成大數據批處理的計算模式是MapReduce。MapReduce是一個單輸入、先映射轉換(map)后合并匯總(reduce)的數據處理過程。首先,MapReduce對具有簡單數據關系、易于劃分的大規模數據采用分而治之的并行處理思想;然后將大量重復的數據記錄處理過程總結成map和reduce兩個抽象的操作;最后,MapReduce提供了一個統一的并行計算框架,把并行計算所涉及的諸多系統層細節都交給計算框架去完成,因此大大簡化了程序員進行并行化程序設計的負擔。

MapReduce的簡單易用性使其成為了目前大數據處理領域最為成功、最廣為接受和使用的主流并行計算模式。在開源社區的努力下,目前包含MapReduce的Hadoop系統已發展成為非常成熟的大數據處理平臺,已構建起了一個包括眾多數據處理工具和環境的完整的生態系統。目前國內外的主要IT企業都在使用Hadoop平臺進行企業內大數據的計算處理。

(3)流式計算模式與技術

流式計算是一種高實時性的計算模式,需要在規定的時間窗口內完成新數據的實時計算與處理,避免造成數據堆積和丟失。對于諸如電信、電力、道路監控等行業應用,以及互聯網行業的日志處理來說,它們都同時具有高流量的流式數據和大量積累的歷史數據,因此在提供批處理計算的同時,系統還需要具備高實時性的流式計算能力。流式計算的一個顯著特點是數據在流動而運算不能移動,不同的運算節點常常綁定在不同的服務器上。目前,具備流式計算模式的典型系統有Facebook的Scribe和Apache的Flume(它們可實現日志數據流處理)。更通用的流式計算系統是Twitter公司的Storm和Berkeley AMPLab 的Spark Steaming。

(4)迭代計算模式與技術

為了克服Hadoop MapReduce難以支持迭代計算的缺陷,人們對Hadoop MapReduce進行了改進。例如,Hadoop把迭代控制放到MapReduce作業執行的框架內部,并通過循環敏感的調度器保證前次迭代的reduce輸出和本次迭代的map輸入數據在同一臺物理機上,以減少迭代間的數據傳輸開銷;MapReduce在這個基礎上保持map和reduce任務的持久性,規避啟動和調度開銷;而Twister在前兩者的基礎上進一步引入了可緩存的Map和Reduce對象,利用內存計算和pub/sub網絡進行跨節點數據傳輸。

目前,一個具有快速和靈活的迭代計算能力的典型系統是Berkeley AMPLab的Spark,它采用了基于分布式內存的彈性數據集模型來實現快速的迭代計算。

(5)圖計算模式與技術

社交網絡、Web鏈接關系圖等都包含大量具有復雜關系的圖數據,這些圖數據規模常達到數十億的頂點和上萬億的邊數。這樣大的數據規模和非常復雜的數據關系,給圖數據的存儲管理和計算分析帶來了很大的技術障礙。為此,需要引入圖計算模式。

大規模圖數據處理首先要解決數據的存儲管理問題,通常大規模圖數據也需要使用分布式存儲方式。但是,由于圖數據的數據關系很強,分布存儲就帶來了一個重要的圖分區問題。在有效的圖分區策略下,大規模圖數據得以分布存儲在不同節點上,并在每個節點上對本地子圖進行并行化處理。與任務并行和數據并行的概念類似,由于圖數據并行處理的特殊性,人們提出了一個新的“圖并行”的概念。目前,提供分布式圖計算的典型系統包括Google公司的Pregel,Facebook對Pregel的開源實現Giraph,微軟的Trinity,Berkeley AMPLab 的 Spark的GraphX,CMU的GraphLab以及由其衍生出來的目前性能最好的圖數據處理系統PowerGraph。

(6)內存計算模式與技術

Hadoop的MapReduce是為大數據脫機批處理而設計的,它在分布式的文件系統之上實現大數據處理,它的主要缺陷是由于頻繁的磁盤 IO 讀寫操作而降低了計算性能。隨著大量需要高響應性能的大數據查詢分析計算問題的出現,MapReduce往往難以滿足要求。隨著內存價格的不斷下降以及服務器可配置的內存容量的不斷提高,用內存計算完成高速的大數據處理已經成為大數據計算的一個重要發展趨勢。Spark則是分布內存計算的一個典型的系統,SAP公司的Hana就是一個全內存式的分布式數據庫系統。

主站蜘蛛池模板: 广州市| 新巴尔虎右旗| 青田县| 宜宾县| 辽宁省| 磴口县| 循化| 恭城| 江川县| 仲巴县| 开远市| 萨迦县| 宣化县| 兰州市| 平江县| 颍上县| 崇信县| 高州市| 玉山县| 巨鹿县| 马关县| 平山县| 江山市| 荆门市| 正定县| 磐石市| 太康县| 阳信县| 金寨县| 普格县| 辽阳县| 崇州市| 临漳县| 巴彦淖尔市| 青浦区| 嘉定区| 千阳县| 万荣县| 潜江市| 久治县| 沁源县|