大數據分析解決方案_第1頁
大數據分析解決方案_第2頁
大數據分析解決方案_第3頁
大數據分析解決方案_第4頁
大數據分析解決方案_第5頁
已閱讀5頁,還剩37頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

大數據分析的三個技巧【文章摘要】大數據的性質是有他的三個特點〔數據量大、種類多、處理速度快〕決定的,數據分析的角色和作用理所當然是由大數據的性質決定的。當數據分析作用于大數據時,大數據必須身兼數職。意思就是數據分析在一個組織中扮演著多種角色和擔負著多重責任。數據分析的職位是由DJPatil和JeffHammerbacher制定的,他們試圖稱呼數據組的同事們,而又不想因為稱呼而限制他們的能力?!瞓ecauseofimproperjobtitlelikebusinessanalystorresearchscientistBuildingDataScienceTeams〕隨著大數據在驅動企業(yè)成功中越來越有決定性作用,數據分析也變得越來越受歡送。然而,一些領導者對數據分析扮演的角色和它所起的作用仍然不是很了解,就像很多時候領導者不知道怎么從大數據中抽取有用的信息,雖然很清楚的知道這些大數據是很可信的。他們的腳步落后了——他們的眼光在大數據的利用上其實是模糊的。大數據的性質是有他的三個特點〔數據量大、種類多、處理速度快〕決定的,數據分析的角色和作用理所當然是由大數據的性質決定的。當數據分析作用于大數據時,大數據必須身兼數職。意思就是數據分析在一個組織中扮演著多種角色和擔負著多重責任。多種知識的掌握為了解決數據量大的問題,大數據平臺〔例如:ApacheHadoop、LexisNexisHPPC〕要求數據是被整理過的。數據分析員應該具有大數據平臺應用的全方位知識,這樣才能熟練的應用數據平臺處理大數據。數據分析元應當具有以下知識:1、了解大數據平臺的框架,例如:DFS和MapReduce,他們的編程框架提供強大的應用程序設計。這就意味著數據分析員還要有軟件構筑和設計的能力。2、精通大數據平臺支持的編程語言,例如:Java,Python,C++,orECL,等等。3、具有熟練的數據庫知識,特別是用到SQL語言的數據庫,像:HBase,CouchDB,等等。因為大數據平臺經常需要數據庫來存儲和轉換數據。4、具有數學/統(tǒng)計學、機器學習、數據挖掘領域的專業(yè)知識。一個企業(yè)的成功不是由數據量決定的,而是由能否成功的從大數據中發(fā)現(xiàn)和抽取有用的知識模式和關系決定的,然后用這些有價值的信息創(chuàng)造出有價值的產品。統(tǒng)計學、機器學習和數據挖掘可以很好的用于理解數據和開掘數據的價值。自然,為了成功數據分析者必須具備這些領域的專門知識。會使用一些數據挖掘工具或者平臺〔例如:R,Excel,SPSSandSAS〕是最好的,可以《TopAnalyticsandbigdatasoftwaretools》這本書。5、熟練應用自然語言處理的軟件或工具。大數據的內容大都來自于文本文件、新聞、社交媒體和報告、建議書等等。因此了解和掌握至少一種自然語言處理軟件或工具對于做一個成功的分析者起著決定性的作用。6、應用至少一種數據可視化工具。為了更有效的演示數據存在的模式和關系,能應用好數據可視化工具無疑是對數據分析員的一個加分。這里有20款數據可視化工具的鏈接。創(chuàng)新——好奇隨著數據變化速度的加快,經常也會有新的發(fā)現(xiàn)和問題出現(xiàn),數據分析員應該對那些變化敏感、對新發(fā)現(xiàn)好奇,并且找出應對新問題的方法。他/她也要熱情的及時相互溝通,從新問題中探索新產品的思路和解決方案,成為產品創(chuàng)新的駕馭者。商業(yè)技能首先,數據分析員多元化的性質決定了數據分析員要好很強的溝通能力,在企業(yè)里數據分析員必須和不同的人溝通,其中包括:溝通和理解業(yè)務需求、應用程序的要求、把數據的模式和關系翻譯給市場部、產品開發(fā)組和公司高管看。對于企業(yè)來說有效的溝通是及時采取行動應對大數據新發(fā)現(xiàn)的關鍵。數據分析員應該是能聯(lián)系所有,很好的溝通者。第二、數據分析員要具有良好的規(guī)劃和組織能力。這樣他/她才能巧妙地處理多個任務、樹立正確的優(yōu)先順序、保證按時完成任務。第三,數據分析員應該具有說服力、激情、和演講能力。才能引導人們基于數據的發(fā)現(xiàn)做出正確的決定,讓人們相信新發(fā)現(xiàn)的價值。數據分析員在某種意義上說是領導者,驅動產品創(chuàng)新。所有這些大數據的性質決定了數據分析員該具備的技巧和他們在企業(yè)中扮演的角色。盤點大數據分析的十二大殺手锏當數據以成百上千TB不斷增長的時候,我們需要一種獨特技術來應對這種前所未有的挑戰(zhàn)。大數據分析迎來大時代全球各行各業(yè)的組織機構已經意識到,最準確的商務決策來自于事實,而不是憑空臆想。這也就意味著,他們需要在內部交易系統(tǒng)的歷史信息之外,采用基于數據分析的決策模型和技術支持?;ヂ?lián)網點擊數據、傳感數據、日志文件、具有豐富地理空間信息的移動數據和涉及網絡的各類評論,成為了海量信息的多種形式。極具挑戰(zhàn)性的是,傳統(tǒng)的數據庫部署不能處理數TB數據,也不能很好的支持高級別的數據分析。在過去十幾年中,大規(guī)模并行處理〔MPP〕平臺和列存儲數據庫開啟了新一輪數據分析史上的革命。而且近年來技術不斷開展,我們開始看到,技術升級帶來的架構之間的界限變得更加模糊。更為重要的是,開始逐步出現(xiàn)了處理半結構化和非結構化信息的NoSQL等平臺。大數據分析迎來大時代本文中,我們將向大家介紹迄今為止,包括EMC的Greenplum、Hadoop和MapReduce等提供大數據分析的產品。此外,惠普前段時間收購實時分析平臺Vertica、IBM獨立的基于DB2智能分析系統(tǒng)和Netezza的相關產品。當然,也有微軟的ParallelDataWarehouse、SAP旗下公司Sybase的SybaseIQ數據倉庫分析工具等。下面,就讓我們來了解業(yè)界大數據分析的這十二大產品:1.模塊化EMCAppliance處理多種數據類型2023年EMC收購了Greenplum,隨后,利用EMC自身存儲硬件和支持復制與備份功能的Greenplum大規(guī)模并行處理〔MPP〕數據庫,推出了EMCGreenplumDataComputingAppliance(DCA)。通過與SAS和MapR等合作伙伴,DCA擴大了對Greenplum的數據庫支持。支持大數據分析的EMCAppliance今年5月,EMC推出了自己的Hadoop軟件工具,而且該公司還承諾,今年秋季發(fā)布的模塊化DCA將支持GreenplumSQL/關系型數據庫,Hadoop部署也能在同樣的設備上得到支持。借助Hadoop,EMC能夠解決諸如網絡點擊數據、非結構數據等真正大數據分析的困難。模塊化的DCA也能夠在同樣的設備上支持長期保存的高容量的存儲模塊,從而滿足監(jiān)測需求。2.Hadoop和MapReduce提煉大數據Hadoop是一個開放源碼的分布式數據處理系統(tǒng)架構,主要面向存儲和處理結構化、半結構化或非結構化、真正意義上的大數據〔通常成百上千的TB甚至PB級別數據〕應用。網絡點擊和社交媒體分析應用,正在極大地推動應用需求。Hadoop提供的MapReduce〔和其他一些環(huán)境〕是處理大數據集理想解決方案。MapReduce能將大數據問題分解成多個子問題,將它們分配到成百上千個處理節(jié)點之上,然后將結果聚集到一個小數據集當中,從而更容易分析得出最后的結果。MapReduce結構圖Hadoop可以運行在低本錢的硬件產品之上,通過擴展可以成為商業(yè)存儲和數據分析的替代方案。它已經成為很多互聯(lián)網巨頭,比方AOL、eHarmony〔美國在線約會網站〕、易趣、Facebook、Twitter和Netflix大數據分析的主要解決方案。也有更多傳統(tǒng)的巨頭公司比方摩根大通銀行,也正在考慮采用這一解決方案。3.惠普Vertica電子商務分析今年二月被惠普收購的Vertica,是能提供高效數據存儲和快速查詢的列存儲數據庫實時分析平臺。相比傳統(tǒng)的關系數據庫,更低的維護和運營本錢,就可以獲得更快速的部署、運行和維護。該數據庫還支持大規(guī)模并行處理〔MPP〕。在收購之后,惠普隨即推出了基于x86硬件的HPVertica。通過MPP的擴展性可以讓Vertica為高端數字營銷、電子商務客戶〔比方AOL、Twitter、Groupon〕分析處理的數據到達PB級?;萜誚ertica實時分析平臺其實,早在惠普收購之前,Vertica就推出有包括內存、閃存快速分析等一系列創(chuàng)新產品。它是首個新增Hadoop鏈接支持客戶管理關系型數據的產品之一,也是首個基于云部署風險的產品平臺之一。目前,Vertica支持惠普的云效勞自動化解決方案。4.IBM提供運維和分析數據倉庫去年,IBM推出了基于DB2的SmartAnalyticSystem〔圖中左側〕,那么它為何還要收購另外的Netezza方案平臺呢?因為前者是具備高擴展性企業(yè)數據倉庫的平臺,可以支持成千上萬的用戶和各類應用操作。比方,呼叫中心通常擁有大量的雇員需要快速回撥客戶的歷史通話記錄。SmartAnalyticSystem提供了整合信息的DB2數據庫,預配置CognosBI軟件模塊,可以在IBMPowerSystem〔RISC或者X86架構〕上運行。SmartAnalyticSystem及NetezzaNetezza致力于為數字化營銷公司、電信、和其他挖掘成百上千TB甚至PB級別數據的公司,提供高可擴展分析應用的解決方案。IBM的NetezzaTwinFin數據倉庫設備,支持大規(guī)模并行處理,可以在一天時間內部署完畢。Netezza支持多種語言和方式進行數據庫分析,其中包括Java、C、C++、Python和MapReduce。與此同時,它還支持如SAS,IBMSPSS使用的矩陣操作方法和R編程語言。IBMNetezza最近增加了一個高容量長期存檔設備以滿足更多要求。5.Infobright減少DBA工作量和查詢時間Infobright列存儲數據庫,旨在為數十TB級別數據提供各類分析效勞。而這一塊也正是甲骨文和微軟SQLServer的核心市場之一。InfoBright還表示,建立在MySQL根底之上的數據庫也提供了另外一種選擇,它專門針對分析應用、低本錢簡化勞動力工作、交付高性能的效勞進行設計。列存儲數據庫能夠自動創(chuàng)立索引,而且無需進行數據分區(qū)和DBA調整。相比傳統(tǒng)數據庫,它可以減少90%的人工工作量,而且由于其采用高數據壓縮,在數據庫許可和存儲等方面的開支也可以減少一半。KnowledgeGrid查詢引擎InfoBright最新的4.0版本產品,新增了一個DomainExpert的功能。企業(yè)用戶可以借此忽略不斷重復的那些數據,比方郵箱地址、URL和IP地址。與此同時,公司還可以增加與呼叫記錄、業(yè)務交易或者地理位置信息相關的數據。KowledgeGrid查詢引擎那么可以幫助過濾那些靜態(tài)數據而只關注那些變化的數據。也就是說,它可以幫助節(jié)省數據查詢的時間,因為那些無關的數據無需進行解壓縮和篩選。6.Kognitio提供三倍速度和虛擬多維數據集Kognitio是一家本身不生產硬件產品的數據庫廠商,它看到了客戶對快速部署的廣泛興趣和市場需求,推出了在惠普、IBM硬件產品上預配置有WX2數據庫的Lakes、Rivers和Rapids解決方案。Lakes能夠以低本錢、10TB數據存儲和每個模塊48個運算核心提供大容量存儲效勞。電信或金融效勞公司,可以使用這種配置來掃描大量的分支結構的各種信息記錄。Rivers那么提供了容量和速度之間的平衡,預配置為2.5TB存儲容量,它的每個模塊擁有48個運算核心。而追求查詢性能的Rapids,其預配置提供有96個運算核心,每個模塊僅僅為1.5TB。該產品方案主要針對金融公司在算法交易或者其他高性能要求方面的需求。Kognitio基于內存運算的數據倉庫和數據分析今年,Kognitio新增了一個虛擬化OLAP風格的Pablo分析引擎。它提供了靈活的、為企業(yè)用戶進行分析的解決方案。用戶可升級選用WX2構建一個虛擬多維數據集。因此,WX2數據庫中任何一個維度的數據都可在內存中用于快速分析。這種分析的前端接口是我們常見的MicrosoftExcel。7.微軟SQLServer新增PDW功能今年年初微軟發(fā)布的SQLServerR2ParallelDataWarehouse〔PDW,并行數據倉庫〕,一改以往SQLServer部署時間需要花費兩年半時間的歷史,它可以幫助客戶擴展部署數百TB級別數據的分析解決方案。支持這一產品的包括有合作伙伴惠普的硬件平臺。發(fā)布之初,雖然微軟官網提供有讓利折扣,但PDW售價仍超過13000美元/TB〔用戶和硬件訪問量〕。SQLServerPDW和很多產品一樣,PDW使用了大規(guī)模并行處理來支持高擴展性,但微軟進入這一市場實屬“姍姍來遲〞,而且在一定程度上說,數據倉庫分析和內存分析計算市場落下了后腿。目前,微軟寄希望于其整體數據庫平臺在市場上帶來的差異化競爭力。這意味著,所有沿襲了基于微軟平臺的數據和數據管理,將被廣泛應用在信息集成領域——ReportingandAnalysisServices,而這一切都基于SQLServer數據庫。微軟在今年10月12日通過推出ApacheHadoop和相關的SQLAzureHadoop效勞,宣布進入大數據領域。Azure效勞將在2023年底亮相,而相應的本地配套軟件要在明年上半年推出,現(xiàn)在也不清楚微軟是否會與其他硬件合作伙伴或者相關大數據設備廠商合作。8.甲骨文講述EngineeredSystems的故事甲骨文表示,Exadata〔圖中左側〕是迄今以來發(fā)布的產品中最為成功的產品,自從2023年推出以來,已經擁有超過1000名客戶。而engineeredsystem使得甲骨文11g數據庫,可以支持基于X86的數據處理和磁盤存儲層,其閃存緩存也使得可以實現(xiàn)超快速查詢處理。它既可應用在任意事務環(huán)境中,也可以應用在數據倉庫〔但不能同時進行〕。Exadata的混合柱狀壓縮能夠實現(xiàn)列存儲數據庫的某些高效率特點,提供高達10:1的壓縮比,而大局部行存儲數據庫的平均壓縮比為4:1。甲骨文在9月通過宣布OracleSuperCluster〔圖中右側〕,擴展了engineeredsystems產品家族。它采用了最新的SunSparcT-4芯片。SuperCluster支持全機架/半機架配置,而且用戶可以在半機架容量根底上進行擴容。滿額配置提供有1200個CPU線程,4TB內存,97TB至198TB磁盤存儲,8.66TB閃存。甲骨文大數據分析系統(tǒng)設施甲骨文聲稱,SuperCluster事務處理和數據倉庫性能相比傳統(tǒng)效勞器架構能分別帶來10倍和50倍速度提升。但作為一個專有的Unix機器,甲骨文想通過SuperCluster,在面向x86硬件的數據倉庫部署遷移大潮中力挽狂瀾。甲骨文的Exadata和Exalogic都基于x86架構而且運行Linux系統(tǒng)。在十月召開的OracleOpenWorld中,甲骨文宣布將新增一個分布式pacheHadoop軟件和相關的大數據設備。甲骨文也方案推出一個獨立的基于開源BerkeleyDB產品的NoSQL。9.ParAccel大打列存儲、MPP和數據庫分析組合拳ParAccel是ParAccelAnalyticDatabase〔PADB〕的開發(fā)廠商——提供快速、選擇性查詢和列存儲數據庫,并基于大規(guī)模并行處理優(yōu)勢特點的產品。該公式表示,其平臺支持一系列針對各種復雜、先進應用的工作負載報告和分析。ParAccel大數據解決方案內置的分析算法可以為分析師提供高級數學運算、數據統(tǒng)計、和數據挖掘等各種功能,同時,它還提供一個開放的API,可以擴展數據庫的各種數據處理能力和第三方分析應用。Tablefunctions被用來傳送和接收第三方和采用C、C++等編寫的定制算法的數據結果。ParAccel與FuzzyLogix——一家提供各種描述統(tǒng)計學、統(tǒng)計實驗模擬和模式識別功能庫功能的效勞商。此外,Tablefunctions還支持MapReduce和廣泛應用在金融效勞的700多種分析技術。10.Sybase推進IQ列存儲數據庫SAP旗下的Sybase是列存儲數據庫管理系統(tǒng)的首批廠商,而且目前仍然是擁有2000多個客戶的暢銷廠商。今年夏天推出了SybaseIQ15.3版本,該版本產品能夠處理更多數據和更多數據類型,也能勝任更多查詢,當然這主要得益于其包含了一個名叫PlexQ的大規(guī)模并行處理功能?;贛PP大規(guī)模并行處理的PlexQ分布式查詢平臺,通過將任務分散到網格配置中的多臺計算機,加速了高度復雜的查詢。有報道說,它能提供比現(xiàn)有的IQ部署快12倍的交付能力。SybaseIQ為了支持不同的分析,15.3版本的產品增加了分布式處理功能,來執(zhí)行PlexQ網格中跨CPU的查詢效勞。為了確保實現(xiàn)最快速度的查詢,PlexQ包含了一個邏輯效勞器——讓管理員對PlexQ網格的物理效勞器組成虛擬群集,以便優(yōu)化分析工作負載、用戶需求和應用程序。SybaseIQ和其他大多數的支持MPP功能的產品之間區(qū)別主要在于,它采用了全共享的方式。全共享的缺點是CPU會爭相訪問共享存儲〔通常是SAN〕,而這會降低查詢性能。不過Sybase堅持認為,從優(yōu)化查詢的角度來說全共享會更加靈活,因為所有的CPU都會訪問所有的數據。所以,我們可以對某個特定的查詢盡可能多〔或者少〕地分配計算資源。11.Teradata從EDWs跨入大規(guī)模分析領域一旦成為企業(yè)級數據倉庫〔EDW〕的宣傳者,近年來Teradata就已經放松了擴展Teradata數據庫產品家族的步伐。該公司的高性能、高容量產品被廣泛采用和復制,因為其中包括了很多企業(yè)工作量管理的功能模塊,包括虛擬OLAP〔三維立體式〕分析模型。Teradata在數據庫分析領域不斷推陳出新,但在結構化數據、半結構化數據和大局部非結構化數據領域幾乎沒有很大成果。這也就是為什么該公司要收購AsterData——一家提供SQL-MapReduce框架的公司。MapReduce處理擁有廣泛的市場需求,因為存在著大量的互聯(lián)網點擊數據、傳感數據和社交媒體內容。Teradata平臺產品家族Teradata日前宣布了一項AsterDataMapReduce產品的方案,它建立在以往產品同樣的硬件平臺之上,而且在Teradata和AsterData之間新增了兩種集成方法。通過收購,Teradata打破了在數據倉儲業(yè)被認為最廣泛、最具擴展性的界限。12.1010data提供基于云計算大數據分析正如標題所說,1010data能夠提供基于云計算的大數據分析平臺。很大數據庫平臺供給商提供基于云的沙箱測試和開發(fā)環(huán)境,但1010data的管理數據庫效勞,主要針對將整個工作負載遷移到云的全過程。該效勞支持一種提供“豐富而又高級的內置分析功能〞,其中包括有預測分析。其一大賣點是效勞包括了數據建模和設計、信息集成和數據轉換。1010data提供基于云計算大數據分析其客戶包括有對沖基金、全球各大銀行、證券交易商,零售商和包裝消費品公司。何謂大數據?大數據,也就是國外常說的BigData。IBM把大數據概括成了三個V,即大量化〔Volume〕、多樣化〔Variety〕和快速化〔Velocity〕。這些特點也反映了大數據所潛藏的價值〔Value〕,我們也可以認為,四個V高度概括了大數據的根本特征。業(yè)界比擬一致對大數據的定義是:大數據是指無法在一定時間內用常規(guī)軟件工具對其內容進行抓取、管理和處理的數據集合。大數據時代分析技術如何進化2023-06-1907:30比特網袁斌關鍵字:FICO大數據費埃哲當你在應用信用卡進行交易時,你可能沒有意識到,這筆交易是否成功,是由費埃哲(FICO)公司的產品在后臺進行智能判斷和監(jiān)測的。目前,費埃哲公司的Falcon解決方案在幫助客戶監(jiān)控全球2/3的信用卡交易,并從中區(qū)分欺詐活動。顯然,這是一個非常典型的大數據應用——銀行每天的信用卡交易數都是一個天文數字,如何有效處理和鑒別這些數據,幫助企業(yè)做出正確的決策?在非結構化數據洶涌增加的今天,費埃哲公司又是如何判斷大數據時代的分析技術進展?日前,比特網記者采訪了費埃哲(FICO)公司首席執(zhí)行官WillLansing先生。費埃哲〔FICO〕公司首席執(zhí)行官WillLansing先生問:大數據對軟件和硬件都有非常強的挑戰(zhàn),所以現(xiàn)在業(yè)界有一種趨勢,要做軟硬件結合,以更緊密的一體機形式來提供分析效勞。最典型的產品,例如甲骨文公司的Exalytics系統(tǒng)。那么,您是如何看待這一趨勢?費埃哲公司會如何更好地與硬件進行優(yōu)化整合?答:這是一個非常好的問題。就費埃哲公司而言,根底架構并不是我們的專長,所以我們要和我們的客戶去合作。目前,我們有一些合作方式是基于SaaS的,也有一些是基于其它各類解決方案的。費埃哲公司并不強制客戶使用某種特定的根底架構來運行我們的應用、捕捉應用數據,而是在客戶現(xiàn)有的根底架構運營優(yōu)化、進行合作。實際上,費埃哲公司也在和一些實驗室合作,例如Cloudera,借此來拓展我們的能力,消除我們(對硬件根底設施在理解上)的局限性。問:在大數據的分析方面,數學模型非常重要。我們知道,費埃哲公司在金融領域有很深的積累。那么,這種積累如何推廣到其他行業(yè)?答:費埃哲公司在垂直行業(yè)已經有很長時間的積累了,這也是我們能夠將業(yè)務拓展到非金融行業(yè)的一大原因。我們公司非常擅長分析一些復雜、困難的問題,這些分析技巧不僅適用于金融行業(yè),也適用于其他多個行業(yè)。例如,我們對于客戶行為的了解,就不局限于金融行業(yè),還包括保險行業(yè)和零售行業(yè)。在保險行業(yè)當中,某些欺詐的行為和在銀行業(yè)當中的信用卡欺詐的用戶行為是非常類似的。而在營銷解決方案方面,很多零售行業(yè)的客戶行為和銀行客戶的行為也非常近似。所以,我們在金融行業(yè)的客戶管理經驗,也可以應用到零售行業(yè)。以費埃哲公司在中國的業(yè)務開展為例,銀行業(yè)務是最傳統(tǒng)的領域。但從一年前開始,費埃哲就開始把我們成熟的技術推向保險領域,協(xié)助保險公司做理賠的反欺詐。盡管保險行業(yè)的業(yè)務特點跟銀行不太一樣,但我們的技術是同樣適用的,而且我們在國外的保險行業(yè)也有所積累。因此,費埃哲在國內的保險理賠反欺詐的案例就非常成功——客戶回訪時,他們表示,現(xiàn)在能夠通過數據分析,實時抓住大批量的理賠欺詐。問:我們也注意到,您提到了信用卡反欺詐這個大數據應用。但相對而言,這都是針對結構化數據的,針對郵件、文本這些非結構化的數據,費埃哲公司將采用哪些解決方案去處理?答:大數據的定義當中,包括3個V(高容量、高速度、多類型)。雖然費埃哲的信用卡反欺詐解決方案只是針對結構化數據,但我們已經能夠處理大容量數據和高速的數據。到目前為止,我們還是采用相對傳統(tǒng)的方式,將數據簡化到一個智能的、可操作的層面,然后基于這些數據來做出快速決策。盡管我們現(xiàn)在只能做到這三個V當中的兩個,但我們非常接近完美地來解決這個問題的。隨著根底架構不斷的完善和演進,費埃哲的解決方案也會發(fā)生變化。問:在數據爆發(fā)的時代,我們進行數據分析的方式需要改變嗎?答:我們關于大數據的絕大多數討論都集中在數據的規(guī)模,并沒有相應關注在數據分析方式的改變?!皵祿鳕暤姆治鰧τ贔ICO并不陌生,其中最好的應用莫過于我們的反欺詐解決方案——FICOFalconFraudManager。Falcon模型依靠交易特征,它概括了數據在交易過程中的特征,以便計算相關的欺詐特點的變量,而不依賴由此生成的既有數據。我們在數據流特征分析領域不斷推動創(chuàng)新,尤其在反欺詐領域。這些創(chuàng)新技術包括:全球智能特征識別技術。它可以自動發(fā)現(xiàn)銀行卡交易、ATM和商戶交易中的不正常行為。再比方FICO公司開發(fā)的自我校正分析技術,它可以隨著客戶行為模式的改變,效勞渠道的改變而改善偵測的準確性。另一個由大數據帶來的變化是分析必須減少對于固有數據的依賴。分析模型將能夠根據數據流中的動態(tài)數據自我調整。為了應對不斷增加的數據流中的動態(tài)數據,我們集中研發(fā)了自我學習的一些技術,包括:自適應分析和自我矯正分析技術。我們堅信這些關鍵技術將彌補傳統(tǒng)方式的缺乏。自學習技術甚至將可能在某些領域取代傳統(tǒng)的模式。最近,我們在自己開發(fā)的自我校正分析技術上取得了重大進展。已申請專利的“多層自我校正分析技術〞的體系結構與神經網絡模式類似,但與之不同的是新模式可以在數據流中自我校正。使用多層自我校正模式將需要更少的數據采樣,并且可以直接與自適應分析技術聯(lián)合使用,可以更為動態(tài)地發(fā)現(xiàn)欺詐。將“多層自我校對系統(tǒng)〞與目前通用的技術相比,我們預見未來的分析技術將大幅提高。問:更進一步地說,現(xiàn)在的大數據分析,都是數據進行篩選、過濾到數據倉庫當中,然后進行分析。隨著硬件設備在性能和容量上不斷提升,還有必要對傳統(tǒng)分析技術進行大規(guī)模改良嗎?答:今天的大數據分析情況確實如你所說的這樣。但我相信,在不遠的將來,我們會需要直接對大數據進行分析。這種分析可能有兩種方式:一種是隨著數據集的不斷增加,我們需要重新建?!跀祿粩嘣黾拥那闆r下,可能需要考慮應用Hadoop技術進行存儲,否那么我們就沒有容量足夠大的存儲空間;另一種方式那么是采用基于機器學習的方法,來進行大數據的處理和分析。至于硬件的性能,也許現(xiàn)在還不是問題,但當我們考慮所有數據,并從中找出最有價值的地方時,用現(xiàn)有的根底架構就會顯得遠遠不夠。例如,今天的銀行客戶,他們已經知道,未來他們的數據是分散的、遍布各地的,可能在銀行內部,可能在局域網或者在云里面,他們希望這些數據都能夠被讀取,都對數據進行分析。顯然,這是今天的架構無法完成的,這需要將來才可以實現(xiàn)。問:那么,您認為機器學習和傳統(tǒng)模型這兩種數據分析方式,哪種更有開展前途?答:大數據的最終目標就是利用各種數據來做出最好的決策。大數據最美的地方,就是我們不再受數據容量的局限,它可以不斷的增加一些變量,然后增加價值,幫助我們做出更好的決策。如你所提到的,現(xiàn)在我們有兩種模型,一種是基于假設的模型,例如前幾年麥肯錫提出來的假設模型,說我們要關注哪些高價值數據,關注相關領域的數據,關注那些能夠提升效率的數據。另一種模型就是一種不是基于假設的模型,確切地說,是一種機器學習的模型。這種模型跟假設模型完全不同。我并不認為這兩種模型可以相互替代。從長期來看,一定會有更多的數據需要我們去關注。對大數據來說,它能夠不斷的增加變量,幫助我們基于這些數據做出更好的決策,這是它特別有優(yōu)勢的一個地方。我個人認為,在比擬長的一段時間之后,機器學習的這種方式,有可能會取代假設的這種模型。問:在金融領域的機器學習應該具有什么特性?答:以小額貸款的機器學習為例,這需要非??焖儆^察和衡量,能夠迅速發(fā)現(xiàn)壞帳,這樣才能夠快速學習、調整。盡管目前也有一些公司推出了所謂的機器學習,但這是非常有局限性的,主要是用于展示,展示出新科技所帶來的可能性,并告訴客戶這個新科技可以不斷完善,并且最終能夠降低風險。技術根底:大數據分析技術的開展ZDNet存儲系統(tǒng)來源:賽迪網2023年05月16日評論(0)關鍵詞:大數據MapReduceGoogle本文摘要大數據分析技術最初起源于互聯(lián)網行業(yè)。網頁存檔、用戶點擊、商品信息、用戶關系等數據形成了持續(xù)增長的海量數據集。這些大數據中蘊藏著大量可以用于增強用戶體驗、提高效勞質量和開發(fā)新型應用的知識,而如何高效和準確的發(fā)現(xiàn)這些知識就根本決定了各大互聯(lián)網公司在劇烈競爭環(huán)境中的位置。首先,以Google為首的技術型互聯(lián)網公司提出了MapReduce的技術框架,利用廉價的PC效勞器集群,大規(guī)模并發(fā)處理批量事務。大數據分析技術最初起源于互聯(lián)網行業(yè)。網頁存檔、用戶點擊、商品信息、用戶關系等數據形成了持續(xù)增長的海量數據集。這些大數據中蘊藏著大量可以用于增強用戶體驗、提高效勞質量和開發(fā)新型應用的知識,而如何高效和準確的發(fā)現(xiàn)這些知識就根本決定了各大互聯(lián)網公司在劇烈競爭環(huán)境中的位置。首先,以Google為首的技術型互聯(lián)網公司提出了MapReduce的技術框架,利用廉價的PC效勞器集群,大規(guī)模并發(fā)處理批量事務。利用文件系統(tǒng)存放非結構化數據,加上完善的備份和容災策略,這套經濟實惠的大數據解決方案與之前昂貴的企業(yè)小型機集群+商業(yè)數據庫方案相比,不僅沒有喪失性能,而且還贏在了可擴展性上。之前,我們在設計一個數據中心解決方案的前期,就要考慮到方案實施后的可擴展性。通常的方法是預估今后一段時期內的業(yè)務量和數據量,參加多余的計算單元〔CPU〕和存儲,以備不時只需。這樣的方式直接導致了前期一次性投資的巨大,并且即使這樣也依然無法保證計算需求和存儲超出設計量時的系統(tǒng)性能。而一旦需要擴容,問題就會接踵而來。首先是商業(yè)并行數據庫通常需要各節(jié)點物理同構,也就是具有近似的計算和存儲能力。而隨著硬件的更新,我們通常參加的新硬件都會強于已有的硬件。這樣,舊硬件就成為了系統(tǒng)的瓶頸。為了保證系統(tǒng)性能,我們不得不把舊硬件逐步替換掉,經濟本錢損失巨大。其次,即使是當前最強的商業(yè)并行數據庫,其所能管理的數據節(jié)點也只是在幾十或上百這個數量級,這主要是由于架構上的設計問題,所以其可擴展性必然有限。而MapReduce+GFS框架,不受上述問題的困擾。需要擴容了,只需增加個機柜,參加適當的計算單元和存儲,集群系統(tǒng)會自動分配和調度這些資源,絲毫不影響現(xiàn)有系統(tǒng)的運行。如今,我們用得更多的是GoogleMapReduce的開源實現(xiàn),即Hadoop。除了計算模型的開展,與此同時,人們也在關注著數據存儲模型。傳統(tǒng)的關系型數據庫由于其標準的設計、友好的查詢語言、高效的數據處理在線事務的能力,長時間地占據了市場的主導地位。然而,其嚴格的設計定式、為保證強一致性而放棄性能、可擴展性差等問題在大數據分析中被逐漸暴露。隨之而來,NoSQL數據存儲模型開始風行。NoSQL,也有人理解為NotOnlySQL,并不是一種特定的數據存儲模型,它是一類非關系型數據庫的統(tǒng)稱。其特點是:沒有固定的數據表模式、可以分布式和水平擴展。NoSQL并不是單純的反對關系型數據庫,而是針對其缺點的一種補充和擴展。典型的NoSQL數據存儲模型有文檔存儲、鍵-值存儲、圖存儲、對象數據庫、列存儲等。而比擬流行的,不得不提到Google提出的Bigtable。Bigtable是一種用于管理海量結構化數據的分布式存儲系統(tǒng),其數據通常可以跨成千個節(jié)點進行分布式存儲,總數據量可達PB級〔10的15次方字節(jié),106GB〕。HBase是其開源實現(xiàn)。如今,在開源社區(qū),圍繞GoogleMapReduce框架,成長出了一批優(yōu)秀的開源工程。這些工程在技術和實現(xiàn)上相互支持和依托,逐漸形成了一個特有的生態(tài)系統(tǒng)。這里借用Cloudera所描繪的架構圖來展現(xiàn)Hadoop生態(tài)系統(tǒng)。這個系統(tǒng)為我們實現(xiàn)優(yōu)質廉價的大數據分析提供了堅實的技術根底。使用Storm實現(xiàn)實時大數據分析!實時Storm大數據摘要:隨著數據體積的越來越大,實時處理成為了許多機構需要面對的首要挑戰(zhàn)。ShruthiKumar和SiddharthPatankar在Dr.Dobb’s上結合了汽車超速監(jiān)視,為我們演示了使用Storm進行實時大數據分析。CSDN在此編譯、整理。簡單和明了,Storm讓大數據分析變得輕松加愉快。當今世界,公司的日常運營經常會生成TB級別的數據。數據來源囊括了互聯(lián)網裝置可以捕獲的任何類型數據,網站、社交媒體、交易型商業(yè)數據以及其它商業(yè)環(huán)境中創(chuàng)立的數據??紤]到數據的生成量,實時處理成為了許多機構需要面對的首要挑戰(zhàn)。我們經常用的一個非常有效的開源實時計算工具就是Storm——Twitter開發(fā),通常被比作“實時的Hadoop〞。然而Storm遠比Hadoop來的簡單,因為用它處理大數據不會帶來新老技術的交替。ShruthiKumar、SiddharthPatankar共同效力于Infosys,分別從事技術分析和研發(fā)工作。本文詳述了Storm的使用方法,例子中的工程名稱為“超速報警系統(tǒng)〔SpeedingAlertSystem〕〞。我們想實現(xiàn)的功能是:實時分析過往車輛的數據,一旦車輛數據超過預設的臨界值——便觸發(fā)一個trigger并把相關的數據存入數據庫。Storm比照Hadoop的批處理,Storm是個實時的、分布式以及具備高容錯的計算系統(tǒng)。同Hadoop一樣Storm也可以處理大批量的數據,然而Storm在保證高可靠性的前提下還可以讓處理進行的更加實時;也就是說,所有的信息都會被處理。Storm同樣還具備容錯和分布計算這些特性,這就讓Storm可以擴展到不同的機器上進行大批量的數據處理。他同樣還有以下的這些特性:易于擴展。對于擴展,你只需要添加機器和改變對應的topology〔拓撲〕設置。Storm使用HadoopZookeeper進行集群協(xié)調,這樣可以充分的保證大型集群的良好運行。每條信息的處理都可以得到保證。Storm集群管理簡易。Storm的容錯機能:一旦topology遞交,Storm會一直運行它直到topology被廢除或者被關閉。而在執(zhí)行中出現(xiàn)錯誤時,也會由Storm重新分配任務。盡管通常使用Java,Storm中的topology可以用任何語言設計。當然為了更好的理解文章,你首先需要安裝和設置Storm。需要通過以下幾個簡單的步驟:從Storm官方下載Storm安裝文件將bin/directory解壓到你的PATH上,并保證bin/storm腳本是可執(zhí)行的。Storm組件Storm集群主要由一個主節(jié)點和一群工作節(jié)點〔workernode〕組成,通過Zookeeper進行協(xié)調。主節(jié)點:主節(jié)點通常運行一個后臺程序——Nimbus,用于響應分布在集群中的節(jié)點,分配任務和監(jiān)測故障。這個很類似于Hadoop中的JobTracker。工作節(jié)點:工作節(jié)點同樣會運行一個后臺程序——Supervisor,用于收聽工作指派并基于要求運行工作進程。每個工作節(jié)點都是topology中一個子集的實現(xiàn)。而Nimbus和Supervisor之間的協(xié)調那么通過Zookeeper系統(tǒng)或者集群。ZookeeperZookeeper是完成Supervisor和Nimbus之間協(xié)調的效勞。而應用程序實現(xiàn)實時的邏輯那么被封裝進Storm中的“topology〞。topology那么是一組由Spouts〔數據源〕和Bolts〔數據操作〕通過StreamGroupings進行連接的圖。下面對出現(xiàn)的術語進行更深刻的解析。Spout:簡而言之,Spout從來源處讀取數據并放入topology。Spout分成可靠和不可靠兩種;當Storm接收失敗時,可靠的Spout會對tuple〔元組,數據項組成的列表〕進行重發(fā);而不可靠的Spout不會考慮接收成功與否只發(fā)射一次。而Spout中最主要的方法就是nextTuple〔〕,該方法會發(fā)射一個新的tuple到topology,如果沒有新tuple發(fā)射那么會簡單的返回。Bolt:Topology中所有的處理都由Bolt完成。Bolt可以完成任何事,比方:連接的過濾、聚合、訪問文件/數據庫、等等。Bolt從Spout中接收數據并進行處理,如果遇到復雜流的處理也可能將tuple發(fā)送給另一個Bolt進行處理。而Bolt中最重要的方法是execute〔〕,以新的tuple作為參數接收。不管是Spout還是Bolt,如果將tuple發(fā)射成多個流,這些流都可以通過declareStream〔〕來聲明。StreamGroupings:StreamGrouping定義了一個流在Bolt任務間該如何被切分。這里有Storm提供的6個StreamGrouping類型:1.隨機分組〔Shufflegrouping〕:隨機分發(fā)tuple到Bolt的任務,保證每個任務獲得相等數量的tuple。2.字段分組〔Fieldsgrouping〕:根據指定字段分割數據流,并分組。例如,根據“user-id〞字段,相同“user-id〞的元組總是分發(fā)到同一個任務,不同“user-id〞的元組可能分發(fā)到不同的任務。3.全局部組〔Allgrouping〕:tuple被復制到bolt的所有任務。這種類型需要謹慎使用。4.全局分組〔Globalgrouping〕:全部流都分配到bolt的同一個任務。明確地說,是分配給ID最小的那個task。5.無分組〔Nonegrouping〕:你不需要關心流是如何分組。目前,無分組等效于隨機分組。但最終,Storm將把無分組的Bolts放到Bolts或Spouts訂閱它們的同一線程去執(zhí)行〔如果可能〕。6.直接分組〔Directgrouping〕:這是一個特別的分組類型。元組生產者決定tuple由哪個元組處理者任務接收。當然還可以實現(xiàn)CustomStreamGroupimg接口來定制自己需要的分組。工程實施當下情況我們需要給Spout和Bolt設計一種能夠處理大量數據〔日志文件〕的topology,當一個特定數據值超過預設的臨界值時促發(fā)警報。使用Storm的topology,逐行讀入日志文件并且監(jiān)視輸入數據。在Storm組件方面,Spout負責讀入輸入數據。它不僅從現(xiàn)有的文件中讀入數據,同時還監(jiān)視著新文件。文件一旦被修改Spout會讀入新的版本并且覆蓋之前的tuple〔可以被Bolt讀入的格式〕,將tuple發(fā)射給Bolt進行臨界分析,這樣就可以發(fā)現(xiàn)所有可能超臨界的記錄。下一節(jié)將對用例進行詳細介紹。臨界分析這一節(jié),將主要聚焦于臨界值的兩種分析類型:瞬間臨界〔instantthershold〕和時間序列臨界〔timeseriesthreshold〕。瞬間臨界值監(jiān)測:一個字段的值在那個瞬間超過了預設的臨界值,如果條件符合的話那么觸發(fā)一個trigger。舉個例子當車輛超越80公里每小時,那么觸發(fā)trigger。時間序列臨界監(jiān)測:字段的值在一個給定的時間段內超過了預設的臨界值,如果條件符合那么觸發(fā)一個觸發(fā)器。比方:在5分鐘類,時速超過80KM兩次及以上的車輛。ListingOne顯示了我們將使用的一個類型日志,其中包含的車輛數據信息有:車牌號、車輛行駛的速度以及數據獲取的位置。AB12360NorthcityBC12370SouthcityCD23440SouthcityDE12340East

