張軍鵬 張蕾
[摘要]海量數據的持續劇增促成大數據時代的到來,如何在信息化浪潮中挖掘“數字石油”,將大數據轉換為大市場、大智慧和大生態,是我們面臨的歷史機遇。大數據的質量保障大數據的價值。而數據清洗的最終目的就是提高大數據的質量,本文以Hadoop平臺為例介紹大數據中數據清洗并分析其處理框架。
[關鍵詞]大數據 數據清洗 Hadoop
無所不在的移動設備、RFID、無線傳感器分秒都在產生數據,數以億計的用戶互聯網服務時刻在產生巨大的信息交互。要處理的數據量越來越大,而且還將更加快速地增長,傳統的數據處理技術已經無法應付,大數據時代已經來臨。充分利用和挖掘大數據價值,對于各行業提升用戶服務質量,降低運營成本有著重要意義。大數據的維度包含了數量、多樣性、速度、精確性等,在如此大維度中不可避免的存在著粗糙的、不合時宜的數據,如何將這些非潔凈數據有效轉化成高質量的干凈數據,涉及到大數據中的數據清理工作。基于劣質數據的數據決策不僅影響效率而且存在誤差,高效的數據清洗解決“非潔凈數據”的問題'從而保證了原始大數據的正確性和準確性。大數據有類別繁多的典型特點,同時處理速度快亦是大數據的鮮明特征,其包含大量在線或實時數據分析處理的需求,要求時效性即1秒定律,這也給數據清洗帶來巨大的挑戰。
1.大數據環境下的數據清洗
目前被廣泛認可的數據清洗定義為發現和清除數據中的錯誤和不一致來提高數據的質量,那么數據清洗的任務就是通過各種措施從準確性、一致性、無冗余、符合應用的需求等方面提高已有數據的質量。大數據的數據清洗可以視作知識發現(KDD)的預備階段。
傳統數據信息主要產生于服務器或個人電腦,這些設備位置相對固定。隨著移動終端的快速發展,手機、平板電腦、GPS等產生的數據量呈現爆炸式增長,且產生的數據帶有明顯的時空特性。要盡可能收集異源甚至是異構的數據,多角度驗證數據的全面性和可信性,數據的篩選在質與量之間需要考量權衡。
產生數據質量問題的原因很多,導致大數據中存在質量問題,如數據的數值重復、缺失、數據的噪聲和異常值。數據清洗是一個非常復雜的任務,并且包含著一些互相關聯的問題。一方面轉換必須盡可能具有通用性,而且不依賴大量的編程工作,也就是支持在多領域內的多種錯誤檢測算法;另一方面,系統需要支持一種簡單的接口定義來進行錯誤檢測和數據轉換。因此,需要在現有的算法和功能基礎上,設計相應的數據清洗系統,使它具有相對的通用性和可交互性。通用性的主要實現技術有數據標準化、術語化、通用的接口標準,即通用的過程描述語言,通用的數據結構以支持用戶進行擴展。可交互性支持用戶通過系統反饋的檢測統計圖表,實時地修改轉換過程,避免用戶與系統的隔離。
2.Hadoop大數據核心架構
Hadoop之所以在大數據處理應用中得到廣泛應用,得益于其自身在數據提取、變形和加載(ETL方面上的天然優勢。Hadoop的分布式架構,將大數據處理引擎盡可能的靠近存儲。
Hadoop由節點元素組成,主要包括NameNode節點和DataN-ode節點。NameNode節點負責管理文件系統名稱空間和控制外部客戶機的訪問。決定是否將文件映射到DataNode上的復制塊上,位于HDFS的頂端。DataNode節點是Hadoop集群的計算節點,通常以機架的形式組織,機架通過一個交換機將所有系統連接起來。
3.Hadoop大數據中數據清洗模型分析
大數據處理平臺Hadoop及其Map-Reduce框架廣泛應用于數據密集領域,Map-Reduce框架被廣泛使用,特別是TB級及以上數據處理方面有其獨特的優勢,由Map和Reduce函數組成,越來越多的ETL清洗過程都在使用Map-Reduce框架編程模式,需要對其運行機制、算法、性能優化、編程框架設計進行開發定制。實現一個通用性比較強的Map-Reduce程序比較困難,由于各種數據源的復雜性和需求的不確定性,實際應用中都存在大量的重復開發,并沒有這樣減少開發的設計框架提出。
基于Hadoop的數據清洗框架設計思路基于使用Hadoop提高數據清洗性能,封裝隱藏Map-Reduce程序開發的復雜性,這對不熟悉Hadoop的開發人員起到很大的幫助。設計框架具備良好的可擴展性,提高開發效率,提供配置文本,使得多路輸出分配到不同的HDFS目錄中,方便建立Hive分區表。
數據清洗使用了Map-Reduce數據流,在數據清洗的數據流中Map階段是核心。Map函數采用XML配置,相應的清洗類動態獲取、清洗規則設置,將數據從原始狀態清洗出來,并格式化為結構化數據。Partitioner數據分區同樣在Map-Reduce框架設計中特別重要,其任務是分發Map端的輸出數據作為Reducer端的輸入數據,如果處理不好,會造成Reducer端的數據不均勻,導致有些Re-duce任務運行慢,進而影響整體速度。Reduce的主要目的是將數據清洗的結果多路輸出到相應的目錄,如果只需要將結果分配的單一目錄,可以不用Reducer更能提高性能。
目前對Hadoop的研究和使用已經有了相應的基礎和積累,但是對Map-Reduce框架理解和應用不盡理想,利用Map-Reduce設計的軟件系統效率不高。本文對Map-Reduce編程框架的進一步設計分析,以求達到優化的目的。