
摘要:本文以Hadoop的計算機分布式存儲與數據分發設計為研究對象,首先簡單介紹了何為Hadoop,并分析了其工作流程,隨后探討分析了基于Hadoop的計算機分布式存儲策略,最后對基于Hadoop的數據分發策略應用進行了探討分析,以供參考。
關鍵詞:Hadoop系統;分布式存儲策略;數據分發設計
在互聯網飛速發展的當下,未來人們更加傾向于移動聯網設備的攜帶,從而為人們工作學習與生活提供更多的便利。而通過將Hadoop的計算機分布式存儲與數據分發設計應用于移動設備之中,能夠提升移動設備文件讀取效率,避免出現網絡堵塞問題,有效降低網絡資源損耗。
1
Hadoop的概述和工作流程
1.1 Hadoop的概述
Hadoop最初由“阿帕奇”基金會所開發的分布式系統基礎架構,這是一種當前比較常見的分布式系統基礎框架,在很多硬件設備組成集群上有著廣泛的應用,不僅如此,Hadoop還能夠在應用程序進行,可以為程序運轉提供一組更穩定的接口,從而使分布式系統得可靠性加強,還有非常好的擴展性。組成它的內容很多,有HDFS、Map、Reduce、HBase等。在Hadoop中主要包括:HDFS(分布式文件系統)、MapReduce(并行編程計算模型)、HBase(分布式數據庫)、Zookeeper(分布式服務框架)以及Hive(數據倉庫),其中核心設計是為海量數據提供存儲的HDFS及為海量數據提供并行計算的MapReduce。
1.2 MapReduce編程模型
組成Hadoop的Map Reduce編程模型最初是谷歌提出的,主要是對大規模集群專門進行海量數據處理的并行計算模型、處理的過程其實就是MapReduce把一堆雜亂無章的數據在處理過程中按照某種特征歸納起來,然后經過并行處理最后得到最終結果。而這期間Map的階段所要面對的是一些互不相關,雜亂無章的數據,所以在這個階段就需要對每個數據進行解析,從而提取出數據的一些特征。然后經Map Reduce的Shuffle的階段以后,在后面進行的Reduc階段就可以得到已經按照數據的某種特征進行歸納的數據,后面的處理就是在此基礎上做進一步的并行處理就可得出結論。
而且MapReduce在執行作業的時候主要歷經了對數據塊進行分割、創建任務、Map、Combiner、Shuffle、Reduce幾個過程,在此流程中我們可以得出MapReduce可簡化分布式編程工作,如果是在使用默認輸入、輸出的數據格式,開發人員只需編寫Map和Reduce兩個函數就可以對海量的數據進行并行分析。
1.3 HDFS文件系統
HDFS文件系統是由Hadoop實現的分布式文件系統。主要是專門負責對存儲Hadoop集群上的數據進行存儲、管理、冗余備份和出錯恢復的相關處理。HDFS具有高容錯性和高擴展性,而且可以設計部署在低廉硬件組成的集群上,同時還可以提供高吞吐量對應用程序的數據進行訪問,此外還可以提供流式數據的訪問模式讀寫超大文件,還可以很好的適用那些有著海量數據集的應用程序。HDFS文件系統的特點主要有:
(1)能滿足超大規模的數據集需求;
(2)可以容許節點失效發生;
(3)擴展性很強;
(4)在存儲文件是能夠將文件分割成數個數據塊。
1.4 Hadop的工作流程
Hadop工作流程如下:
(1)進行數據模塊的分割,由Map Reduce負責數據處理,這些數據全部來源于HDFS,在進行計算前,需要先做好數據的分塊。
(2)進行任務創建。需要先進行Job提交,在Job Tracker獲取到相應提交數據后,便會為本次任務進行Map Task與ReduceTask的分配,并提交至Task Tracker。
(3)經歷Map過程。在每個Datanode中,都運行有一個Task Tracker,其為負責進行Map任務的執行。在具體執行過程中,Map Task會先進行數據的讀取,然后借助Map函數進行計算,在輸出中間結果后,會存放至本地磁盤之中,或者直接讀取至內存之中。
(4)需要經歷Combiner過程。在上述過程中,會有很多中間結果產出,通常不能將其直接交由Reduce Task進行處理,否則將會大大增加網絡擁塞的概率。而通過Combiner過程,能夠統一合并這些結果,便于后續進行集中處理。
(5) Shuffie過程。該過程需要將數據從Map Task輸出至Reduce Task。
(6) Reduce過程。該過程會將Map Task的數據輸送至Reduce函數,在完成數據歸并后可獲得最終結果。待整個Job執行完畢后,將會把獲得結果存儲至HDFS之中[1]。
HDFS寫文件時的步驟如下:
(1)首先在客戶端調用DistrbuteFileSystem對象中的函數Create來創建一個用于寫入數據的文件。
(2)通過調用RPC在Namenode文件系統的namespace來創建一個新的文件。
(3)在客戶端寫入文件。
(4)在列表中的Datanode中形成一個管道,然后通過DataStreamer將數據塊以數據流的形式傳輸到管線中的每個Datanode中。
(5) DFSOutputStream維護了一個ACK隊列,當收到管道中Datanode返回的Ack隊列以后,所對應的數據塊才會從隊列當中進行刪除。
(6)在完成寫入文件后,進行Close函數的調用,完成寫入管道的關閉操作,此時整個HDFS的寫入結束。
HDFS的讀取相對于寫入過程要簡單很多。
2 基于Hadoop的計算機分布式存儲策略
2.1 SR策略
在該策略中,基本思想為:RS(14,10)碼為基本,再加兩個本地校驗塊,就可以很好的完成本地修復。所謂的SR碼,指的是本地可修復碼,這是一類新的再生碼。SR策略與RS策略比較相似,同樣是先分解原文件,需要將其分成10塊,然后在二元擴域上編碼SR的幫助下,生成4個校驗塊,它們分別是P1、P2、P3、P4。然后通過異或的運算,能夠生成S1、S2、S3 3個本地校驗塊,這三個本地檢驗快的關系是S3-S1+S2,這樣來,就可減少存儲一個校驗數據塊,而且系統存儲效率也會得到有效提升。在SR策略中,共包含三個本地組:其中一組可以用X1、X2、X3、X4、X5、S1來表示,二組在具體表示方面,可以采用:X6、X7、X8、X9、X10、S2。三組則是S1、S2、P1、P2、P3、P4。在進行實際修復時,SR策略包含兩種,一是有輕修復,二是重修復,前者適用于本地組中只有任意1個數據塊丟失的場景,能夠通過訪問本地組中其他的數據節點,并完成相應數據塊的下載,通過在異或運算的幫助下完成本地修復。后者適用于在一個本地組中存在兩塊以上的數據塊失效的場景,修復整個過程和RS策略是比較類似的,還有需通過RS解碼,才能夠完成修復、在SR策略中。輕修復能夠適用于所有單個數據塊修復工作,并且大多數兩個數據塊的修復我們也可采用第一種修復方式,甚至于在有些運行三個數據塊修復的時候,也可采用第一種修復方式。在SR策略中,輕修復一般占用的計算開銷比較小,重修復占用的計算開銷比較大。
從可靠性的穩定方面來考慮,通常是在一個掃描周期內,如果存在不能通過重解碼修復的時候,就會存在原文件的失效,那原文件的可靠和之前的公式1是比較類似的,而且比公式1會略微小一些。但是由于策略一般很難滿足MDS的相關性質,所以在遇到如果丟失的數據塊存在5塊或者6塊這種極少發生的情況時,一般采用SR策略將會無法修復,公式(1)如下所示:
2.2 XOR策略
在這個策略當中,需分解原文件,具體也是將原文件分為十個數據塊,然后再采用異或算法生成一塊校驗數據塊,因此在實際存儲中,會有11塊數據塊系統中,那么對于系統存儲開銷而言,則是原文件的1.1倍。當出現數據塊丟失的情況時,需要對其他10塊數據塊進行訪問,并在異或運算的幫助下,完成數據修復。該策略的計算開銷通常比較小。
從可靠性的穩定方面來考慮,在掃描的一個周期內,n塊數據塊中,假如存在任意兩塊丟失這種情況,那么就會導致原文件的失效,那么則原文件的可靠性可用公式(2)表示:
2.3 RS策略
在糾刪碼中,RS碼非常常見,本身容錯和糾錯能力比較強,在數字電視傳輸及衛星通信等領域中有著較為廣泛的應用。近些年RS碼開始在分布式存儲領域應用場景中“嶄露頭角”。該策略在實際應用方面,同樣需要進行原文件分解,分解的數據塊為10個,然后通過RS編碼可以由4個校驗數據塊,這就對系統存儲而言,在其整體開銷上會成為是原文件的1.4倍。在有數據塊丟失這樣的問題出現后,可以通過對其他10塊數據塊進行任意訪問,就可以實現解碼修復,由于在整個修復過程中需要進行解碼操作,所以在實際中計算開銷就會變得很大,從而導致實際的系統設計會變得復雜而且多變。
從穩定可靠性方面來進行考慮,在一個掃描周期內,若任意5塊數據塊丟失,導致原文件失效,那么原文件的可靠性可用以下公式(3)表示:
2.4復制策略
在分布式存儲系統中,復制策略是一種最為常見的存儲策略.這個策略的基本思想是:首先把原文件通過分解從而獲得多個數據塊,隨后針對分解獲得的每一個數據塊,都需給它進行三個副本的備份,最后可以在不同的數據節點中對此進行存儲,這樣一來,如果出現部分數據節點失效,那么系統可以通過對其他備份數據節點訪問,從而獲取原文件或修復失效時的數據節點。從這里面我們能夠發現,此時的存儲開銷會更大,通常是3倍的原文件大小。所以在遇到數據塊丟失這種狀況時,通常系統可直接從有效的數據節點中進行新備份數據節點的下載,而且在整個操作過程中不需要進行解碼計算,因此整個設計是非常易于實現的[2]。
從穩定可靠性方面進行考慮,在掃描的一個周期內,一般只有存在三個副本都丟失的情況,原文件才會達到失效的條件。那么從概率來分析,如果是針對一個數據塊,通常至少還會有一個副本能夠應用的概率為1一(1-p)3,那么我們可作出如下假設,原文件被分解為k塊,那么原文件可靠性P可用以下公式表示:
3 基于的數據分發策略
3.1 數據分法策略
如今我們處于信息大爆炸時代,很多網站點擊、視頻點擊在短時間內均會突破數百萬甚至數千萬,當用戶在集中進行讀取這些文件時,受分布式系統多次讀取特點影響,容易造成網絡堵塞,不利于文件可用性與可靠性提升。為有效解決這一問題,我們可以在分布式存儲網絡的基礎上,嘗試與CND網絡進行融合,將二者的優點集中在一起,網絡中的每個用戶,我們可以視為一個“邊緣”數據節點,不僅可以進行存儲任務分擔,還能將內容發布至網絡邊緣,便于用戶能夠實現數據的就近讀取,解決可能造成的網絡堵塞問題。具體而言,首先在網絡不擁堵時,可以先將文件的部分數據塊提前向用戶進行推送,以減輕后續集中文件讀取的壓力,通過在分布式系統中加入文件數據塊副本機制,隨機將其置于數據節點之中,有效分擔原節點網絡流量的壓力,有效緩解網絡堵塞的壓力。
3.2 驗證
在具體驗證過程中,可以通過應用上面介紹的計算機分布式存儲策略來實現,主要是可以應用的有復制策略、XOR策略和RS策略。為什么沒有應用SR策略,是因為該策略的修復碼是一種本地的修復碼,難以滿足MDS性質,因此在實際驗證過程中,無法明確得出得出已知數據和重構原文件消耗網絡流量的關系。在具體驗證時,通過將集群Datanodel與集群Datanode2置于同一個局域網之內,將集群Datanode3與集群Datanode4作為外部網絡的節點,同時為了進行更加真實的網絡環境模擬,還需要進行上述外部網絡節點文件上傳與下載速度的限制。在集群Datanodel與集群Datanode2之間,放置部分數據塊,用于數據分發效果的模擬,且其中的存儲數據均為已知數據。通過進行設置集群Datanode1與集群Datanode2分發數據閥值為640M,并在OM、128M、256M、384M、512M、640M的條件下,測試集群Datanodel應用上述策略重構1280M和640M的文件所消耗的外部網絡流量,并作對比分析。在外部網絡流量中,包括在重構文件過程中,包括集群Datanode3與集群Datanode4流入集群Datanodel的網絡流量[3]。
從相應結果中我們能夠認識到,在集群Datanodel己知一部分數據的情況下,在采用復制策略進行文件存儲重構時,隨著己知數據的增加,消耗的外部流量在逐漸減少,由此我們能夠認識到,數據分發策略對于應用復制策略存儲的文件是可行的。而對于XOR策略和RS策略而言,實際消耗的外部網絡流量并沒有出現減少情況,這就說明在分布式存儲架構下的數據分發策略對應用編碼策略存儲的文件是不可行的。
4 結束語
綜上所述,對于Hadoop而言,本身有著“一次寫入.多次讀取”的特點,而在文件讀取高峰期,Hadoop這種特點很容易造成網絡堵塞,因此為有效解決這一問題,需要在了解Hadoop以及工作流程的基礎上,分析其基于Hadoop的數據分發策略,這對于提升Hadoop整體性能而言有著重要意義。
參考文獻
[1]余輝.面向微博輿情的Hadoop存儲平臺設計與實現[D].中國科學院大學,2016.
[2]涂竹松.基于Hadoop的數據共享模型研究[D].合肥工業大學,201 5.
[3]吳夢瀟,基于HADOOP的分布式云平臺搜索系統設計與實現[D].湖南大學,2016.
作者簡介
趙穎(1979-),女,青海省互助縣人。青海廣播電視大學,碩士,副教授。研究方向為計算機應用(數據處理)。