金融风控实战——Hive详解(数据读取、预处理、特征工程)
大數(shù)據(jù)技術(shù)介紹
大數(shù)據(jù)技術(shù)的介紹:
??1、存儲(chǔ),我們需要了解在大數(shù)據(jù)的架構(gòu)下,數(shù)據(jù)大致是怎么進(jìn)行存儲(chǔ)的,傳統(tǒng)的文件系統(tǒng)是單機(jī)的,不能橫跨不同的機(jī)器。HDFS(Hadoop Distributed FileSystem)的設(shè)計(jì)本質(zhì)上是為了大量的數(shù)據(jù)能橫跨成百上千臺(tái)機(jī)器,但是用戶在實(shí)際的應(yīng)用中,看到的是一個(gè)文件系統(tǒng)而不是多個(gè)文件系統(tǒng)。比如要獲取/hdfs/tmp/file1的數(shù)據(jù),看起來和單機(jī)無異,引用的是一個(gè)文件路徑,但是實(shí)際的數(shù)據(jù)存放在很多不同的機(jī)器上。作為用戶,不需要知道數(shù)據(jù)具體是怎么存儲(chǔ)在分布式系統(tǒng)中的,就好比在單機(jī)上我們不關(guān)心文件分散在什么磁道什么扇區(qū)一樣。HDFS會(huì)自動(dòng)為你管理這些數(shù)據(jù);
??2、數(shù)據(jù)處理,解決了存儲(chǔ)的問題之后,我們就要開始考慮如何處理數(shù)據(jù)了,雖然HDFS可以整體管理不同機(jī)器上的數(shù)據(jù),但是這些數(shù)據(jù)太大了。一臺(tái)機(jī)器承載著也是巨量的數(shù)據(jù),使用一臺(tái)機(jī)器跑也許需要好幾天甚至好幾周。那么,一個(gè)非常自然的想法,既然數(shù)據(jù)可以在多臺(tái)機(jī)器上存儲(chǔ),難道不能使用多臺(tái)機(jī)器來處理嗎?這就好比我們常使用的多核計(jì)算,類比來看,在大數(shù)據(jù)中,一臺(tái)機(jī)器對應(yīng)的就是一個(gè)核,因此同樣,和多核計(jì)算一樣,我們面臨著如何分配不同機(jī)器工作的問題,如果一臺(tái)機(jī)器掛了如何重新啟動(dòng)相應(yīng)的任務(wù),機(jī)器之間如何互相通信交換數(shù)據(jù)以完成復(fù)雜的計(jì)算等等,這就是MapReduce架構(gòu)、spark的功能。
??3、Mapreduce mapreduce不僅僅提供了技術(shù)上的架構(gòu),更重要的是其思想,對于巨大型任務(wù)的處理思路,其實(shí)很簡單,先map,然后reduce,它的思想和多核計(jì)算是非常相似的:
??我們來概覽一下mapreduce的結(jié)構(gòu),然后把mapreduce框架下整個(gè)任務(wù)處理的流程過一遍就能體會(huì)mapreduce的思想了:首先會(huì)有一個(gè)master節(jié)點(diǎn),作為用戶在大數(shù)據(jù)框架中的“計(jì)算機(jī)代理”負(fù)責(zé)整個(gè)任務(wù)的調(diào)度(這樣我們就不用人為地去給不同的worker(機(jī)器)分配工作了,這是mapreduce框架非常方便的地方),然后數(shù)據(jù)的input,既然我們要把計(jì)算拆分到多臺(tái)機(jī)器上,(這里我們以簡單經(jīng)典的詞頻統(tǒng)計(jì)為例,假設(shè)我們要統(tǒng)計(jì)兩篇長篇小說的詞頻),map要先把這兩篇長篇小說進(jìn)行拆分,假設(shè)我們是按照章節(jié)拆分的,并且每個(gè)章節(jié)的大小恰好相同(為了便于理解這里的假設(shè)都是非常理想的),將兩篇小說分別劃分為3個(gè)章節(jié)和2個(gè)章節(jié),一共5個(gè)章節(jié),然后呢,master就會(huì)分配一些worker去領(lǐng)任務(wù),比如派了5個(gè)worker分別對5個(gè)章節(jié)進(jìn)行詞頻統(tǒng)計(jì),統(tǒng)計(jì)完之后得到5個(gè)結(jié)果保存緩存在硬盤上,這就是一個(gè)完整的map(映射,其實(shí)本質(zhì)就是功能性函數(shù)的運(yùn)行,把原始數(shù)據(jù)通過一些計(jì)算轉(zhuǎn)化為另一些數(shù)據(jù))過程,簡單來說就是把一個(gè)任務(wù)分配給不同的機(jī)器執(zhí)行,接著,我們發(fā)現(xiàn),我們的最終目標(biāo)是統(tǒng)計(jì)兩個(gè)長篇小說,此時(shí)只是得到了每個(gè)章節(jié)的詞頻統(tǒng)計(jì)結(jié)果,那么,這個(gè)時(shí)候我們就需要reduce(歸約,簡單來說就是對所有worker的工作進(jìn)行匯總)來分配機(jī)器,讓workers去把剛才5個(gè)workers的計(jì)算結(jié)果進(jìn)行匯總,比如上圖,分配了兩個(gè)workers,一個(gè)worker匯總3個(gè)map-workers的工作結(jié)果,一個(gè)worker匯總剩下兩個(gè)workers的工作結(jié)果,最終將匯總計(jì)算的結(jié)果保存到本地的兩個(gè)文件上;
??上述的過程聽起來簡單,但是實(shí)現(xiàn)上是非常繁瑣的,很多時(shí)候,例如對于詞頻的計(jì)算,我們要自己去手動(dòng)編寫一個(gè)詞頻計(jì)算的map function,這對于數(shù)據(jù)處理與分析來說,實(shí)在太麻煩了,這就好比你想要去計(jì)算某一個(gè)特征的取值情況,通過pandas的value_counts()功能就可以輕松實(shí)現(xiàn),但是現(xiàn)在你要自己寫個(gè)func去做統(tǒng)計(jì),我們希望有個(gè)更高層更抽象的語言層來描述算法和數(shù)據(jù)處理流程,于是,就誕生了Hive和pig。Pig是接近腳本方式去描述MapReduce(沒用過),Hive則用的是SQL(hive sql,對于經(jīng)常寫sql同學(xué)來說非常簡單容易上手)。它們把腳本和SQL語言翻譯成MapReduce程序,丟給計(jì)算引擎去計(jì)算,這樣我們就從繁瑣的MapReduce程序中解脫出來。
??Hive逐漸成長成了大數(shù)據(jù)倉庫的核心組件(因?yàn)閟ql本身沒什么技術(shù)門檻,一般的非技術(shù)人員也可以)。甚至很多公司的流水線作業(yè)集完全是用SQL描述,因?yàn)橐讓懸赘?#xff0c;一看就懂,容易維護(hù)
??但是hive也有一個(gè)個(gè)問題,Hive底層執(zhí)行使用的是MapReduce引擎,仍然是一個(gè)批處理過程,難以滿足查詢的交互性,比如我們寫一個(gè)數(shù)據(jù)分析報(bào)告,我們想要去統(tǒng)計(jì)譬如每個(gè)用戶分別瀏覽了多少商品或者每個(gè)商品被多少用戶瀏覽過,當(dāng)數(shù)據(jù)量非常大的時(shí)候,hive的查詢效率是偏低的,子是又誕生了impala等分布式交互查詢數(shù)據(jù)庫,其底層做廠非常多的性能優(yōu)化大大提升了交互式查詢,數(shù)據(jù)分析的效率;
??再后來,spark的橫空出世支撐了hive on spark和sparksql (也就是我們熱悉的spark dataframe的父集),尤其是spark dataframe,不僅對于sql使用者來說友好,對于pandas的使用者也是較為友好的:
??這個(gè)時(shí)候,一個(gè)完整的大數(shù)據(jù)處理分析的框架就己經(jīng)躍然紙上丁:
??1、底層的mapreduce架構(gòu)(hadoop)或spark;
??2、中層的hive或pig或者在hdfs上跑impala等;
??3、上層的hive on spark或是直接使用sparksal
??最后,作為小白用戶,我們直接可以通過例如sparksql來進(jìn)行海量數(shù)據(jù)的快速分析與數(shù)據(jù)分析報(bào)告甚至是基本的特征工程等,這個(gè)時(shí)候,我們實(shí)際上已經(jīng)較好的解決了沒有實(shí)施需求的離線問題,后續(xù)的模型訓(xùn)練我們可以通過分布式的xgb、lgb、tf等框架或者是spark ml等進(jìn)行模型的訓(xùn)練
??那么,如果是有實(shí)時(shí)需求的業(yè)務(wù)場景呢?比如我們想要盡量讓申請信貨的用戶能夠?qū)崟r(shí)得到審批的結(jié)果,該怎么辦?
??于是,流(streaning)計(jì)算就問世了,storm是最流行的流計(jì)算平臺(tái),流計(jì)算的思路是,如果要達(dá)到更實(shí)時(shí)的更新,我們可以直接在數(shù)據(jù)流進(jìn)來的時(shí)候就進(jìn)行相應(yīng)處理,這和online learning的思想是比較類似的,比如還是詞頻統(tǒng)計(jì)的例子,我的數(shù)據(jù)流是一個(gè)一個(gè)的詞,我就讓他們一邊流過我就一邊開始統(tǒng)計(jì)了
??除此之外,針對于不同的場景,有不同的成熟開源的分布式系統(tǒng),例如基于hadoop的mahout和基于spark的spark ml, Mahout是hadoop的一個(gè)機(jī)器學(xué)習(xí)庫,主要的編程模型是MapReduce; Spark ML則是基于Spark的機(jī)器學(xué)習(xí),Spark自身擁有MLib作為機(jī)器學(xué)習(xí)庫,不過現(xiàn)在Mahout已經(jīng)停止接受新的MapReduce算法了,向Spark遷移。
??MLlib基于RDD,天生就可以與Spark SQL、 Graphx、spark Streaming無縫集成,非常的方便;
??最后是關(guān)于這么多大數(shù)據(jù)組件的集中管理,這里貼出網(wǎng)上的一個(gè)很有思的例子:有了這么多亂七八糟的工具,都在同一個(gè)集群上運(yùn)轉(zhuǎn),大家需要互相尊重有序工作。所以另外一個(gè)重要組件是,調(diào)度系統(tǒng)?,F(xiàn)在最流行的是Yarn。你可以把他看作中央管理,好比你媽在廚房監(jiān)工,哎,你妹妹切菜切完了,你可以把刀拿去殺雞了。只要大家都服從你媽分配,那大家都能愉快滴燒菜。你可以認(rèn)為,大數(shù)據(jù)生態(tài)圈就是個(gè)廚房工具生態(tài)圈。為了做不同的菜,中國菜,日本菜,法國菜,你需要不同的工具。而且客人的需求正在復(fù)雜化,你的廚具不斷被發(fā)明,也沒有一個(gè)萬用的廚具可以處理所有情況,因止他會(huì)變得越來越復(fù)雜。
關(guān)于hadoop和hive的介紹
hive
常用SQL語法
hive另外一些說明
總結(jié)
以上是生活随笔為你收集整理的金融风控实战——Hive详解(数据读取、预处理、特征工程)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 金融风控实战——信贷评分卡
- 下一篇: 特征选择(feature_selecti