所謂海量資料處理,無非就是基於海量資料上的儲存、處理、操作。何謂海量,就是資料量太大,所以導致要麼是無法在較短時間內迅速解決,要麼是資料太大,導致無法一次性裝入記憶體。
那解決辦法呢?針對時間,我們可以採用巧妙的演算法搭配合適的資料結構,如bloom filter/hash/bit-map/堆/資料庫或倒排索引/trie樹,針對空間,無非就乙個辦法:大而化小:分而治之/hash對映,你不是說規模太大嘛,那簡單啊,就把規模大化為規模小的,各個擊破不就完了嘛。
至於所謂的單機及集群問題,通俗點來講,單機就是處理裝載資料的機器有限(只要考慮cpu,記憶體,硬碟的資料互動),而集群,機器有多輛,適合分布式處理,平行計算(更多考慮節點和節點間的資料互動)。
再者,通過本blog內的有關海量資料處理的文章:big data processing
,我們已經大致知道,處理海量資料問題,無非就是:
分而治之/hash對映 + hash統計 + 堆/快速/歸併排序:
分而治之/hash對映:針對資料太大,記憶體受限,只能是:把大檔案化成(取模對映)小檔案,即16字方針:大而化小,各個擊破,縮小規模,逐個解決
hash統計:當大檔案轉化了小檔案,那麼我們便可以採用常規的hash_map(ip,value)來進行頻率統計。
堆/快速排序:統計完了之後,便進行排序(可採取堆排序),得到次數最多的ip。
雙層桶劃分:
雙層桶劃分----其實本質上還是分而治之的思想,重在「分」的技巧上!
適用範圍:第k大,中位數,不重複或重複的數字
基本原理及要點:因為元素範圍很大,不能利用直接定址表,所以通過多次劃分,逐步確定範圍,然後最後在乙個可以接受的範圍內進行。可以通過多次縮小,雙層只是乙個例子。
bloom filter/bitmap:
trie樹/資料庫/倒排索引:
trie樹,即字典樹,又稱單詞查詢樹或鍵樹,是一種樹形結構,是一種雜湊樹的變種。典型應用是用於統計和排序大量的字串(但不僅限於字串),所以經常被搜尋引擎系統用於文字詞頻統計。它的優點是:最大限度地減少無謂的字串比較,查詢效率比雜湊表高。
trie的核心思想是空間換時間。利用字串的公共字首來降低查詢時間的開銷以達到提高效率的目的。
它有3個基本性質:
根節點不包含字元,除根節點外每乙個節點都只包含乙個字元。
從根節點到某一節點,路徑上經過的字元連線起來,為該節點對應的字串。
每個節點的所有子節點包含的字元都不相同。
適用範圍:資料量大,重複多,但是資料種類小可以放入記憶體
基本原理及要點:實現方式,節點孩子的表示方式
擴充套件:壓縮實現。
外排序:
分布式處理之hadoop/mapreduce:
mapreduce是一種計算模型,簡單的說就是將大批量的工作(資料)分解(map)執行,然後再將結果合併成最終結果(reduce)。這樣做的好處是可以在任務被分解後,可以通過大量機器進行平行計算,減少整個操作的時間。但如果你要我再通俗點介紹,那麼,說白了,mapreduce的原理就是乙個歸併排序。
適用範圍:資料量大,但是資料種類小可以放入記憶體
基本原理及要點:將資料交給不同的機器去處理,資料劃分,結果歸約。
海量資料處理方法總結
適用範圍 第k大,中位數,不重複或重複的數字 基本原理及要點 因為元素範圍很大,不能利用直接定址表,所以通過多次劃分,逐步確定範圍,然後最後在乙個可以接受的範圍內進行。可以通過多次縮小,雙層只是乙個例子。擴充套件 問題例項 1 2.5億個整數中找出不重複的整數的個數,記憶體空間不足以容納這2.5億個...
海量資料處理分析方法
2008 08 06 08 04 海量資料是發展趨勢,對資料分析和挖掘也越來越重要,從海量資料中提取有用資訊重要而緊迫,這便要求處理要準確,所以,對海量資料的研究很有前途,也很值得進行廣泛深入的研究。在實際工作中,有幸接觸到海量的資料處理問題,對其進行處理是一項艱鉅而複雜的任務。原因有以下幾個方面 ...
海量資料處理方法歸類
解決思路 典型的top k演算法。模板 先用hashmap統計頻率 或去重 維護乙個k大小的堆,統計top k就行了。解決思路 可以估計每個檔案安的大小為5g 64 320g,遠遠大於記憶體限制的4g。所以不可能將其完全載入到記憶體中處理。考慮採取分而治之的方法。遍歷檔案a,對每個url求取hash...