cityEF12390SouthcityGH12350West

city這里將創(chuàng)立一個對應的XML文件,這將包含引入數據的模式。這個XML將用于日志文件的解析。XML的設計模式和對應的說明請見下表。XML文件和日志文件都存放在Spout可以隨時監(jiān)測的目錄下,用以關注文件的實時更新。而這個用例中的topology請見下列圖。Figure1:Storm中建立的topology,用以實現(xiàn)數據實時處理如下圖:FilelistenerSpout接收輸入日志并進行逐行的讀入,接著將數據發(fā)射給ThresoldCalculatorBolt進行更深一步的臨界值處理。一旦處理完成,被計算行的數據將發(fā)送給DBWriterBolt,然后由DBWriterBolt存入給數據庫。下面將對這個過程的實現(xiàn)進行詳細的解析。Spout的實現(xiàn)Spout以日志文件和XML描述文件作為接收對象。XML文件包含了與日志一致的設計模式。不妨設想一下一個例如日志文件,包含了車輛的車牌號、行駛速度、以及數據的捕獲位置。〔看下列圖〕Figure2:數據從日志文件到Spout的流程圖ListingTwo顯示了tuple對應的XML,其中指定了字段、將日志文件切割成字段的定界符以及字段的類型。XML文件以及數據都被保存到Spout指定的路徑。ListingTwo:用以描述日志文件的XML文件。<TUPLEINFO><FIELDLIST><FIELD><COLUMNNAME>vehicle_number</COLUMNNAME><COLUMNTYPE>string</COLUMNTYPE></FIELD><FIELD><COLUMNNAME>speed</COLUMNNAME><COLUMNTYPE>int</COLUMNTYPE></FIELD><FIELD><COLUMNNAME>location</COLUMNNAME><COLUMNTYPE>string</COLUMNTYPE></FIELD></FIELDLIST><DELIMITER>,</DELIMITER></TUPLEINFO>通過構造函數及它的參數Directory、PathSpout和TupleInfo對象創(chuàng)立Spout對象。TupleInfo儲存了日志文件的字段、定界符、字段的類型這些很必要的信息。這個對象通過XSTream序列化XML時建立。Spout的實現(xiàn)步驟:對文件的改變進行分開的監(jiān)聽,并監(jiān)視目錄下有無新日志文件添加。在數據得到了字段的說明后,將其轉換成tuple。聲明Spout和Bolt之間的分組,并決定tuple發(fā)送給Bolt的途徑。Spout的具體編碼在ListingThree中顯示。ListingThree:Spout中open、nextTuple和delcareOutputFields方法的邏輯。publicvoid

