Hadoop之企业案例分析
Hadoop之企業(yè)案例分析
目錄
1. 海量日志數(shù)據(jù),提取出某日訪問百度次數(shù)最多的那個IP
首先是這一天,并且是訪問百度的日志中的 IP 取出來,逐個寫入到一個大文件中。注意到IP 是 32 位的,最多有個 2^32 個 IP。同樣可以采用映射的方法, 比如模 1000,把整個大文件映射為 1000 個小文件,再找出每個小文中出現(xiàn)頻率最大的 IP(可以采用 hash_map進(jìn)行頻率統(tǒng)計(jì),然后再找出頻率最大 的幾個)及相應(yīng)的頻率。然后再在這 1000 個最大的IP 中,找出那個頻率最大的 IP,即為所求。
或者如下闡述:
算法思想:分而治之+Hash
2. 有一個1G大小的一個文件,里面每一行是一個詞,詞的大小不超過16字節(jié),內(nèi)存限制大小是1M。返回頻數(shù)最高的100 個詞
方案:
對每個小文件,統(tǒng)計(jì)每個文件中出現(xiàn)的詞以及相應(yīng)的頻率(可以采用 trie 樹/hash_map 等),并取出出現(xiàn)頻率最大的100個詞(可以用含100個結(jié)點(diǎn)的最小堆),并把100個詞及相應(yīng)的頻率存入文件,這樣又得到了5000個文件。下一步就是把這5000個文件進(jìn)行歸并(類似與歸并排序)的過程了。
3. 有 10 個文件,每個文件1G,每個文件的每一行存放的都是用戶的query,每個文件的query都可能重復(fù)。要求你按照query的頻度排序。
還是典型的 TOP K 算法,解決方案如下:
方案 1:
方案 2:
方案 3:
4. 給定 a、b 兩個文件,各存放 50 億個 url,每個 url 各占 64 字節(jié),內(nèi)存限制是 4G,讓你找出 a、b 文件共同的 url?
方案 1:可以估計(jì)每個文件的大小為 5G×64=320G,遠(yuǎn)遠(yuǎn)大于內(nèi)存限制的 4G。所以不可能將其完全加載到內(nèi)存中處理。考慮采取分而治之的方法。
方案2:如果允許有一定的錯誤率,可以使用Bloom filter,4G內(nèi)存大概可以表示340億bit。將其中一個文件中的url使用Bloom filter映射為這340億 bit,然后挨個讀取另外一個文件的url,檢查是否與 Bloom filter,如果是,那么該 url 應(yīng)該是共同的 url(注意會有一定的錯誤率)。
Bloom filter 日后會在BLOG 內(nèi)詳細(xì)闡述。
5. 在 2.5 億個整數(shù)中找出不重復(fù)的整數(shù),注,內(nèi)存不足以容納這 2.5 億個整數(shù)
方案 1:采用2-Bitmap(每個數(shù)分配 2bit,00 表示不存在,01 表示出現(xiàn)一次,10 表示多次,11 無意義)進(jìn)行,共需內(nèi)存 2^32 * 2 bit=1 GB 內(nèi)存,還可以接受。然后掃描這2.5億個整數(shù),查看Bitmap中相對應(yīng)位,如果是00變01,01變10,10保持不變。掃描完事后,查看bitmap,把對應(yīng)位是01的整數(shù)輸出即可。
方案 2:也可采用與第 1 題類似的方法,進(jìn)行劃分小文件的方法。然后在小文件中找出不重復(fù)的整數(shù),并排序。然后再進(jìn)行歸并,注意去除重復(fù)的元素。
6. 騰訊面試題:給40億個不重復(fù)的 unsigned int 的整數(shù),沒排過序的,然后再給一個數(shù),如何快速判斷這個數(shù)是否在那40億個數(shù)當(dāng)中?
方案 1:oo,申請 512M 的內(nèi)存,一個 bit 位代表一個 unsigned int 值。讀入 40 億個數(shù),設(shè)置相應(yīng)的 bit 位,讀入要查詢的數(shù),查看相應(yīng) bit 位是否為 1,為 1 表示存在,為 0 表示不存在。
7. 怎么在海量數(shù)據(jù)中找出重復(fù)次數(shù)最多的一個?
方案 1:先做hash,然后求模映射為小文件,求出每個小文件中重復(fù)次數(shù)最多的一個,并記錄重復(fù)次數(shù)。然后找出上一步求出的數(shù)據(jù)中重復(fù)次數(shù)最多的一個就是所求(具體參考前面的題)。
8. 上千萬或上億數(shù)據(jù)(有重復(fù)),統(tǒng)計(jì)其中出現(xiàn)次數(shù)最多的N 個數(shù)據(jù)?
方案 1:上千萬或上億的數(shù)據(jù),現(xiàn)在的機(jī)器的內(nèi)存應(yīng)該能存下。所以考慮采用hash_map/搜索二叉樹/紅黑樹等來進(jìn)行統(tǒng)計(jì)次數(shù)。然后就是取出前N個出現(xiàn)次數(shù)最多的數(shù)據(jù)了
總結(jié)
以上是生活随笔為你收集整理的Hadoop之企业案例分析的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Hadoop之Yarn面试知识复习
- 下一篇: Spark之Spark概述