海量資料處理方案
什麼是海量資料?
正如《逍遙遊》中的一句話:北冥有魚,其名為鯤,鯤之大,一鍋燉不下,化而為鳥,其名為鵬,鵬之大,需要兩個燒烤架;簡單的可以把這裡的海量資料理解為這裡的鯤鵬 ,資料大到一個伺服器存不下,就需要兩個甚至多個伺服器來儲存。而接下來我們需要做的就是用一臺伺服器來處理海量資料。
以下是一些海量資料處理的例子:
1. 給定一個大小超過 100G 的檔案, 其中存在 IP 地址, 找到其中出現次數最多的 IP 地址(hash檔案切分)
思路:顯然100G大小的檔案是不可能直接載入到記憶體中去處理的。所以我們需要對這個檔案進行劃分,前提是我們需要將相同的IP地址劃分到同一空間。假設我們將檔案分成1000份,那麼一份的大小大概是100M,先將IP地址利用雜湊演算法求得一個整數key,再將index = key % 1000,得到的結果相同的放到同一檔案中,這樣就將相同的IP地址放到了同一個檔案下。再對每一個檔案分別進行處理,用count來記錄出現的次數,最後利用排序演算法對count進行排序找到最大的那個,即其對應的IP地址為出現次數最多的IP地址。
利用這種方法解決這個問題的關鍵在於我們在用雜湊函式進行雜湊切分後相同的IP地址一定會被分到同一個檔案中。對於雜湊切分,相同的key,得到的雜湊值一定相同。
2.給定100億個整數, 找到其中只出現一次的整數(點陣圖變形, 用兩位來表示次數).
首先我們需要知道的是在64位作業系統下,記憶體大小為8G,那麼100億個數大概需要的空間為40G,顯然是不能直接載入到記憶體中進行處理的,而且在64位作業系統下能表示的整型的個數大概為42億,所以這100億個數有三種狀態:不存在,存在一次,存在多次。
因此,我們需要對傳統的點陣圖進行擴充套件,使用2bit即可,00表示不存在,01表示存在一次,02表示存在多次,11表示無效狀態即可。
3.有兩個檔案, 分別有100億個query(查詢詞, 字串), 只有1G記憶體, 找到兩個檔案的交集(hash檔案切分 + 布隆過濾器).
思路:可以先將檔案A進行雜湊切分,讀取每一個query,計算雜湊值,例如我們要切分成100份,就可以讓hash值%100,如果模的值為0,就把這個query放到布隆過濾器中,這樣我們就得到了0號集合;然後遍歷檔案B,對其中的query進行hash值,再模上100,如果模的值為0,就在布隆過濾器中查詢。
依次處理1號集合(hash值%100等於1),2號集合,3號集合……….
備註:布隆的不在是準確的,但在是有誤差的。
4. 給上千個檔案, 每個檔案大小為1K - 100M, 設計演算法找到某個詞存在在哪些檔案中(倒排索引).
首先,把這個詞存入一個單項鍊表中,頭結點儲存這個詞,連結串列後面儲存的都是檔名,然後依次遍歷每個
檔案,取出檔案中的每一個單詞並與這個詞對比,若找到,就將此檔案的檔名新增到後面的連結串列中,遍歷
完所有檔案,然後就得到了這個詞存在在哪些檔案中
相關推薦
海量資料處理方案
什麼是海量資料? 正如《逍遙遊》中的一句話:北冥有魚,其名為鯤,鯤之大,一鍋燉不下,化而為鳥,其名為鵬,鵬之大,需要兩個燒烤架;簡單的可以把這裡的海量資料理解為這裡的鯤鵬 ,資料大到一個伺服器存不下,
由散列表到BitMap的概念與應用(三):面試中的海量資料處理
一道面試題 在面試軟體開發工程師時,經常會遇到海量資料排序和去重的面試題,特別是大資料崗位。 例1:給定a、b兩個檔案,各存放50億個url,每個url各佔64位元組,記憶體限制是4G,找出a、b檔案共同的url? 首先我們最常想到的方法是讀取檔案a,建立雜湊表,然後再讀取檔案b,遍歷檔
十道海量資料處理面試題與十個方法大總結:
轉載之處:http://blog.csdn.net/liuqiyao_01/article/details/26567237 筆試 = (資料結構+演算法) 50%+ (計算機網路 + 作業系統)30% +邏輯智力題10% + 資料庫5% + 歪門邪道題5%,而面
海量資料處理方法及應用
一、雜湊切割top K問題 1. 給一個超過100G大小的log file, log中存著IP地址, 設計演算法找到出現次數最多的IP地址? (1)首先使用雜湊函式HashFunc(ip)將每一個IP地址轉化為整型,再通過HashFunc(i
海量資料處理例項
在bat等大公司,基本所有業務的資料量級都很龐大,那麼如何在保證資料完整性的情況下快速處理成了一個通用的難題,這裡列舉幾個例子,大致反應一些處理思想。 1.一個檔案中,每一行有一個整數,有上億行,目的:統計出現次數超過三次的整數寫入到另一個檔案中。 分析: (1)首先資料
海量資料處理演算法—Bit-Map
分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!  
海量資料處理(一) 求top k問題
優先順序佇列 給一組海量資料,限制記憶體為2M,,找出裡面最大/小的Tokp k int main() { vector<int> vec; srand(time(NULL)); for(int i =0;i<1000000;i++) { v
海量資料處理:十道面試題與十個海量資料處理方法總結(大資料演算法面試題)
第一部分、十道海量資料處理面試題 1、海量日誌資料,提取出某日訪問百度次數最多的那個IP。 首先是這一天,並且是訪問百度的日誌中的IP取出來,逐個寫入到一個大檔案中。注意到IP是32位的,最多有個2^32個IP。同樣可以採用對映的方法
海量資料處理問題
雜湊切割、Top K問題 問題一:給一個超過100G大小的log file, log中存著IP地址, 設計演算法找到出現次數最多的IP地址? 問題二:與上題目條件相同,如何找出Top K的IP? 問題
海量資料處理:十道面試題與十個海量資料處理方法總結
第一部分、十道海量資料處理面試題 1、海量日誌資料,提取出某日訪問百度次數最多的那個IP。 首先是這一天,並且是訪問百度的日誌中的IP取出來,逐個寫入到一個大檔案中。注意到IP是32位的,最多有個2^32個IP。同樣可以採用對映的方法,比如模1000,把整個大檔
動不動的“上千萬”——海量資料處理面試題
一、 海量資料,出現次數最多or前K 1、給A,B兩個檔案,各存放50億條URL,每條URL佔用64個位元組,記憶體限制為4G,找出A,B中相同的URL。 【分析】我們先來看如果要把這些URL全部載入到記憶體中,需要多大的空間。 1MB = 2^20 = 10^6 =
面試技巧——十道海量資料處理面試題與十個方法大總結
第一部分、十道海量資料處理面試題 1、海量日誌資料,提取出某日訪問百度次數最多的那個IP。 首先是這一天,並且是訪問百度的日誌中的IP取出來,逐個寫入到一個大檔案中。注意到IP是32位的,最多有個2^32個IP。同樣可以採用對映的方法,比如模1000,把整個大
(轉)十道海量資料處理面試題與十個方法大總結
首先是這一天,並且是訪問百度的日誌中的IP取出來,逐個寫入到一個大檔案中。注意到IP是32位的,最多有個232個IP。同樣可以採用對映的方法,比如模1000,把整個大檔案對映為1000個小檔案,再找出每個小文中出現頻率最大的IP(可以採用hash_m
海量資料處理-Topk引發的思考
海量資料處理–TopK引發的思考 三問海量資料處理: 什麼是海量資料處理,為什麼出現這種需求? 如何進行海量資料處理,常用的方法和技術有什麼? 如今分散式框架已經很成熟了,為什麼還用學習海量資料處理的
十道海量資料處理面試題與十個方法大總結
海量資料處理:十道面試題與十個海量資料處理方法總結第一部分、十道海量資料處理面試題1、海量日誌資料,提取出某日訪問百度次數最多的那個IP。 首先是這一天,並且是訪問百度的日誌中的IP取出來,逐個寫入到一個大檔案中。注意到IP是32位的,
海量資料處理-重新思考排序
海量資料處理--重新思考排序(1) 海量資料處理常用技術概述 如今網際網路產生的資料量已經達到PB級別,如何在資料量不斷增大的情況下,依然保證快速的檢索或者更新資料,是我們面臨的問題。 所謂海量資料處理,是指基於海量資料的儲存、處理和操作等。因為資料量太大無法
從Hadoop框架與MapReduce模式中談海量資料處理 含淘寶技術架構
從hadoop框架與MapReduce模式中談海量資料處理前言 幾周前,當我最初聽到,以致後來初次接觸Hadoop與MapReduce這兩個東西,我便稍顯興奮,覺得它們很是神祕,而神祕的東西常能勾起我的興趣,在看過介紹它們的文章或論文之後,覺得Ha
海量資料處理演算法—Bloom Filter
1. Bloom-Filter演算法簡介 Bloom-Filter,即布隆過濾器,1970年由Bloom中提出。它可以用於檢索一個元素是否在一個集合中。Bloom Filter(BF)是一種空間效率很高的隨機資料結構,它利用位陣列很簡潔地表示一個集合,並能判斷一個
大資料十道經典海量資料處理面試題與十個方法大總結
第一部分、十道海量資料處理面試題 1、海量日誌資料,提取出某日訪問百度次數最多的那個IP。 此題,在我之前的一篇文章演算法裡頭有所提到,當時給出的方案是:IP的數目還是有限的,最多2^32個,所以可以考慮使用hash將ip直接存入記憶體,然後進行統計。 再詳細介紹下此方案:首先
Python大資料處理方案
SQLyog 匯出表中資料存為csv檔案 選擇資料庫表 --> 右擊屬性 --> 備份/匯出 --> 匯出表資料作為 --> 選擇cvs --> 選擇下面的“更改” --> 欄位 --> 可變長度-->