open(

Map

conf,

TopologyContext

context,SpoutOutputCollector

collector

)

{

_collector

=

collector;

try

{

fileReader

=

new

BufferedReader(new

FileReader(new

File(file)));

}

catch

(FileNotFoundException

e)

{

System.exit(1);

}

}

publicvoid

nextTuple()

{

protectedvoid

ListenFile(File

file)

{

Utils.sleep(2000);

RandomAccessFile

access

=

null;

String

line

=

null;

try

{

while

((line

=

access.readLine())

!=

null)

{

if

(line

!=null)

{

String[]

fields=null;

if

(tupleInfo.getDelimiter().equals("|"))

fields

=

line.split("\\"+tupleInfo.getDelimiter());

else

fields

=

line.split

(tupleInfo.getDelimiter());

if

(tupleInfo.getFieldList().size()

==

fields.length)

_collector.emit(new

Values(fields));

}

}

}

catch

(IOException

ex){

}

}

}

publicvoid

declareOutputFields(OutputFieldsDeclarer

declarer)

{

String[]

fieldsArr

=

new

String

[tupleInfo.getFieldList().size()];

for(int

i=0;

i<tupleInfo.getFieldList().size();

i++)

{

fieldsArr[i]

=

tupleInfo.getFieldList().get(i).getColumnName();

}

declarer.declare(new

Fields(fieldsArr));

}

