文/龐雙玉
商業銀行非常重要的一項業務就是零售業務,銀行零售業務成既能夠提供為銀行提供穩定的低成本的來源,又能對沖銀行其他業務的不穩定性,同時又滿足了客戶的理財需求,銀行零售業務迅速成為新的業務增長點。銀行代銷各大基金公司推出的產品,針對差異化的客戶和客戶需求,發售不同風險級別和不同收益區間段的產品。
銀行的產品研發部門能否針對當前經濟形勢和客戶存款狀況,結合基金公司發行的產品類型研發出適應市場和客戶需求的產品,是整個銀行零售業務核心競爭力的來源。針對銀行海量的交易數據,運用大數據框架,從交易數據中尋找規律和做出判斷,為銀行的產品引入決策提供支持,是一件有意義的事情。
本文討論在Hadoop大數據框架下,利用map/reduce機制,對交易數據進行分析,分析在銀行代銷的各大基金公司在某個歷史時間段的交易額,從交易金額數據中,判斷出客戶對基金公司的偏愛度。
銀行的數據庫系統中存儲有大量的客戶交易數據,從交易數據中,提取出下列的字段組合,(交易基金公司,基金公司產品,交易金額)以C(Company)代表交易基金公司,以P(Product)代表產品名稱,以A(Amount)代表交易金額,字段組合為(C,P,A)。
在字段(C,P,A)中,有價值的字段是C和A,因為基金公司產品名稱不是關心的對象,所以,在map階段,去掉字段組合(C,P,A)中的P字段,以(C,A)作為reuduce的輸入字段。map/reduce完成對字段的統計和排序,整個統計和排序字段值的變化過程如圖1所示。

圖1:map/reduce處理數據模型

圖2:map/reducec處理流程圖
在圖1中,Cn代表基金公司ID,第n個基金公司,Pnn代表第n個基金公司的第n個產品名稱,ann代表第n個基金公司第n個產品的銷售金額,把(cn, pnn, ann)作為map/reduce的輸入。
在map階段,去掉字段組合中的pnn,因為某個基金公司的某個特定產品名稱不是我們關心的內容,我們只關心,每個客戶對于某個特定基金公司的交易金額,去掉pnn字段后,字段組合只剩下(cn, ann)。
在shuff le階段,按照基金公司ID,進行分組排列字段(cn, ann),比如:

這樣,我們就得到了一個
在reduce階段完成對每個C下面的交易金額的累加,最后形成輸出結果,每個基金公司總的交易金額(Cn, An)。
整個數據模型的變換過程如下:

在Hadoop處理框架中,map/reduce作業處理流程如圖2所示。
(1)MapReduce首先將資源文件進行分解,分成多個Chunk,一個chunk大概64M,同時用fork將進程拷貝到集群內其它機器上。
(2)集群中的JobTracer在TaskTracer中制定map和Reduce。
(3)被分配了Map作業的worker,開始讀取第1步分解好的Trunk,Map作業數量是由M決定的,和split一一對應;Map作業從輸入數據中抽取出鍵值對,每一個鍵值對都作為參數傳遞給map函數,map函數產生的中間鍵值對被緩存在內存中。
(4)緩存的中間鍵值對會被定期寫入本地磁盤,而且被分為R個區,R的大小是由用戶定義的,將來每個區會對應一個Reduce作業;這些中間鍵值對的位置會被通報給master,master負責將信息轉發給Reduce worker。
(5)master通知分配了Reduce作業的worker它負責的分區在什么位置(肯定不止一個地方,每個Map作業產生的中間鍵值對都可能映射到所有R個不同分區),當Reduce worker把所有它負責的中間鍵值對都讀過來后,先對它們進行排序,使得相同鍵的鍵值對聚集在一起。因為不同的鍵可能會映射到同一個分區也就是同一個Reduce作業(誰讓分區少呢),所以排序是必須的。
(6)reduce worker遍歷排序后的中間鍵值對,對于每個唯一的鍵,都將鍵與關聯的值傳遞給reduce函數,reduce函數產生的輸出會添加到這個分區的輸出文件中。
(7)當所有的Map和Reduce作業都完成了,master喚醒正版的user program,MapReduce函數調用返回user program的代碼。
利用Hadoop平臺的map/reduce流程對銀行交易數據的分析,從數據規模上,可以對海量數據進行分析,從分析結果上,在足夠大的客戶交易數據樣本上得出的每個基金公司的交易金額更能客觀的反映出客戶對該基金公司的偏愛度,從而為銀行引入產品提供決策支持。