『壹』 某電商雙11數據分析與預測為什麼會用到hive,可不可以直接用Hadoop
首先明確Hive和Hadoop兩者的關系:
1、Hadoop是一種用於存儲、讀取以及處理海量數據的技術。你可以將他等價理解為個人PC的文件系統,只不過它能夠承載遠比一兩塊硬碟所能儲存的多得多的數據;
2、Hive是一種構建在Hadoop之上的工具,它通過書寫SQL語句的方式部分實現了Hadoop的功能,也就是說,所有Hive具備的能力,Hadoop都有,只不過Hive提供了一套描述工具,讓你用可讀性更強、更通用的方式描述你想解決的問題,然後由Hive將其轉換成Hadoop的底層邏輯,最終解決問題。
所以,你問的問題也就不言自明了,當然可以直接基於Hadoop,使用Java、Python等語言直接編寫MapRece的處理過程;但是,常規的數據分析如果使用Hive,可能只需要若干Select查詢語句即可完成,若編寫代碼完成,可能需要安裝配置本地IDE、完成相關代碼庫的依賴、MapRece完整邏輯的實現、任務的提交、計算結果的獲取等等一系列龐雜的細節。兩廂對比,我認為雖然理論上可以直接用Hadoop,但是在真實業務場景下,就是不能用的。
希望我說明白了~
『貳』 金融需要 hadoop,spark 等這些大數據分析工具嗎使用場景是怎樣的
看看用億信ABI做的相關案例
銀行大數據應用
國內不少銀行已經開始嘗試通過大數據來驅動業務運營,如中信銀行信用卡中心使用大數據技術實現了實時營銷,光大銀行建立了社交網路信息資料庫,招商銀行則利用大數據發展小微貸款。總的來看銀行大數據應用可以分為四大方面:
1、客戶畫像
客戶畫像應用主要分為個人客戶畫像和企業客戶畫像。個人客戶畫像包括人口統計學特徵、消費能力數據、興趣數據、風險偏好等;企業客戶畫像包括企業的生產、流通、運營、財務、銷售和客戶數據、相關產業鏈上下游等數據。值得注意的是,銀行擁有的客戶信息並不全面,基於銀行自身擁有的數據有時候難以得出理想的結果甚至可能得出錯誤的結論。比如,如果某位信用卡客戶月均刷卡8次,平均每次刷卡金額800元,平均每年打4次客服電話,從未有過投訴,按照傳統的數據分析,該客戶是一位滿意度較高流失風險較低的客戶。但如果看到該客戶的微博,得到的真實情況是:工資卡和信用卡不在同一家銀行,還款不方便,好幾次打客服電話沒接通,客戶多次在微博上抱怨,該客戶流失風險較高。所以銀行不僅僅要考慮銀行自身業務所採集到的數據,更應考慮整合外部更多的數據,以擴展對客戶的了解。包括:
(1)客戶在社交媒體上的行為數據(如光大銀行建立了社交網路信息資料庫)。通過打通銀行內部數據和外部社會化的數據可以獲得更為完整的客戶拼圖,從而進行更為精準的營銷和管理;
(2)客戶在電商網站的交易數據,如建設銀行則將自己的電子商務平台和信貸業務結合起來,阿里金融為阿里巴巴用戶提供無抵押貸款,用戶只需要憑借過去的信用即可;
(3)企業客戶的產業鏈上下游數據。如果銀行掌握了企業所在的產業鏈上下游的數據,可以更好掌握企業的外部環境發展情況,從而可以預測企業未來的狀況;
(4)其他有利於擴展銀行對客戶興趣愛好的數據,如網路廣告界目前正在興起的DMP數據平台的互聯網用戶行為數據。
2、精準營銷
在客戶畫像的基礎上銀行可以有效的開展精準營銷,包括:
(1)實時營銷。實時營銷是根據客戶的實時狀態來進行營銷,比如客戶當時的所在地、客戶最近一次消費等信息來有針對地進行營銷(某客戶採用信用卡采購孕婦用品,可以通過建模推測懷孕的概率並推薦孕婦類喜歡的業務);或者將改變生活狀態的事件(換工作、改變婚姻狀況、置居等)視為營銷機會;
(2)交叉營銷。即不同業務或產品的交叉推薦,如招商銀行可以根據客戶交易記錄分析,有效地識別小微企業客戶,然後用遠程銀行來實施交叉銷售;
(3)個性化推薦。銀行可以根據客戶的喜歡進行服務或者銀行產品的個性化推薦,如根據客戶的年齡、資產規模、理財偏好等,對客戶群進行精準定位,分析出其潛在金融服務需求,進而有針對性的營銷推廣;
(4)客戶生命周期管理。客戶生命周期管理包括新客戶獲取、客戶防流失和客戶贏回等。如招商銀行通過構建客戶流失預警模型,對流失率等級前20%的客戶發售高收益理財產品予以挽留,使得金卡和金葵花卡客戶流失率分別降低了15個和7個百分點。
3、風險管理與風險控制
在風險管理和控制方麵包括中小企業貸款風險評估和欺詐交易識別等手段
(1)中小企業貸款風險評估。銀行可通過企業的產、流通、銷售、財務等相關信息結合大數據挖掘方法進行貸款風險分析,量化企業的信用額度,更有效的開展中小企業貸款。
(2)實時欺詐交易識別和反洗錢分析。銀行可以利用持卡人基本信息、卡基本信息、交易歷史、客戶歷史行為模式、正在發生行為模式(如轉賬)等,結合智能規則引擎(如從一個不經常出現的國家為一個特有用戶轉賬或從一個不熟悉的位置進行在線交易)進行實時的交易反欺詐分析。如IBM金融犯罪管理解決方案幫助銀行利用大數據有效地預防與管理金融犯罪,摩根大通銀行則利用大數據技術追蹤盜取客戶賬號或侵入自動櫃員機(ATM)系統的罪犯。
4、運營優化
(1)市場和渠道分析優化。通過大數據,銀行可以監控不同市場推廣渠道尤其是網路渠道推廣的質量,從而進行合作渠道的調整和優化。同時,也可以分析哪些渠道更適合推廣哪類銀行產品或者服務,從而進行渠道推廣策略的優化。
(2)產品和服務優化:銀行可以將客戶行為轉化為信息流,並從中分析客戶的個性特徵和風險偏好,更深層次地理解客戶的習慣,智能化分析和預測客戶需求,從而進行產品創新和服務優化。如興業銀行目前對大數據進行初步分析,通過對還款數據挖掘比較區分優質客戶,根據客戶還款數額的差別,提供差異化的金融產品和服務方式。
(3)輿情分析:銀行可以通過爬蟲技術,抓取社區、論壇和微博上關於銀行以及銀行產品和服務的相關信息,並通過自然語言處理技術進行正負面判斷,尤其是及時掌握銀行以及銀行產品和服務的負面信息,及時發現和處理問題;對於正面信息,可以加以總結並繼續強化。同時,銀行也可以抓取同行業的銀行正負面信息,及時了解同行做的好的方面,以作為自身業務優化的借鑒。
『叄』 商務數據的作用是什麼
商務數據分析平台主要是通過對各類原始數據的集成和處理,實現不同的應用目標,最終達到提高電子商務運營效益的目的。平台構建過程中主要涉及到電子商務數據分析理論,以此為基礎,利用Hadoop技術和Map/Rece技術具體構建系統架構,並利用數據挖掘技術、聯機分析處理技術等實現應用目標。
電子商務數據中包含著大量的信息,傳統的數據處理方式只能夠從統計的角度獲取有限的知識,而商務智能則可以從海量數據中挖掘對提高商業效益具有重要價值的信息內容。電子商務數據處理分析的過程中需要關注六個重要因素:商業敏感性對電子商務數據分析的重要影響作用;電子商務數據分析的最終目標是提高投資回報率子商務數據分析指標的設置;對指標異常情況的分析和報警;對顧客行為數據的分析是重點;對客戶關系的研究和管理是電子商務數據處理分析的重點。
『肆』 hadoop怎麼解決即時交互需求
Hadoop通常被認定是能夠幫助你解決所有問題的唯一方案。 當人們提到「大數據」或是「數據分析」等相關問題的時候,會聽到脫口而出的回答:Hadoop!實際上Hadoop被設計和建造出來,是用來解決一系列特定問題的。對某些問題來說,Hadoop至多算是一個不好的選擇。對另一些問題來說,選擇Hadoop甚至會是一個錯誤。對於數據轉換的操作,或者更廣泛意義上的抽取-轉換-裝載的操作(譯者註:Extraction Transformation Load,ETL,數據倉庫中對數據從初始狀態到可用狀態處理過程的經典定義), 使用Hadoop系統能夠得到很多好處, 但是如果你的問題是下面5類之中的一個的話,Hadoop可能會是一不合適的解決方案。
1.對於大數據的渴望
很多人相信他們擁有正真「大」的數據, 但通常情況並非如此。 當考慮數據容量和理解大多數人對「大數據」處理的想法的時候, 我們應當參考這篇研究論文, 沒有人會因為買了一個集群的伺服器而被辭退,它告訴了我們一些有趣的事實。 Hadoop是被設計成用來處理在TB或PB級別的數據的, 而世界上大多數的計算任務處理的是100GB以下的輸入數據。(Microsoft和Yahoo在這個數據統計上的中位數是14GB,而90% Facebook的任務處理的是100GB以下的數據)。對於這樣的情況來說, 縱向擴展的解決方案就會在性能上勝過橫向擴展(scale-out)的解決方案。
(譯者註:縱向擴展scale-up通常是指在一台機器上增加或更換內存、CPU、硬碟或網路設備等硬體來實現系統整體性能的提升, 橫向擴展(scale-out)指的是通過在集群中增加機器來提升集群系統整體性能的提升。論文中比較了對Hadoop系統進行各種縱向擴展和橫向擴展之後, 在性能指標上進行評測的試驗。結論是在某些情況下在一台機器上的縱向擴展會比在Hadoop集群中增加機器得到更高的系統性能,而且性價比會更好。這個結論打破了大多數人對Hadoop系統的簡單認識, 那就是一定要用若干廉價的機器組成集群才能到達最好的整體性能。 )
所以你需要問自己:
我是否有超過幾個TB的數據?
我是否有穩定、海量的輸入數據?
我有多少數據要操作和處理?
2.你在隊列中
當你在Hadoop系統中提交計算任務的時候, 最小的延遲時間是1分鍾 。 這意味系統對於客戶的商品購買信息要花1分鍾的時間才能響應並提供相關商品推薦。這要求系統有非常忠實和耐心的客戶, 盯著電腦屏幕超過60秒鍾等待結果的出現。 一種好的方案是將庫存中的每一件商品都做一個預先的相關商品的計算, 放在Hadoop上。 然後提供一個網站,或者是移動應用來訪問預先存儲的結果,達到1秒或以下的即時響應。 Hadoop是一個非常好的做預先計算的大數據引擎。 當然,隨著需要返回的數據越來越復雜,完全的預先計算會變得越來越沒有效率。
所以你需要問自己:
用戶期望的系統響應時間大概在什麼范圍?
哪些計算任務是可以通過批處理的方式來運行的?
(譯者註:原作者應該是用了B2C電子商務網站上經典的商品推薦功能作為用例,描述如何用Hadoop實現這個功能。)
『伍』 在 hadoop 開發過程中使用過哪些演算法
基本MapRece模式
計數與求和
問題陳述:
有許多文檔,每個文檔都有一些欄位組成。需要計算出每個欄位在所有文檔中的出現次數或者這些欄位的其他什麼統計值。例如,給定一個log文件,其中的每條記錄都包含一個響應時間,需要計算出平均響應時間。
解決方案:
讓我們先從簡單的例子入手。在下面的代碼片段里,Mapper每遇到指定詞就把頻次記1,Recer一個個遍歷這些詞的集合然後把他們的頻次加和。
1 class Mapper
2 method Map(docid id, doc d)
3 for all term t in doc d do
4 Emit(term t, count 1)
5
6 class Recer
7 method Rece(term t, counts [c1, c2,...])
8 sum = 0
9 for all count c in [c1, c2,...] do
10 sum = sum + c
11 Emit(term t, count sum)
這種方法的缺點顯而易見,Mapper提交了太多無意義的計數。它完全可以通過先對每個文檔中的詞進行計數從而減少傳遞給Recer的數據量:
1 class Mapper
2 method Map(docid id, doc d)
3 H = new AssociativeArray
4 for all term t in doc d do
5 H{t} = H{t} + 1
6 for all term t in H do
7 Emit(term t, count H{t})
如果要累計計數的的不只是單個文檔中的內容,還包括了一個Mapper節點處理的所有文檔,那就要用到Combiner了:
1 class Mapper
2 method Map(docid id, doc d)
3 for all term t in doc d do
4 Emit(term t, count 1)
5
6 class Combiner
7 method Combine(term t, [c1, c2,...])
8 sum = 0
9 for all count c in [c1, c2,...] do
10 sum = sum + c
11 Emit(term t, count sum)
12
13 class Recer
14 method Rece(term t, counts [c1, c2,...])
15 sum = 0
16 for all count c in [c1, c2,...] do
17 sum = sum + c
18 Emit(term t, count sum)
應用:Log 分析, 數據查詢
整理歸類
問題陳述:
有一系列條目,每個條目都有幾個屬性,要把具有同一屬性值的條目都保存在一個文件里,或者把條目按照屬性值分組。 最典型的應用是倒排索引。
解決方案:
解決方案很簡單。 在 Mapper 中以每個條目的所需屬性值作為 key,其本身作為值傳遞給 Recer。 Recer 取得按照屬性值分組的條目,然後可以處理或者保存。如果是在構建倒排索引,那麼 每個條目相當於一個詞而屬性值就是詞所在的文檔ID。
應用:倒排索引, ETL
過濾 (文本查找),解析和校驗
問題陳述:
假設有很多條記錄,需要從其中找出滿足某個條件的所有記錄,或者將每條記錄傳換成另外一種形式(轉換操作相對於各條記錄獨立,即對一條記錄的操作與其他記錄無關)。像文本解析、特定值抽取、格式轉換等都屬於後一種用例。
解決方案:
非常簡單,在Mapper 里逐條進行操作,輸出需要的值或轉換後的形式。
應用:日誌分析,數據查詢,ETL,數據校驗
分布式任務執行
問題陳述:
大型計算可以分解為多個部分分別進行然後合並各個計算的結果以獲得最終結果。
解決方案: 將數據切分成多份作為每個 Mapper 的輸入,每個Mapper處理一份數據,執行同樣的運算,產生結果,Recer把多個Mapper的結果組合成一個。
案例研究: 數字通信系統模擬
像 WiMAX 這樣的數字通信模擬軟體通過系統模型來傳輸大量的隨機數據,然後計算傳輸中的錯誤幾率。 每個 Mapper 處理樣本 1/N 的數據,計算出這部分數據的錯誤率,然後在 Recer 里計算平均錯誤率。
應用:工程模擬,數字分析,性能測試
排序
問題陳述:
有許多條記錄,需要按照某種規則將所有記錄排序或是按照順序來處理記錄。
解決方案: 簡單排序很好辦 – Mappers 將待排序的屬性值為鍵,整條記錄為值輸出。 不過實際應用中的排序要更加巧妙一點, 這就是它之所以被稱為MapRece 核心的原因(「核心」是說排序?因為證明Hadoop計算能力的實驗是大數據排序?還是說Hadoop的處理過程中對key排序的環節?)。在實踐中,常用組合鍵來實現二次排序和分組。
MapRece 最初只能夠對鍵排序, 但是也有技術利用可以利用Hadoop 的特性來實現按值排序。想了解的話可以看這篇博客。
按照BigTable的概念,使用 MapRece來對最初數據而非中間數據排序,也即保持數據的有序狀態更有好處,必須注意這一點。換句話說,在數據插入時排序一次要比在每次查詢數據的時候排序更高效。
應用:ETL,數據分析
非基本 MapRece 模式
迭代消息傳遞 (圖處理)
問題陳述:
假設一個實體網路,實體之間存在著關系。 需要按照與它比鄰的其他實體的屬性計算出一個狀態。這個狀態可以表現為它和其它節點之間的距離, 存在特定屬性的鄰接點的跡象, 鄰域密度特徵等等。
解決方案:
網路存儲為系列節點的結合,每個節點包含有其所有鄰接點ID的列表。按照這個概念,MapRece 迭代進行,每次迭代中每個節點都發消息給它的鄰接點。鄰接點根據接收到的信息更新自己的狀態。當滿足了某些條件的時候迭代停止,如達到了最大迭代次數(網路半徑)或兩次連續的迭代幾乎沒有狀態改變。從技術上來看,Mapper 以每個鄰接點的ID為鍵發出信息,所有的信息都會按照接受節點分組,recer 就能夠重算各節點的狀態然後更新那些狀態改變了的節點。下面展示了這個演算法:
1 class Mapper
2 method Map(id n, object N)
3 Emit(id n, object N)
4 for all id m in N.OutgoingRelations do
5 Emit(id m, message getMessage(N))
6
7 class Recer
8 method Rece(id m, [s1, s2,...])
9 M = null
10 messages = []
11 for all s in [s1, s2,...] do
12 if IsObject(s) then
13 M = s
14 else // s is a message
15 messages.add(s)
16 M.State = calculateState(messages)
17 Emit(id m, item M)
一個節點的狀態可以迅速的沿著網路傳全網,那些被感染了的節點又去感染它們的鄰居,整個過程就像下面的圖示一樣:
案例研究: 沿分類樹的有效性傳遞
問題陳述:
這個問題來自於真實的電子商務應用。將各種貨物分類,這些類別可以組成一個樹形結構,比較大的分類(像男人、女人、兒童)可以再分出小分類(像男褲或女裝),直到不能再分為止(像男式藍色牛仔褲)。這些不能再分的基層類別可以是有效(這個類別包含有貨品)或者已無效的(沒有屬於這個分類的貨品)。如果一個分類至少含有一個有效的子分類那麼認為這個分類也是有效的。我們需要在已知一些基層分類有效的情況下找出分類樹上所有有效的分類。
解決方案:
這個問題可以用上一節提到的框架來解決。我們咋下面定義了名為 getMessage和 calculateState 的方法:
1 class N
2 State in {True = 2, False = 1, null = 0},
3 initialized 1 or 2 for end-of-line categories, 0 otherwise
4 method getMessage(object N)
5 return N.State
6 method calculateState(state s, data [d1, d2,...])
7 return max( [d1, d2,...] )
案例研究:廣度優先搜索
問題陳述:需要計算出一個圖結構中某一個節點到其它所有節點的距離。
解決方案: Source源節點給所有鄰接點發出值為0的信號,鄰接點把收到的信號再轉發給自己的鄰接點,每轉發一次就對信號值加1:
1 class N
2 State is distance,
3 initialized 0 for source node, INFINITY for all other nodes
4 method getMessage(N)
5 return N.State + 1
6 method calculateState(state s, data [d1, d2,...])
7 min( [d1, d2,...] )
案例研究:網頁排名和 Mapper 端數據聚合
這個演算法由Google提出,使用權威的PageRank演算法,通過連接到一個網頁的其他網頁來計算網頁的相關性。真實演算法是相當復雜的,但是核心思想是權重可以傳播,也即通過一個節點的各聯接節點的權重的均值來計算節點自身的權重。
1 class N
2 State is PageRank
3 method getMessage(object N)
4 return N.State / N.OutgoingRelations.size()
5 method calculateState(state s, data [d1, d2,...])
6 return ( sum([d1, d2,...]) )
要指出的是上面用一個數值來作為評分實際上是一種簡化,在實際情況下,我們需要在Mapper端來進行聚合計算得出這個值。下面的代碼片段展示了這個改變後的邏輯 (針對於 PageRank 演算法):
1 class Mapper
2 method Initialize
3 H = new AssociativeArray
4 method Map(id n, object N)
5 p = N.PageRank / N.OutgoingRelations.size()
6 Emit(id n, object N)
7 for all id m in N.OutgoingRelations do
8 H{m} = H{m} + p
9 method Close
10 for all id n in H do
11 Emit(id n, value H{n})
12
13 class Recer
14 method Rece(id m, [s1, s2,...])
15 M = null
16 p = 0
17 for all s in [s1, s2,...] do
18 if IsObject(s) then
19 M = s
20 else
21 p = p + s
22 M.PageRank = p
23 Emit(id m, item M)
應用:圖分析,網頁索引
值去重 (對唯一項計數)
問題陳述: 記錄包含值域F和值域 G,要分別統計相同G值的記錄中不同的F值的數目 (相當於按照 G分組).
這個問題可以推而廣之應用於分面搜索(某些電子商務網站稱之為Narrow Search)
Record 1: F=1, G={a, b}
Record 2: F=2, G={a, d, e}
Record 3: F=1, G={b}
Record 4: F=3, G={a, b}
Result:
a -> 3 // F=1, F=2, F=3
b -> 2 // F=1, F=3
d -> 1 // F=2
e -> 1 // F=2
解決方案 I:
第一種方法是分兩個階段來解決這個問題。第一階段在Mapper中使用F和G組成一個復合值對,然後在Recer中輸出每個值對,目的是為了保證F值的唯一性。在第二階段,再將值對按照G值來分組計算每組中的條目數。
第一階段:
1 class Mapper
2 method Map(null, record [value f, categories [g1, g2,...]])
3 for all category g in [g1, g2,...]
4 Emit(record [g, f], count 1)
5
6 class Recer
7 method Rece(record [g, f], counts [n1, n2, ...])
8 Emit(record [g, f], null )
第二階段:
1 class Mapper
2 method Map(record [f, g], null)
3 Emit(value g, count 1)
4
5 class Recer
6 method Rece(value g, counts [n1, n2,...])
7 Emit(value g, sum( [n1, n2,...] ) )
解決方案 II:
第二種方法只需要一次MapRece 即可實現,但擴展性不強。演算法很簡單-Mapper 輸出值和分類,在Recer里為每個值對應的分類去重然後給每個所屬的分類計數加1,最後再在Recer結束後將所有計數加和。這種方法適用於只有有限個分類,而且擁有相同F值的記錄不是很多的情況。例如網路日誌處理和用戶分類,用戶的總數很多,但是每個用戶的事件是有限的,以此分類得到的類別也是有限的。值得一提的是在這種模式下可以在數據傳輸到Recer之前使用Combiner來去除分類的重復值。
1 class Mapper
2 method Map(null, record [value f, categories [g1, g2,...] )
3 for all category g in [g1, g2,...]
4 Emit(value f, category g)
5
6 class Recer
7 method Initialize
8 H = new AssociativeArray : category -> count
9 method Rece(value f, categories [g1, g2,...])
10 [g1', g2',..] = ExcludeDuplicates( [g1, g2,..] )
11 for all category g in [g1', g2',...]
12 H{g} = H{g} + 1
13 method Close
14 for all category g in H do
15 Emit(category g, count H{g})
應用:日誌分析,用戶計數
互相關
問題陳述:有多個各由若干項構成的組,計算項兩兩共同出現於一個組中的次數。假如項數是N,那麼應該計算N*N。
這種情況常見於文本分析(條目是單詞而元組是句子),市場分析(購買了此物的客戶還可能購買什麼)。如果N*N小到可以容納於一台機器的內存,實現起來就比較簡單了。
配對法
第一種方法是在Mapper中給所有條目配對,然後在Recer中將同一條目對的計數加和。但這種做法也有缺點:
使用 combiners 帶來的的好處有限,因為很可能所有項對都是唯一的
不能有效利用內存
1 class Mapper
2 method Map(null, items [i1, i2,...] )
3 for all item i in [i1, i2,...]
4 for all item j in [i1, i2,...]
5 Emit(pair [i j], count 1)
6
7 class Recer
8 method Rece(pair [i j], counts [c1, c2,...])
9 s = sum([c1, c2,...])
10 Emit(pair[i j], count s)
Stripes Approach(條方法?不知道這個名字怎麼理解)
第二種方法是將數據按照pair中的第一項來分組,並維護一個關聯數組,數組中存儲的是所有關聯項的計數。The second approach is to group data by the first item in pair and maintain an associative array (「stripe」) where counters for all adjacent items are accumulated. Recer receives all stripes for leading item i, merges them, and emits the same result as in the Pairs approach.
中間結果的鍵數量相對較少,因此減少了排序消耗。
可以有效利用 combiners。
可在內存中執行,不過如果沒有正確執行的話也會帶來問題。
實現起來比較復雜。
一般來說, 「stripes」 比 「pairs」 更快
1 class Mapper
2 method Map(null, items [i1, i2,...] )
3 for all item i in [i1, i2,...]
4 H = new AssociativeArray : item -> counter
5 for all item j in [i1, i2,...]
6 H{j} = H{j} + 1
7 Emit(item i, stripe H)
8
9 class Recer
10 method Rece(item i, stripes [H1, H2,...])
11 H = new AssociativeArray : item -> counter
12 H = merge-sum( [H1, H2,...] )
13 for all item j in H.keys()
14 Emit(pair [i j], H{j})
應用:文本分析,市場分析
參考資料:Lin J. Dyer C. Hirst G. Data Intensive Processing MapRece
用MapRece 表達關系模式
在這部分我們會討論一下怎麼使用MapRece來進行主要的關系操作。
篩選(Selection)
1 class Mapper
2 method Map(rowkey key, tuple t)
3 if t satisfies the predicate
4 Emit(tuple t, null)
投影(Projection)
投影只比篩選稍微復雜一點,在這種情況下我們可以用Recer來消除可能的重復值。
1 class Mapper
2 method Map(rowkey key, tuple t)
3 tuple g = project(t) // extract required fields to tuple g
4 Emit(tuple g, null)
5
6 class Recer
『陸』 Hadoop和sas是什麼關系
都是處理數據的軟體,沒什麼具體的關系,sas一般運用於大型項目。hadoop相對而言成本體,應用更廣泛點。
Hadoop原來是Apache Lucene下的一個子項目,它最初是從Nutch項目中分離出來的專門負責分布式存儲以及分布式運算的項目。簡單地說來,Hadoop是一個可以更容易開發和運行處理大規模數據的軟體平台。下面列舉hadoop主要的一些特點: 擴容能力(Scalable) 成本低(Economical)高效率(Efficient)可靠性(Reliable)
SAS(Statistics Analysis System) 作為出色的處理大規模復雜數據的軟體,目前已廣泛應用於統計分析,數據處理,數據合庫和商業智能領域
『柒』 在中國有誰在用Hadoop
國內,有網路(集群的規模已經是千台了吧)、淘寶(有自己的文件處理系統TFS),中國移動、搜狗、華為(是社區排名靠前的貢獻者)等企業; hadoop的應用場景,給你美國著名科技博客GigaOM的專欄作家Derrick Harris的文章吧,他一直跟蹤雲計算和Hadoop技術,在最近的一篇文章中總結了10個Hadoop的應用場景:(1)在線旅遊:你知道嗎,目前全球范圍內80%的在線旅遊網站都是在使用Cloudera公司提供的Hadoop發行版,其中SearchBI網站曾經報道過的Expedia也在其中。 (2)移動數據:Cloudera運營總監稱,美國有70%的智能手機數據服務背後都是由Hadoop來支撐的,也就是說,包括數據的存儲以及無線運營商的數據處理等,都是在利用Hadoop技術。(3)電子商務:這一場景應該是非常確定的,eBay就是最大的實踐者之一。國內的電商在Hadoop技術上也是儲備頗為雄厚的。(4)能源開采:美國Chevron公司是全美第二大石油公司,他們的IT部門主管介紹了Chevron使用Hadoop的經驗,他們利用Hadoop進行數據的收集和處理,其中這些數據是海洋的地震數據,以便於他們找到油礦的位置。(5)節能:另外一家能源服務商Opower也在使用Hadoop,為消費者提供節約電費的服務,其中對用戶電費單進行了預測分析。(6)基礎架構管理:這是一個非常基礎的應用場景,用戶可以用Hadoop從伺服器、交換機以及其他的設備中收集並分析數據。(7)圖像處理:創業公司Skybox Imaging 使用Hadoop來存儲並處理圖片數據,從衛星中拍攝的高清圖像中探測地理變化。(8) 詐騙檢測:這個場景用戶接觸的比較少,一般金融服務或者政府機構會用到。利用Hadoop來存儲所有的客戶交易數據,包括一些非結構化的數據,能夠幫助機構發現客戶的異常活動,預防欺詐行為。(9) IT安全:除企業IT基礎機構的管理之外,Hadoop還可以用來處理機器生成數據以便甄別來自惡意軟體或者網路中的攻擊。(10)醫療保健:醫療行業也會用到Hadoop,像IBM的Watson就會使用Hadoop集群作為其服務的基礎,包括語義分析等高級分析技術等。醫療機構可以利用語義分析為患者提供醫護人員,並協助醫生更好地為患者進行診斷。
『捌』 hadoop的maprece常見演算法案例有幾種
基本MapRece模式
計數與求和
問題陳述:
有許多文檔,每個文檔都有一些欄位組成。需要計算出每個欄位在所有文檔中的出現次數或者這些欄位的其他什麼統計值。例如,給定一個log文件,其中的每條記錄都包含一個響應時間,需要計算出平均響應時間。
解決方案:
讓我們先從簡單的例子入手。在下面的代碼片段里,Mapper每遇到指定詞就把頻次記1,Recer一個個遍歷這些詞的集合然後把他們的頻次加和。
1 class Mapper
2 method Map(docid id, doc d)
3 for all term t in doc d do
4 Emit(term t, count 1)
5
6 class Recer
7 method Rece(term t, counts [c1, c2,...])
8 sum = 0
9 for all count c in [c1, c2,...] do
10 sum = sum + c
11 Emit(term t, count sum)
這種方法的缺點顯而易見,Mapper提交了太多無意義的計數。它完全可以通過先對每個文檔中的詞進行計數從而減少傳遞給Recer的數據量:
1 class Mapper
2 method Map(docid id, doc d)
3 H = new AssociativeArray
4 for all term t in doc d do
5 H{t} = H{t} + 1
6 for all term t in H do
7 Emit(term t, count H{t})
如果要累計計數的的不只是單個文檔中的內容,還包括了一個Mapper節點處理的所有文檔,那就要用到Combiner了:
1 class Mapper
2 method Map(docid id, doc d)
3 for all term t in doc d do
4 Emit(term t, count 1)
5
6 class Combiner
7 method Combine(term t, [c1, c2,...])
8 sum = 0
9 for all count c in [c1, c2,...] do
10 sum = sum + c
11 Emit(term t, count sum)
12
13 class Recer
14 method Rece(term t, counts [c1, c2,...])
15 sum = 0
16 for all count c in [c1, c2,...] do
17 sum = sum + c
18 Emit(term t, count sum)
應用:Log 分析, 數據查詢
整理歸類
問題陳述:
有一系列條目,每個條目都有幾個屬性,要把具有同一屬性值的條目都保存在一個文件里,或者把條目按照屬性值分組。 最典型的應用是倒排索引。
解決方案:
解決方案很簡單。 在 Mapper 中以每個條目的所需屬性值作為 key,其本身作為值傳遞給 Recer。 Recer 取得按照屬性值分組的條目,然後可以處理或者保存。如果是在構建倒排索引,那麼 每個條目相當於一個詞而屬性值就是詞所在的文檔ID。
應用:倒排索引, ETL
過濾 (文本查找),解析和校驗
問題陳述:
假設有很多條記錄,需要從其中找出滿足某個條件的所有記錄,或者將每條記錄傳換成另外一種形式(轉換操作相對於各條記錄獨立,即對一條記錄的操作與其他記錄無關)。像文本解析、特定值抽取、格式轉換等都屬於後一種用例。
解決方案:
非常簡單,在Mapper 里逐條進行操作,輸出需要的值或轉換後的形式。
應用:日誌分析,數據查詢,ETL,數據校驗
分布式任務執行
問題陳述:
大型計算可以分解為多個部分分別進行然後合並各個計算的結果以獲得最終結果。
解決方案: 將數據切分成多份作為每個 Mapper 的輸入,每個Mapper處理一份數據,執行同樣的運算,產生結果,Recer把多個Mapper的結果組合成一個。
案例研究: 數字通信系統模擬
像 WiMAX 這樣的數字通信模擬軟體通過系統模型來傳輸大量的隨機數據,然後計算傳輸中的錯誤幾率。 每個 Mapper 處理樣本 1/N 的數據,計算出這部分數據的錯誤率,然後在 Recer 里計算平均錯誤率。
應用:工程模擬,數字分析,性能測試
排序
問題陳述:
有許多條記錄,需要按照某種規則將所有記錄排序或是按照順序來處理記錄。
解決方案: 簡單排序很好辦 – Mappers 將待排序的屬性值為鍵,整條記錄為值輸出。 不過實際應用中的排序要更加巧妙一點, 這就是它之所以被稱為MapRece 核心的原因(「核心」是說排序?因為證明Hadoop計算能力的實驗是大數據排序?還是說Hadoop的處理過程中對key排序的環節?)。在實踐中,常用組合鍵來實現二次排序和分組。
MapRece 最初只能夠對鍵排序, 但是也有技術利用可以利用Hadoop 的特性來實現按值排序。想了解的話可以看這篇博客。
按照BigTable的概念,使用 MapRece來對最初數據而非中間數據排序,也即保持數據的有序狀態更有好處,必須注意這一點。換句話說,在數據插入時排序一次要比在每次查詢數據的時候排序更高效。
應用:ETL,數據分析
非基本 MapRece 模式
迭代消息傳遞 (圖處理)
問題陳述:
假設一個實體網路,實體之間存在著關系。 需要按照與它比鄰的其他實體的屬性計算出一個狀態。這個狀態可以表現為它和其它節點之間的距離, 存在特定屬性的鄰接點的跡象, 鄰域密度特徵等等。
解決方案:
網路存儲為系列節點的結合,每個節點包含有其所有鄰接點ID的列表。按照這個概念,MapRece 迭代進行,每次迭代中每個節點都發消息給它的鄰接點。鄰接點根據接收到的信息更新自己的狀態。當滿足了某些條件的時候迭代停止,如達到了最大迭代次數(網路半徑)或兩次連續的迭代幾乎沒有狀態改變。從技術上來看,Mapper 以每個鄰接點的ID為鍵發出信息,所有的信息都會按照接受節點分組,recer 就能夠重算各節點的狀態然後更新那些狀態改變了的節點。下面展示了這個演算法:
1 class Mapper
2 method Map(id n, object N)
3 Emit(id n, object N)
4 for all id m in N.OutgoingRelations do
5 Emit(id m, message getMessage(N))
6
7 class Recer
8 method Rece(id m, [s1, s2,...])
9 M = null
10 messages = []
11 for all s in [s1, s2,...] do
12 if IsObject(s) then
13 M = s
14 else // s is a message
15 messages.add(s)
16 M.State = calculateState(messages)
17 Emit(id m, item M)
一個節點的狀態可以迅速的沿著網路傳全網,那些被感染了的節點又去感染它們的鄰居,整個過程就像下面的圖示一樣:
案例研究: 沿分類樹的有效性傳遞
問題陳述:
這個問題來自於真實的電子商務應用。將各種貨物分類,這些類別可以組成一個樹形結構,比較大的分類(像男人、女人、兒童)可以再分出小分類(像男褲或女裝),直到不能再分為止(像男式藍色牛仔褲)。這些不能再分的基層類別可以是有效(這個類別包含有貨品)或者已無效的(沒有屬於這個分類的貨品)。如果一個分類至少含有一個有效的子分類那麼認為這個分類也是有效的。我們需要在已知一些基層分類有效的情況下找出分類樹上所有有效的分類。
解決方案:
這個問題可以用上一節提到的框架來解決。我們咋下面定義了名為 getMessage和 calculateState 的方法:
1 class N
2 State in {True = 2, False = 1, null = 0},
3 initialized 1 or 2 for end-of-line categories, 0 otherwise
4 method getMessage(object N)
5 return N.State
6 method calculateState(state s, data [d1, d2,...])
7 return max( [d1, d2,...] )
案例研究:廣度優先搜索
問題陳述:需要計算出一個圖結構中某一個節點到其它所有節點的距離。
解決方案: Source源節點給所有鄰接點發出值為0的信號,鄰接點把收到的信號再轉發給自己的鄰接點,每轉發一次就對信號值加1:
1 class N
2 State is distance,
3 initialized 0 for source node, INFINITY for all other nodes
4 method getMessage(N)
5 return N.State + 1
6 method calculateState(state s, data [d1, d2,...])
7 min( [d1, d2,...] )
案例研究:網頁排名和 Mapper 端數據聚合
這個演算法由Google提出,使用權威的PageRank演算法,通過連接到一個網頁的其他網頁來計算網頁的相關性。真實演算法是相當復雜的,但是核心思想是權重可以傳播,也即通過一個節點的各聯接節點的權重的均值來計算節點自身的權重。
1 class N
2 State is PageRank
3 method getMessage(object N)
4 return N.State / N.OutgoingRelations.size()
5 method calculateState(state s, data [d1, d2,...])
6 return ( sum([d1, d2,...]) )
要指出的是上面用一個數值來作為評分實際上是一種簡化,在實際情況下,我們需要在Mapper端來進行聚合計算得出這個值。下面的代碼片段展示了這個改變後的邏輯 (針對於 PageRank 演算法):
1 class Mapper
2 method Initialize
3 H = new AssociativeArray
4 method Map(id n, object N)
5 p = N.PageRank / N.OutgoingRelations.size()
6 Emit(id n, object N)
7 for all id m in N.OutgoingRelations do
8 H{m} = H{m} + p
9 method Close
10 for all id n in H do
11 Emit(id n, value H{n})
12
13 class Recer
14 method Rece(id m, [s1, s2,...])
15 M = null
16 p = 0
17 for all s in [s1, s2,...] do
18 if IsObject(s) then
19 M = s
20 else
21 p = p + s
22 M.PageRank = p
23 Emit(id m, item M)
應用:圖分析,網頁索引
值去重 (對唯一項計數)
問題陳述: 記錄包含值域F和值域 G,要分別統計相同G值的記錄中不同的F值的數目 (相當於按照 G分組).
這個問題可以推而廣之應用於分面搜索(某些電子商務網站稱之為Narrow Search)
Record 1: F=1, G={a, b}
Record 2: F=2, G={a, d, e}
Record 3: F=1, G={b}
Record 4: F=3, G={a, b}
Result:
a -> 3 // F=1, F=2, F=3
b -> 2 // F=1, F=3
d -> 1 // F=2
e -> 1 // F=2
解決方案 I:
第一種方法是分兩個階段來解決這個問題。第一階段在Mapper中使用F和G組成一個復合值對,然後在Recer中輸出每個值對,目的是為了保證F值的唯一性。在第二階段,再將值對按照G值來分組計算每組中的條目數。
第一階段:
1 class Mapper
2 method Map(null, record [value f, categories [g1, g2,...]])
3 for all category g in [g1, g2,...]
4 Emit(record [g, f], count 1)
5
6 class Recer
7 method Rece(record [g, f], counts [n1, n2, ...])
8 Emit(record [g, f], null )
第二階段:
1 class Mapper
2 method Map(record [f, g], null)
3 Emit(value g, count 1)
4
5 class Recer
6 method Rece(value g, counts [n1, n2,...])
7 Emit(value g, sum( [n1, n2,...] ) )
解決方案 II:
第二種方法只需要一次MapRece 即可實現,但擴展性不強。演算法很簡單-Mapper 輸出值和分類,在Recer里為每個值對應的分類去重然後給每個所屬的分類計數加1,最後再在Recer結束後將所有計數加和。這種方法適用於只有有限個分類,而且擁有相同F值的記錄不是很多的情況。例如網路日誌處理和用戶分類,用戶的總數很多,但是每個用戶的事件是有限的,以此分類得到的類別也是有限的。值得一提的是在這種模式下可以在數據傳輸到Recer之前使用Combiner來去除分類的重復值。
1 class Mapper
2 method Map(null, record [value f, categories [g1, g2,...] )
3 for all category g in [g1, g2,...]
4 Emit(value f, category g)
5
6 class Recer
7 method Initialize
8 H = new AssociativeArray : category -> count
9 method Rece(value f, categories [g1, g2,...])
10 [g1', g2',..] = ExcludeDuplicates( [g1, g2,..] )
11 for all category g in [g1', g2',...]
12 H{g} = H{g} + 1
13 method Close
14 for all category g in H do
15 Emit(category g, count H{g})
應用:日誌分析,用戶計數
互相關
問題陳述:有多個各由若干項構成的組,計算項兩兩共同出現於一個組中的次數。假如項數是N,那麼應該計算N*N。
這種情況常見於文本分析(條目是單詞而元組是句子),市場分析(購買了此物的客戶還可能購買什麼)。如果N*N小到可以容納於一台機器的內存,實現起來就比較簡單了。
配對法
第一種方法是在Mapper中給所有條目配對,然後在Recer中將同一條目對的計數加和。但這種做法也有缺點:
使用 combiners 帶來的的好處有限,因為很可能所有項對都是唯一的
不能有效利用內存
1 class Mapper
2 method Map(null, items [i1, i2,...] )
3 for all item i in [i1, i2,...]
4 for all item j in [i1, i2,...]
5 Emit(pair [i j], count 1)
6
7 class Recer
8 method Rece(pair [i j], counts [c1, c2,...])
9 s = sum([c1, c2,...])
10 Emit(pair[i j], count s)
Stripes Approach(條方法?不知道這個名字怎麼理解)
第二種方法是將數據按照pair中的第一項來分組,並維護一個關聯數組,數組中存儲的是所有關聯項的計數。The second approach is to group data by the first item in pair and maintain an associative array (「stripe」) where counters for all adjacent items are accumulated. Recer receives all stripes for leading item i, merges them, and emits the same result as in the Pairs approach.
中間結果的鍵數量相對較少,因此減少了排序消耗。
可以有效利用 combiners。
可在內存中執行,不過如果沒有正確執行的話也會帶來問題。
實現起來比較復雜。
一般來說, 「stripes」 比 「pairs」 更快
1 class Mapper
2 method Map(null, items [i1, i2,...] )
3 for all item i in [i1, i2,...]
4 H = new AssociativeArray : item -> counter
5 for all item j in [i1, i2,...]
6 H{j} = H{j} + 1
7 Emit(item i, stripe H)
8
9 class Recer
10 method Rece(item i, stripes [H1, H2,...])
11 H = new AssociativeArray : item -> counter
12 H = merge-sum( [H1, H2,...] )
13 for all item j in H.keys()
14 Emit(pair [i j], H{j})
應用:文本分析,市場分析
參考資料:Lin J. Dyer C. Hirst G. Data Intensive Processing MapRece
用MapRece 表達關系模式
在這部分我們會討論一下怎麼使用MapRece來進行主要的關系操作。
篩選(Selection)
1 class Mapper
2 method Map(rowkey key, tuple t)
3 if t satisfies the predicate
4 Emit(tuple t, null)
投影(Projection)
投影只比篩選稍微復雜一點,在這種情況下我們可以用Recer來消除可能的重復值。
1 class Mapper
2 method Map(rowkey key, tuple t)
3 tuple g = project(t) // extract required fields to tuple g
4 Emit(tuple g, null)
5
6 class Recer
『玖』 如何採集電子商務網站的用戶行為的信息
很多方式 比如用cookiees\檢索記錄\統計代碼\
最簡單的就是用統計代碼了 比如cnzz 量子恆道的
只要在網頁插入js代碼 就可以記錄下用戶訪問的url 逗留時間 從而分析出用戶的關注點
『拾』 什麼是大數據時代
世界包含的多得難以想像的數字化信息變得更多更快……從商業到科學,從政府到藝術,這種影響無處不在。科學家和計算機工程師們給這種現象創造了一個新名詞:「大數據」。大數據時代什麼意思?大數據概念什麼意思?大數據分析什麼意思?所謂大數據,那到底什麼是大數據,他的來源在哪裡,定義究竟是什麼呢?
七:最後北京開運聯合給您總結一下
不管大數據的核心價值是不是預測,但是基於大數據形成決策的模式已經為不少的企業帶來了盈利和聲譽。
1、從大數據的價值鏈條來分析,存在三種模式:
1)手握大數據,但是沒有利用好;比較典型的是金融機構,電信行業,政府機構等。
2)沒有數據,但是知道如何幫助有數據的人利用它;比較典型的是IT咨詢和服務企業,比如,埃森哲,IBM,Oracle等。
3)既有數據,又有大數據思維;比較典型的是Google,Amazon,Mastercard等。
2、未來在大數據領域最具有價值的是兩種事物:
1)擁有大數據思維的人,這種人可以將大數據的潛在價值轉化為實際利益;
2)還未有被大數據觸及過的業務領域。這些是還未被挖掘的油井,金礦,是所謂的藍海。
大數據是信息技術與專業技術、信息技術產業與各行業領域緊密融合的典型領域,有著旺盛的應用需求、廣闊的應用前景。為把握這一新興領域帶來的新機遇,需要不斷跟蹤研究大數據,不斷提升對大數據的認知和理解,堅持技術創新與應用創新的協同共進,加快經濟社會各領域的大數據開發與利用,推動國家、行業、企業對於數據的應用需求和應用水平進入新的階段。