declareOutputFileds〔〕決定了tuple發(fā)射的格式,這樣的話Bolt就可以用類似的方法將tuple譯碼。Spout持續(xù)對日志文件的數據的變更進行監(jiān)聽,一旦有添加Spout就會進行讀入并且發(fā)送給Bolt進行處理。Bolt的實現(xiàn)Spout的輸出結果將給予Bolt進行更深一步的處理。經過對用例的思考,我們的topology中需要如Figure3中的兩個Bolt。Figure3:Spout到Bolt的數據流程。ThresholdCalculatorBoltSpout將tuple發(fā)出,由ThresholdCalculatorBolt接收并進行臨界值處理。在這里,它將接收好幾項輸入進行檢查;分別是:臨界值檢查臨界值欄數檢查〔拆分成字段的數目〕臨界值數據類型〔拆分后字段的類型〕臨界值出現(xiàn)的頻數臨界值時間段檢查ListingFour中的類,定義用來保存這些值。ListingFour:ThresholdInfo類public

class

ThresholdInfo

implementsSerializable

{

private

String

action;

private

String

rule;

private

Object

thresholdValue;

private

int

thresholdColNumber;

private

Integer

timeWindow;

private

int

frequencyOfOccurence;

}

基于字段中提供的值,臨界值檢查將被ListingFive中的execute〔〕方法執(zhí)行。代碼大局部的功能是解析和接收值的檢測。ListingFive:臨界值檢測代碼段publicvoid

execute(Tuple

tuple,

BasicOutputCollector

collector)

{

if(tuple!=null)

{

List<Object>

inputTupleList

=

(List<Object>)

tuple.getValues();

int

thresholdColNum

=

thresholdInfo.getThresholdColNumber();

Object

thresholdValue

=

thresholdInfo.getThresholdValue();

String

thresholdDataType

=

tupleInfo.getFieldList().get(thresholdColNum-1).getColumnType();

Integer

timeWindow

=

thresholdInfo.getTimeWindow();

int

frequency

=

thresholdInfo.getFrequencyOfOccurence();

if(thresholdDataType.equalsIgnoreCase("string"))

{

String

valueToCheck

=

inputTupleList.get(thresholdColNum-1).toString();

String

frequencyChkOp

=

thresholdInfo.getAction();

if(timeWindow!=null)

{

long

curTime

=

System.currentTimeMillis();

long

diffInMinutes

=

(curTime-startTime)/(1000);

if(diffInMinutes>=timeWindow)

{

if(frequencyChkOp.equals("=="))

{

if(valueToCheck.equalsIgnoreCase(thresholdValue.toString()))

{

count.incrementAndGet();

if(count.get()

>

frequency)

splitAndEmit(inputTupleList,collector);

}

}

elseif(frequencyChkOp.equals("!="))

{

if(!valueToCheck.equalsIgnoreCase(thresholdValue.toString()))

{

count.incrementAndGet();

if(count.get()

>

frequency)

splitAndEmit(inputTupleList,collector);

}

}

else

System.out.println("Operator

not

supported");

}

}

else

{

if(frequencyChkOp.equals("=="))

{

if(valueToCheck.equalsIgnoreCase(thresholdValue.toString()))

{

count.incrementAndGet();

if(count.get()

>

frequency)

splitAndEmit(inputTupleList,collector);

}

}

elseif(frequencyChkOp.equals("!="))

{

if(!valueToCheck.equalsIgnoreCase(thresholdValue.toString()))

{

count.incrementAndGet();

if(count.get()

>

frequency)

splitAndEmit(inputTupleList,collector);

}

}

}

}

elseif(thresholdDataType.equalsIgnoreCase("int")

||

thresholdDataType.equalsIgnoreCase("double")

||

thresholdDataType.equalsIgnoreCase("float")

||

thresholdDataType.equalsIgnoreCase("long")

||

thresholdDataType.equalsIgnoreCase("short"))

{

String

frequencyChkOp

=

thresholdInfo.getAction();

if(timeWindow!=null)

{

long

valueToCheck

=

Long.parseLong(inputTupleList.get(thresholdColNum-1).toString());

long

curTime

=

System.currentTimeMillis();

long

diffInMinutes

=

(curTime-startTime)/(1000);

System.out.println("Difference

in

minutes="+diffInMinutes);

if(diffInMinutes>=timeWindow)

{

if(frequencyChkOp.equals("<"))

{

if(valueToCheck

<

Double.parseDouble(thresholdValue.toString()))

{

count.incrementAndGet();

if(count.get()

>

frequency)

splitAndEmit(inputTupleList,collector);

}

}

elseif(frequencyChkOp.equals(">"))

{

if(valueToCheck

>

Double.parseDouble(thresholdValue.toString()))

{

count.incrementAndGet();

if(count.get()

>

frequency)

splitAndEmit(inputTupleList,collector);

}

}

elseif(frequencyChkOp.equals("=="))

{

if(valueToCheck

==

Double.parseDouble(thresholdValue.toString()))

{

count.incrementAndGet();

if(count.get()

>

frequency)

splitAndEmit(inputTupleList,collector);

}

}

elseif(frequencyChkOp.equals("!="))

{

.

.

.

}

}

}

else

splitAndEmit(null,collector);

}

else

{

System.err.println("Emitting

null

in

bolt");

splitAndEmit(null,collector);

}

}

經由Bolt發(fā)送的的tuple將會傳遞到下一個對應的Bolt,在我們的用例中是DBWriterBolt。DBWriterBolt經過處理的tuple必須被持久化以便于觸發(fā)tigger或者更深層次的使用。DBWiterBolt做了這個持久化的工作并把tuple存入了數據庫。表的建立由prepare〔〕函數完成,這也將是topology調用的第一個方法。方法的編碼如ListingSix所示。ListingSix:建表編碼。publicvoid

prepare(

Map

StormConf,

TopologyContext

context

)

{

try

{

Class.forName(dbClass);

}

catch

(ClassNotFoundException

e)

{

System.out.println("Driver

not

found");

e.printStackTrace();

}

try

{

connection

driverManager.getConnection(

"jdbc:mysql://"+databaseIP+":"+databasePort+"/"+databaseName,

userName,

pwd);

connection.prepareStatement("DROP

TABLE

IF

EXISTS

"+tableName).execute();

StringBuilder

createQuery

=

new

StringBuilder(

"CREATE

TABLE

IF

NOT

EXISTS

"+tableName+"(");

for(Field

fields

:

tupleInfo.getFieldList())

{

if(fields.getColumnType().equalsIgnoreCase("String"))

createQuery.append(fields.getColumnName()+"

VARCHAR(500),");

else

createQuery.append(fields.getColumnName()+"

"+fields.getColumnType()+",");

}

createQuery.append("thresholdTimeStamp

timestamp)");

connection.prepareStatement(createQuery.toString()).execute();

//

Insert

Query

StringBuilder

insertQuery

=

new

StringBuilder("INSERT

INTO

"+tableName+"(");

String

tempCreateQuery

=

new

String();

for(Field

fields

:

tupleInfo.getFieldList())

{

insertQuery.append(fields.getColumnName()+",");

}

insertQuery.append("thresholdTimeStamp").append(")

values

(");

for(Field

fields

:

tupleInfo.getFieldList())

{

insertQuery.append("?,");

}

insertQuery.append("?)");

prepStatement

=

connection.prepareStatement(insertQuery.toString());

}

catch

(SQLException

e)

{

e.printStackTrace();

}

}

數據分批次的插入數據庫。插入的邏輯由ListtingSeven中的execute〔〕方法提供。大局部的編碼都是用來實現(xiàn)可能存在不同類型輸入的解析。ListingSeven:數據插入的代碼局部。publicvoid

execute(Tuple

tuple,

BasicOutputCollector

collector)

{

batchExecuted=false;

if(tuple!=null)

{

List<Object>

inputTupleList

=

(List<Object>)

tuple.getValues();

int

dbIndex=0;

for(int

i=0;i<tupleInfo.getFieldList().size();i++)

{

Field

field

=

tupleInfo.getFieldList().get(i);

try

{

dbIndex

=

i+1;

if(field.getColumnType().equalsIgnoreCase("String"))

prepStatement.setString(dbIndex,

inputTupleList.get(i).toString());

elseif(field.getColumnType().equalsIgnoreCase("int"))

prepStatement.setInt(dbIndex,

Integer.parseInt(inputTupleList.get(i).toString()));

elseif(field.getColumnType().equalsIgnoreCase("long"))

prepStatement.setLong(dbIndex,

Long.parseLong(inputTupleList.get(i).toString()));

elsei

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論