導航:首頁 > 源碼編譯 > 海量數據處理演算法

海量數據處理演算法

發布時間:2022-11-02 04:28:28

① 如何在海量數據中尋找和分析信息

如何在海量數據中尋找和分析信息
雖然大數據這個概念炒的非常火,但是大數據內部運作的邏輯,其實和我們傳統行業是比較類似的。比如如果傳統行業做實業的話,首先要有地基,你要有廠房,要有原材料,然後做加工,接下來設計成獨立的產品,給客戶帶來獨特的體驗。我們剛才講的開放雲就是大數據的地基和廠房,原材料就是在線上和線下產生的海量數據。這個是我們現在網路目前每天數據規模,2013年是25PB,這個數字在快速的變化,我們現在處理的能力已經提高一倍,數據上目前是50PB,增長了一倍,這個就是我們目前大資料庫要處理的數據的原材料。那麼有了原材料接下來該怎麼辦?
數據存儲
稍微看一下我們目前的大數據處理能力的三層架構。首先我們有海量的數據儲存能力,然後在這個基礎上,我們會做很多智能的分析,在這個基礎上我們做很多大數據的產品,我們會逐步的開放這三個方面的能力。先說一下海量數據,做實業的各位領導和專家們,如果你有原材料,最關鍵的下一步要做兩件事,一件事情是物流,第二件事情是原材料的標准化,要把原材料製成毛坯,在這個基礎上才能實現你的產能。
在海量數據的處理上是這樣的,網路三年前我們的架構是左邊這樣一個模式,在這個時候我們的數據傳輸,我們數據的儲存都是每個產品線有自己的方式,我們大概用了兩年的時間構建現在的數據儲存方式,解決兩個問題,一是數據的傳輸。現在網路很多產品線要實時產生大量海量的數據,這些數據都需要被實時的儲存一個地方。
但是這些產品線的數據格式都是異構的。我們做了非常多的標准化的工作,在基礎上形成了第一個海量數據儲存的產品,叫通用的數據倉庫。在使用這個通用的數據倉庫,我們第一個構建了實時的海量數據的傳輸平台,那麼任何一個產品線產生的數據都能夠實時的傳送到這個數據倉庫裡面。另外我們做了實時的數據標准化的工作,無論你的數據是什麼樣的格式,到我們數據倉庫裡面都以同樣的格式來儲存,有了這個物流,有了這個標准化,我們能夠在這個基礎上對數據進行更多的分析和加工。
那麼從這開始,網路的數據就開始在大數據部門進行各種各樣的處理過程。
數據分析
這個圖有點復雜,這是數據在網路的一個生命周期,這邊涉及到很多的技術細節,我會詳細一一介紹。這里我想強調的是整個數據的流程是全自動化的,從數據的生成,數據的傳輸,數據的標准化,到最後數據的歸類,數據的分析,都是全自動化的。這裡面我是很高興跟大家宣布,我們這套全自動化的流程,並形成了我們自己的產品。
這個產品我們現在有一個英文名字叫Query Engine,是一套標準的海量數據儲存方案,首先無論你的數據是什麼樣的,經過我們的處理會把它做成數據標准化,當你的數據實時生成,我們有非常好的數據傳輸框架,保證你的數據上傳到網路的開放雲,在上面進行建模,進行各種各樣可視化分析和決策的過程。我們已經成功了上傳分析一家合作企業將近10T的關於新能源方面的一些數據。網路非常歡迎傳統企業,如果你有海量的數據,你需要各種各樣的分析和操作的話,來接洽我們,來使用我們這款產品。
當這個數據已經被結構化儲存以後,我們希望在這個基礎上能夠進行各種各樣的智能化分析。就像傳統行業有自己的產品設計中心一樣,會對產品進行各種各樣的分析、排列組合,做各種各樣的實驗。在這個實驗的基礎上能夠產生出比較好的產品,能夠滿足用戶的需求。那麼在大數據部門也有這樣的需求,也需要有大數據產品的設計中心,在這個設計中心需要做很多實驗,做出適用於網路,適用於客戶的數據產品。所以這個產品經過四個月的努力,我們也已經對外開放。就是之前高級總監朱永忠介紹的,大家可以通過這個域名去訪問。
在這上面,我們大數據新產品的設計中心,可以進行很多實時的智能分析,做很多的實驗,對產品進行很多排列組合,看哪一種產品能夠最適合行業,滿足網路的需求。
大數據產品
那麼有了這樣的開放能力,下面給大家介紹在這個基礎上大數據部研發出來的三個大數據產品,希望能夠對在座的做實業的朋友有幫助。
第一個產品叫網路司南,專門針對於當企業發展到一定的階段,有了一定的品牌影響力的企業,能夠讓企業對自身的品牌有更客觀的了解,一共是三個方面。第一個是品牌分析,實際上你應該很想知道你的品牌在那個同行業里它的定位怎麼樣,周邊的人是如何看待你這個品牌的,對你這個品牌的口碑怎麼樣。而且我們把它做到基本上是實時的,你可以此時此刻知道大家對你品牌的口碑到底怎麼樣。
另外一方面,關注你的品牌,應該一定有一批已經比較忠實的用戶了,那麼這些人除了關注你的品牌,像剛才陳總講的一樣,除了關注你的品牌,他還關心什麼別的,他還對什麼樣的東西感興趣。這些我們通過基於統計的用戶畫像也能夠告訴你。
另外一個這些人是通過什麼渠道來了解到你的品牌,他是通過IPAD,是通過手機,通過看電視,還是通過PC、還是移動互聯網的瀏覽,這樣以後做營銷行為,就知道如何很快的影響到你的受眾,什麼樣的渠道是最有效的。那麼通過這幾個方式,我們都能夠告訴大家你的品牌到底處在什麼樣的狀態。
給大家看兩個司南在品牌上的應用。第一個叫代言人。很多品牌到了後期推廣的時候,都有找代言人的需求。什麼樣的代言人在你最想影響的受眾是最有號召力。之前是一些拍腦袋的決策,但是通過我們司南,通過海量的數據,通過海量的用戶行為分析,可以幫助你做一個決策的科學。實際上我們已經通過大數據的分析,可以產生出超過一千家的企業,他們最合適的代言人到底是哪一位。如果哪位老總也想嘗試自己品牌的話,可以和我們合作,我們可以告訴你,通過我們的數據,什麼樣的代言人,對於你的受眾會產生最大的品牌號召力。
另外一個是輿情分析,實際是跟品牌的口碑最像。你的企業里有一系列的產品,每一個產品可能有輕微的差異化,就像我們的化妝品一樣,每一款產品在用戶中的口碑到底怎麼樣,用戶喜歡這些產品什麼樣的功能,不喜歡這些產品什麼樣的功能。在之前,很多公司通過調研公司到各個城市,通過實時的訪談獲得一些統計數據。整個過程要耗費一個月左右。通過我們的輿情分析,幾乎可以實時告訴你這個答案,到底有多少用戶是喜歡這個功能,有多少用戶不喜歡這個功能。一個是通過一個月,一個是通過實時,這樣的話就有時間差了。這個時間差就是網路大數據能給傳統行業帶來的競爭力。
這是我們第一款基於大數據的工具,叫網路司南。
另外就是我們的預測平台產品。預測這個產品說的已經比較多了,這次想跟大家說的是,當我們發布了預測產品,並且取得了比較好的效果,很多公司,或者是一些政府部門會跟我們接洽,能不能幫我們也分析一下數據。比如景點希望我們幫他預測下一步七天的人流到底多還是不多。有的企業希望讓我們幫他預測下一步季度營業額是否能跟上一個季度匹配。
我們現在非常高興的把我們的預測平台能力開放出來,你不需要再去接洽網路的產品經理做這樣的事情,只要你使用我們的開放平台上傳你的數據,我們後面就會基於一系列各種各樣的數據分析,智能的演算法和網路後台自己的數據幫你做一些決策和分析。希望能夠幫助傳統企業做決策分析的時候能夠多一些科學的決策依據。
另外一個是我們的推薦。我們現在非常高興把我們這個能力也開放出來,非常可惜我們目前只面對互聯網的站長,站長可以定定製到底想用我們推薦的哪一方面的技術和性能、功能,非常靈活的為他的網站做推薦。但實際上我們最想做到的是把我們這套推薦引擎,和傳統行業結合起來,和很多實時推薦結合起來,在這塊也非常希望傳統的行業能跟我們接洽,把我們這種非常先進的線上推薦的技術和線下的場景結合起來,在線下發揮更大的功能。
三個產品只是揭開了冰山一角,在大數據這個方面,產品設計的想像力其實是很多很多的,我們在這方面也非常興奮,後面我們也會陸續推出一系列的大數據產品,請大家期待。網路願意與更多的人一起合作,在大數據這個方向上給網路,給行業、給用戶帶來更多的價值。

② 雲計算的海量數據挖掘工作是怎樣實現的

雲計算屬於新興技術領域,群英雲計算轉一篇關於問題的學術報告吧。對您應該有所幫助。

1引言

目前,人們正處於一個「無處不網、無時不網,人人上網、時時在線」的時代,圖靈獎獲得者吉姆·格雷(Jim Gray)認為,網路環境下每18個月產生的數據量等於過去幾千年的數據量之和。目前互聯網的數據具有海量增長、用戶廣泛、動態變化等特徵。2010年,QQ同時在線的用戶超過1億人,淘寶一年交易次數比上年增長150%,視頻服務Animoto在3天內通過Amazon將其服務能力迅速擴展至75萬用戶。

數據挖掘能夠發現隱含在大規模數據中的知識,提高信息服務的質量。如伊朗事件中twitter快速傳播假消息的識別、Amazon和淘寶網中商品關聯關系分析,以及優酷網中視頻個性化推薦等。海量數據挖掘在國家安全、國民經濟和現代服務業中具有廣泛應用,有助於提升網路環境下信息服務的質量,實現以人為本的信息服務。

從數據挖掘技術的發展歷史看,隨著互聯網的蓬勃發展,數據的規模越來越大,從KB級發展到TB甚至PB級海量數據;數據挖掘的對象也變得越來越復雜,從資料庫、到多媒體數據和復雜社會網路;數據挖掘的需求也從分類、聚類和關聯到復雜的演化和預測分析;挖掘過程中的交互方式從單機的人機交互發展到現在社會網路群體的交互。這種發展給數據挖掘帶來了巨大的挑戰:對於網路環境下產生的TB級和PB級的復雜數據,需要有高效的海量數據挖掘演算法;網路環境下大眾的廣泛參與,需要在數據挖掘演算法中能夠融入群體智慧;同時社會網路的迅速發展使得信息服務的個性化成為必然,要求能夠滿足即時組合的個性化挖掘服務。

雲計算是一種基於互聯網的、大眾參與的計算模式,其計算資源(包括計算能力、存儲能力、交互能力等)是動態、可伸縮、被虛擬化的,並以服務的方式提供 [1] 。具體表現在:雲計算的動態和可伸縮的計算能力為高效海量數據挖掘帶來可能性;雲計算環境下大眾參與的群體智能為研究集群體智慧的新的數據挖掘方法研究提供了環境;雲計算的服務化特徵使面向大眾的數據挖掘成為可能。同時,雲計算發展也離不開數據挖掘的支持,以搜索為例,基於雲計算的搜索包括網頁存儲、搜索處理和前端交互三大部分。數據挖掘在這幾部分中都有廣泛應用,例如網頁存儲中網頁去重、搜索處理中網頁排序和前端交互中的查詢建議,其中每部分都需要數據挖掘技術的支持。

因此,雲計算為海量和復雜數據對象的數據挖掘提供了基礎設施,為網路環境下面向大眾的數據挖掘服務帶來了機遇,同時也為數據挖掘研究提出了新的挑戰性課題。

下面將對並行編程模型、基於並行編程模型高效海量數據挖掘演算法,以及基於雲計算的海量數據挖掘服務相關研究進行綜述。

2並行編程模型相關方法

為了使用戶能夠通過簡單的開發來方便地達到並行計算的效果,研究人員提出了一系列的並行計算模型。並行計算模型在用戶需求和底層的硬體系統之間搭建橋梁使得並行演算法的表示變得更加直觀,對大規模數據的處理更加便捷。根據用戶使用硬體環境的不同,並行編程模型又可以分為在多核機器、GPU計算、大型計算機以及計算機集群上的多種類型。目前比較常用的並行編程介面和模型包括:

pThread介面[2]。pThread是在類Unix系統上進行多線程編程的通用API,為用戶提供了一系列對線程進行創建、管理和各類操作的函數,使用戶能夠方便地編寫多線程程序。

MPI模型[3]。MPI的全稱為消息傳遞介面(Message Passing Interface),它為用戶提供了一系列的介面,使用戶利用消息傳遞的方式來建立進程間的通信機制,從而方便地對各種演算法進行並行實現。

MapRece模型[4]。MapRece模型是由谷歌公司提出的並行編程框架,它首先為用戶提供分布式的文件系統,使用戶能方便地處理大規模數據;然後將所有的程序運算抽象為Map和Rece兩個基本操作,在Map階段模型將問題分解為更小規模的問題,並在集群的不同節點上執行,在Rece階段將結果歸並匯總。MapRece是一個簡單,但是非常有效的並行編程模型。

Pregel模型[5]。Pregel同樣是由谷歌公司提出的專門針對圖演算法的編程模型,能夠為大規模數據的圖演算法提供並行支持。一個典型的Pregel計算過程將在圖上進行一系列的超級步驟(SuperSteps),在每個超級步驟中,所有頂點的計算都並行地執行用戶定義的同一個函數,並通過一個「投票」機制來決定程序是否停止。

CUDA模型①。CUDA是由NVIDIA公司提出的一個基於GPU的並行計算模型。由於GPU在設計需求上與普通CPU不同,GPU通常被設計為能較慢地執行許多並發的線程,而不是較快的連續執行多個線程,這使得GPU在並行計算上有先天的優勢。CUDA為用戶提供了利用GPU計算的各種介面,使程序員能夠像在普通電腦上進行CPU編程那樣進行GPU程序的編寫。

此外還有OpenMP、PVM、OpenCL等各種並行編程模型和方法。這些並行編程和方法一般都提供了主流編程語言的實現,從而使得用戶能根據自身編程習慣來選用。

另一方面,隨著雲計算的不斷推廣,還出現了各種商用的並行計算/雲計算平台,為用戶提供並行計算服務。這其中比較著名的包括微軟的Azure平台、Amazon公司的EC2平台、IBM公司的藍雲平台、谷歌公司的Google App Engine等。各大IT公司也紛紛開發自己的並行計算模型/框架作為自身技術服務的基本平台,這使得並行計算技術得到了更加快速的發展。

3基於並行編程模型高效海量數據挖掘演算法研究

為了實現海量數據上的數據挖掘,大量分布式並行數據挖掘演算法被提出。Bhari et al[6]整理了一個十分詳盡的並行數據挖掘演算法文獻目錄,包含了關聯規則學習、分類、聚類、流數據挖掘四大類分布式數據挖掘演算法,同時還包括分布式系統、隱私保護等相關的研究工作。

MapRece並行編程模型具有強大的處理大規模數據的能力,因而是海量數據挖掘的理想編程平台。數據挖掘演算法通常需要遍歷訓練數據獲得相關的統計信息,用於求解或優化模型參數。在大規模數據上進行頻繁的數據訪問需要耗費大量運算時間。為了提高演算法效率,斯坦福大學Chu et al[7]提出了一種適用於大量機器學習演算法的通用並行編程方法。通過對經典的機器學習演算法進行分析可以發現,演算法學習過程中的運算都能轉化為若干在訓練數據集上的求和操作;求和操作可以獨立地在不同數據子集上進行,因此很容易在MapRece編程平台上實現並行化執行。將大規模的數據集分割為若乾子集分配給多個Mapper節點,在Mapper節點上分別執行各種求和操作得到中間結果,最後通過Rece節點將求和結果合並,實現學習演算法的並行執行。在該框架下,Chu et al實現了十種經典的數據挖掘演算法,包括線性回歸、樸素貝葉斯、神經網路、主成分分析和支持向量機等,相關成果在NIPS 2006會議上發表。

Ranger et al[8]提出了一個基於MapRece的應用程序編程介面Phoenix,支持多核和多處理器系統環境下的並行程序設計。Phoenix能夠進行緩存管理、錯誤恢復和並發管理。他們使用Phoenix實現了K-Means、主成分分析和線性回歸三種數據挖掘演算法。

Gillick et al[9]對單程學習(Single-pass)、迭代學習(Iterative Learning)和基於查詢的學習(Query-based Learning)三類機器學習演算法在MapRece框架下的性能分別做了評測。他們對並行學習演算法涉及到的如何在計算節點之間的共享數據、如何處理分布式存儲數據等問題進行了研究。

Mahout①是APS(Apache Software Foundation)旗下的一個開源數據挖掘項目,通過使用Apache Hadoop庫,可以實現大規模數據上的並行數據挖掘,包括分類、聚類、頻繁模式挖掘、回歸、降維等演算法,目前已經發布了四個版本。

4基於雲計算的海量數據挖掘服務研究

雲計算除了給用戶提供通用的並行編程模型和大規模數據處理能力之外,另一個重要的特點是為用戶提供開放的計算服務平台。在數據挖掘方向,現在也有一系列的系統被開發出來,面向公眾提供數據挖掘服務雲計算平台。

Talia et al[10]提出可以從四個層次提供雲計算數據挖掘服務:底層為組成數據挖掘演算法的基本步驟;第二層為單獨的數據挖掘服務,例如分類、聚類等;第三層為分布式的數據挖掘模式,例如並行分類、聚合式機器學習等;第四層為之前三層元素構成的完整的數據挖掘應用。在此設計基礎上,他們設計了基於雲計算的數據挖掘開放服務框架,並開發了一系列的數據挖掘服務系統,例如Weka4WS、Knowledge Grid、Mobile Data Mining Services、Mining@home等,用戶可以利用圖形界面定義自己的數據挖掘工作流,然後在平台上執行。

PDMiner[11]是由中國科學院計算技術研究所開發的基於Hadoop的並行分布式數據挖掘平台,該系統現在已經用於中國移動通信企業TB級實際數據的挖掘。PDMiner提供了一系列並行挖掘演算法和ETL操作組件,開發的ETL演算法絕大多數達到了線性加速比,同時具有很好的容錯性。PDMiner的開放式架構可以使用戶將演算法組件經過簡單配置方便地封裝載入到系統中。

此外,商業智能領域的各大公司也提供面向企業的大規模數據挖掘服務,例如微策略、IBM、Oracle等公司都擁有自己的基於雲計算的數據挖掘服務平台。

5總結和展望

通過雲計算的海量數據存儲和分布計算,為雲計算環境下的海量數據挖掘提供了新方法和手段,有效解決了海量數據挖掘的分布存儲和高效計算問題。開展基於雲計算特點的數據挖掘方法的研究,可以為更多、更復雜的海量數據挖掘問題提供新的理論與支撐工具。而作為傳統數據挖掘向雲計算的延伸和豐富,基於雲計算的海量數據挖掘將推動互聯網先進技術成果服務於大眾,是促進信息資源的深度分享和可持續利用的新方法、新途徑。

③ 大數據演算法有哪些

大數據是一個很廣的概念,並沒有大數據演算法這種東西,您估計想問的是大數據挖掘的演算法:
1.樸素貝葉斯
超級簡單,就像做一些數數的工作。如果條件獨立假設成立的話,NB將比鑒別模型收斂的更快,所以你只需要少量的訓練數據。即使條件獨立假設不成立,NB在實際中仍然表現出驚人的好。
2. 回歸
LR有很多方法來對模型正則化。比起NB的條件獨立性假設,LR不需要考慮樣本是否是相關的。與決策樹與支持向量機不同,NB有很好的概率解釋,且很容易利用新的訓練數據來更新模型(使用在線梯度下降法)。
3.決策樹
DT容易理解與解釋。DT是非參數的,所以你不需要擔心野點和數據是否線性可分的問題,此外,RF在很多分類問題中經常表現得最好,且速度快可擴展,也不像SVM那樣需要調整大量的參數,所以最近RF是一個非常流行的演算法。
4.支持向量機
很高的分類正確率,對過擬合有很好的理論保證,選取合適的核函數,面對特徵線性不可分的問題也可以表現得很好。SVM在維數通常很高的文本分類中非常的流行。

想要了解更多有關數據挖掘的信息,可以了解一下CDA數據分析師的課程。大數據分析師現在有專業的國際認證證書了, 「CDA 數據分析師」具體指在互聯網、金融、零售、咨詢、電信、醫療、旅遊等行業專門從事數據的採集、清洗、處理、分析並能製作業務報告、 提供決策的新型數據分析人才。全球 CDA 持證者秉承著先進商業數據分析的新理念,遵循著《CDA 數據分析師職業道德和行為准則》新規范,發 揮著自身數據科學專業能力,推動科技創新進步,助力經濟持續發展。點擊預約免費試聽課。

④ 海量移動互聯網數據 怎麼做數據分析

一、數據量過大,數據中什麼情況都可能存在。
如果說有10條數據,那麼大不了每條去逐一檢查,人為處理,如果有上百條數據,也可以考慮,如果數據上到千萬級別,甚至 過億,那不是手工能解決的了,必須通過工具或者程序進行處理,尤其海量的數據中,什麼情況都可能存在,例如,數據中某處格式出了問題,尤其在程序處理時, 前面還能正常處理,突然到了某個地方問題出現了,程序終止了。
二、軟硬體要求高,系統資源佔用率高。
對海量的數據進行處理,除了好的方法,最重要的就是合理使用工具,合理分配系統資源。一般情況,如果處理的數據過TB級,小型機是要考慮的,普通的機子如果有好的方法可以考慮,不過也必須加大CPU和內存,就象面對著千軍萬馬,光有勇氣沒有一兵一卒是很難取勝的。
三、要求很高的處理方法和技巧。
這也是本文的寫作目的所在,好的處理方法是一位工程師長期工作經驗的積累,也是個人的經驗的總結。沒有通用的處理方法,但有通用的原理和規則。
下面我們來詳細介紹一下處理海量數據的經驗和技巧:
一、選用優秀的資料庫工具
現在的資料庫工具廠家比較多,對海量數據的處理對所使用的資料庫工具要求比較高,一般使用Oracle或者DB2,微軟 公司最近發布的SQL Server 2005性能也不錯。另外在BI領域:資料庫,數據倉庫,多維資料庫,數據挖掘等相關工具也要進行選擇,象好的ETL工具和好的OLAP工具都十分必要, 例如Informatic,Eassbase等。筆者在實際數據分析項目中,對每天6000萬條的日誌數據進行處理,使用SQL Server 2000需要花費6小時,而使用SQL Server 2005則只需要花費3小時。
二、編寫優良的程序代碼
處理數據離不開優秀的程序代碼,尤其在進行復雜數據處理時,必須使用程序。好的程序代碼對數據的處理至關重要,這不僅僅是數據處理准確度的問題,更是數據處理效率的問題。良好的程序代碼應該包含好的演算法,包含好的處理流程,包含好的效率,包含好的異常處理機制等。
三、對海量數據進行分區操作
對海量數據進行分區操作十分必要,例如針對按年份存取的數據,我們可以按年進行分區,不同的資料庫有不同的分區方式,不 過處理機制大體相同。例如SQL Server的資料庫分區是將不同的數據存於不同的文件組下,而不同的文件組存於不同的磁碟分區下,這樣將數據分散開,減小磁碟I/O,減小了系統負荷, 而且還可以將日誌,索引等放於不同的分區下。
四、建立廣泛的索引
對海量的數據處理,對大表建立索引是必行的,建立索引要考慮到具體情況,例如針對大表的分組、排序等欄位,都要建立相應 索引,一般還可以建立復合索引,對經常插入的表則建立索引時要小心,筆者在處理數據時,曾經在一個ETL流程中,當插入表時,首先刪除索引,然後插入完 畢,建立索引,並實施聚合操作,聚合完成後,再次插入前還是刪除索引,所以索引要用到好的時機,索引的填充因子和聚集、非聚集索引都要考慮。
五、建立緩存機制
當數據量增加時,一般的處理工具都要考慮到緩存問題。緩存大小設置的好差也關繫到數據處理的成敗,例如,筆者在處理2億條數據聚合操作時,緩存設置為100000條/Buffer,這對於這個級別的數據量是可行的。
六、加大虛擬內存
如果系統資源有限,內存提示不足,則可以靠增加虛擬內存來解決。筆者在實際項目中曾經遇到針對18億條的數據進行處理, 內存為1GB,1個P42.4G的CPU,對這么大的數據量進行聚合操作是有問題的,提示內存不足,那麼採用了加大虛擬內存的方法來解決,在6塊磁碟分區 上分別建立了6個4096M的磁碟分區,用於虛擬內存,這樣虛擬的內存則增加為 4096*6 + 1024 =25600 M,解決了數據處理中的內存不足問題。
七、分批處理
海量數據處理難因為數據量大,那麼解決海量數據處理難的問題其中一個技巧是減少數據量。可以對海量數據分批處理,然後處 理後的數據再進行合並操作,這樣逐個擊破,有利於小數據量的處理,不至於面對大數據量帶來的問題,不過這種方法也要因時因勢進行,如果不允許拆分數據,還 需要另想辦法。不過一般的數據按天、按月、按年等存儲的,都可以採用先分後合的方法,對數據進行分開處理。
八、使用臨時表和中間表
數據量增加時,處理中要考慮提前匯總。這樣做的目的是化整為零,大表變小表,分塊處理完成後,再利用一定的規則進行合 並,處理過程中的臨時表的使用和中間結果的保存都非常重要,如果對於超海量的數據,大表處理不了,只能拆分為多個小表。如果處理過程中需要多步匯總操作, 可按匯總步驟一步步來,不要一條語句完成,一口氣吃掉一個胖子。
九、優化查詢SQL語句
在對海量數據進行查詢處理過程中,查詢的SQL語句的性能對查詢效率的影響是非常大的,編寫高效優良的SQL腳本和存儲 過程是資料庫工作人員的職責,也是檢驗資料庫工作人員水平的一個標准,在對SQL語句的編寫過程中,例如減少關聯,少用或不用游標,設計好高效的資料庫表 結構等都十分必要。筆者在工作中試著對1億行的數據使用游標,運行3個小時沒有出結果,這是一定要改用程序處理了。
十、使用文本格式進行處理
對一般的數據處理可以使用資料庫,如果對復雜的數據處理,必須藉助程序,那麼在程序操作資料庫和程序操作文本之間選擇, 是一定要選擇程序操作文本的,原因為:程序操作文本速度快;對文本進行處理不容易出錯;文本的存儲不受限制等。例如一般的海量的網路日誌都是文本格式或者 csv格式(文本格式),對它進行處理牽扯到數據清洗,是要利用程序進行處理的,而不建議導入資料庫再做清洗。
十一、定製強大的清洗規則和出錯處理機制
海量數據中存在著不一致性,極有可能出現某處的瑕疵。例如,同樣的數據中的時間欄位,有的可能為非標準的時間,出現的原因可能為應用程序的錯誤,系統的錯誤等,這是在進行數據處理時,必須制定強大的數據清洗規則和出錯處理機制。
十二、建立視圖或者物化視圖
視圖中的數據來源於基表,對海量數據的處理,可以將數據按一定的規則分散到各個基表中,查詢或處理過程中可以基於視圖進行,這樣分散了磁碟I/O,正如10根繩子吊著一根柱子和一根吊著一根柱子的區別。
十三、避免使用32位機子(極端情況)
目前的計算機很多都是32位的,那麼編寫的程序對內存的需要便受限制,而很多的海量數據處理是必須大量消耗內存的,這便要求更好性能的機子,其中對位數的限制也十分重要。
十四、考慮操作系統問題
海量數據處理過程中,除了對資料庫,處理程序等要求比較高以外,對操作系統的要求也放到了重要的位置,一般是必須使用伺服器的,而且對系統的安全性和穩定性等要求也比較高。尤其對操作系統自身的緩存機制,臨時空間的處理等問題都需要綜合考慮。
十五、使用數據倉庫和多維資料庫存儲
數據量加大是一定要考慮OLAP的,傳統的報表可能5、6個小時出來結果,而基於Cube的查詢可能只需要幾分鍾,因此處理海量數據的利器是OLAP多維分析,即建立數據倉庫,建立多維數據集,基於多維數據集進行報表展現和數據挖掘等。
十六、使用采樣數據,進行數據挖掘
基於海量數據的數據挖掘正在逐步興起,面對著超海量的數據,一般的挖掘軟體或演算法往往採用數據抽樣的方式進行處理,這樣 的誤差不會很高,大大提高了處理效率和處理的成功率。一般采樣時要注意數據的完整性和,防止過大的偏差。筆者曾經對1億2千萬行的表數據進行采樣,抽取出 400萬行,經測試軟體測試處理的誤差為千分之五,客戶可以接受。
還有一些方法,需要在不同的情況和場合下運用,例如使用代理鍵等操作,這樣的好處是加快了聚合時間,因為對數值型的聚合比對字元型的聚合快得多。類似的情況需要針對不同的需求進行處理。
海量數據是發展趨勢,對數據分析和挖掘也越來越重要,從海量數據中提取有用信息重要而緊迫,這便要求處理要准確,精度要高,而且處理時間要短,得到有價值信息要快,所以,對海量數據的研究很有前途,也很值得進行廣泛深入的研究。
海量數據處理專題(一)——開篇
大數據量的問題是很多面試筆試中經常出現的問題,比如 google 騰訊 這樣的一些涉及到海量數據的公司經常會問到。
下面的方法是我對海量數據的處理方法進行了一個一般性的總結,當然這些方法可能並不能完全覆蓋所有的問題,但是這樣 的一些方法也基本可以處理絕大多數遇到的問題。下面的一些問題基本直接來源於公司的面試筆試題目,方法不一定最優,如果你有更好的處理方法,歡迎與我討 論。
本貼從解決這類問題的方法入手,開辟一系列專題來解決海量數據問題。擬包含 以下幾個方面。
Bloom Filter
Hash
Bit-Map
堆(Heap)
雙層桶劃分
資料庫索引
倒排索引(Inverted Index)
外排序
Trie樹
MapRece
在這些解決方案之上,再藉助一定的例子來剖析海量數據處理問題的解決方案。
最簡單的一點專業的事情讓專業的人去做吧 招聘懂的人來做才王道

⑤ 海量數據的數據結構和演算法,該怎麼處理

業務建模、模式、松耦合,高內聚 對付海量並發、存儲和運算就需要優秀的演算法和數據結構了 還有數據散列阿等等

⑥ 五種大數據處理架構

五種大數據處理架構
大數據是收集、整理、處理大容量數據集,並從中獲得見解所需的非傳統戰略和技術的總稱。雖然處理數據所需的計算能力或存儲容量早已超過一台計算機的上限,但這種計算類型的普遍性、規模,以及價值在最近幾年才經歷了大規模擴展。
本文將介紹大數據系統一個最基本的組件:處理框架。處理框架負責對系統中的數據進行計算,例如處理從非易失存儲中讀取的數據,或處理剛剛攝入到系統中的數據。數據的計算則是指從大量單一數據點中提取信息和見解的過程。
下文將介紹這些框架:
· 僅批處理框架:
Apache Hadoop
· 僅流處理框架:
Apache Storm
Apache Samza
· 混合框架:
Apache Spark
Apache Flink
大數據處理框架是什麼?
處理框架和處理引擎負責對數據系統中的數據進行計算。雖然「引擎」和「框架」之間的區別沒有什麼權威的定義,但大部分時候可以將前者定義為實際負責處理數據操作的組件,後者則可定義為承擔類似作用的一系列組件。
例如Apache Hadoop可以看作一種以MapRece作為默認處理引擎的處理框架。引擎和框架通常可以相互替換或同時使用。例如另一個框架Apache Spark可以納入Hadoop並取代MapRece。組件之間的這種互操作性是大數據系統靈活性如此之高的原因之一。
雖然負責處理生命周期內這一階段數據的系統通常都很復雜,但從廣義層面來看它們的目標是非常一致的:通過對數據執行操作提高理解能力,揭示出數據蘊含的模式,並針對復雜互動獲得見解。
為了簡化這些組件的討論,我們會通過不同處理框架的設計意圖,按照所處理的數據狀態對其進行分類。一些系統可以用批處理方式處理數據,一些系統可以用流方式處理連續不斷流入系統的數據。此外還有一些系統可以同時處理這兩類數據。
在深入介紹不同實現的指標和結論之前,首先需要對不同處理類型的概念進行一個簡單的介紹。
批處理系統
批處理在大數據世界有著悠久的歷史。批處理主要操作大容量靜態數據集,並在計算過程完成後返回結果。
批處理模式中使用的數據集通常符合下列特徵…
· 有界:批處理數據集代表數據的有限集合
· 持久:數據通常始終存儲在某種類型的持久存儲位置中
· 大量:批處理操作通常是處理極為海量數據集的唯一方法
批處理非常適合需要訪問全套記錄才能完成的計算工作。例如在計算總數和平均數時,必須將數據集作為一個整體加以處理,而不能將其視作多條記錄的集合。這些操作要求在計算進行過程中數據維持自己的狀態。
需要處理大量數據的任務通常最適合用批處理操作進行處理。無論直接從持久存儲設備處理數據集,或首先將數據集載入內存,批處理系統在設計過程中就充分考慮了數據的量,可提供充足的處理資源。由於批處理在應對大量持久數據方面的表現極為出色,因此經常被用於對歷史數據進行分析。
大量數據的處理需要付出大量時間,因此批處理不適合對處理時間要求較高的場合。
Apache Hadoop
Apache Hadoop是一種專用於批處理的處理框架。Hadoop是首個在開源社區獲得極大關注的大數據框架。基於谷歌有關海量數據處理所發表的多篇論文與經驗的Hadoop重新實現了相關演算法和組件堆棧,讓大規模批處理技術變得更易用。
新版Hadoop包含多個組件,即多個層,通過配合使用可處理批數據:
· HDFS:HDFS是一種分布式文件系統層,可對集群節點間的存儲和復制進行協調。HDFS確保了無法避免的節點故障發生後數據依然可用,可將其用作數據來源,可用於存儲中間態的處理結果,並可存儲計算的最終結果。
· YARN:YARN是Yet Another Resource Negotiator(另一個資源管理器)的縮寫,可充當Hadoop堆棧的集群協調組件。該組件負責協調並管理底層資源和調度作業的運行。通過充當集群資源的介面,YARN使得用戶能在Hadoop集群中使用比以往的迭代方式運行更多類型的工作負載。
· MapRece:MapRece是Hadoop的原生批處理引擎。
批處理模式
Hadoop的處理功能來自MapRece引擎。MapRece的處理技術符合使用鍵值對的map、shuffle、rece演算法要求。基本處理過程包括:
· 從HDFS文件系統讀取數據集
· 將數據集拆分成小塊並分配給所有可用節點
· 針對每個節點上的數據子集進行計算(計算的中間態結果會重新寫入HDFS)
· 重新分配中間態結果並按照鍵進行分組
· 通過對每個節點計算的結果進行匯總和組合對每個鍵的值進行「Recing」
· 將計算而來的最終結果重新寫入 HDFS
優勢和局限
由於這種方法嚴重依賴持久存儲,每個任務需要多次執行讀取和寫入操作,因此速度相對較慢。但另一方面由於磁碟空間通常是伺服器上最豐富的資源,這意味著MapRece可以處理非常海量的數據集。同時也意味著相比其他類似技術,Hadoop的MapRece通常可以在廉價硬體上運行,因為該技術並不需要將一切都存儲在內存中。MapRece具備極高的縮放潛力,生產環境中曾經出現過包含數萬個節點的應用。
MapRece的學習曲線較為陡峭,雖然Hadoop生態系統的其他周邊技術可以大幅降低這一問題的影響,但通過Hadoop集群快速實現某些應用時依然需要注意這個問題。
圍繞Hadoop已經形成了遼闊的生態系統,Hadoop集群本身也經常被用作其他軟體的組成部件。很多其他處理框架和引擎通過與Hadoop集成也可以使用HDFS和YARN資源管理器。
總結
Apache Hadoop及其MapRece處理引擎提供了一套久經考驗的批處理模型,最適合處理對時間要求不高的非常大規模數據集。通過非常低成本的組件即可搭建完整功能的Hadoop集群,使得這一廉價且高效的處理技術可以靈活應用在很多案例中。與其他框架和引擎的兼容與集成能力使得Hadoop可以成為使用不同技術的多種工作負載處理平台的底層基礎。
流處理系統
流處理系統會對隨時進入系統的數據進行計算。相比批處理模式,這是一種截然不同的處理方式。流處理方式無需針對整個數據集執行操作,而是對通過系統傳輸的每個數據項執行操作。
· 流處理中的數據集是「無邊界」的,這就產生了幾個重要的影響:
· 完整數據集只能代表截至目前已經進入到系統中的數據總量。
· 工作數據集也許更相關,在特定時間只能代表某個單一數據項。
處理工作是基於事件的,除非明確停止否則沒有「盡頭」。處理結果立刻可用,並會隨著新數據的抵達繼續更新。
流處理系統可以處理幾乎無限量的數據,但同一時間只能處理一條(真正的流處理)或很少量(微批處理,Micro-batch Processing)數據,不同記錄間只維持最少量的狀態。雖然大部分系統提供了用於維持某些狀態的方法,但流處理主要針對副作用更少,更加功能性的處理(Functional processing)進行優化。
功能性操作主要側重於狀態或副作用有限的離散步驟。針對同一個數據執行同一個操作會或略其他因素產生相同的結果,此類處理非常適合流處理,因為不同項的狀態通常是某些困難、限制,以及某些情況下不需要的結果的結合體。因此雖然某些類型的狀態管理通常是可行的,但這些框架通常在不具備狀態管理機制時更簡單也更高效。
此類處理非常適合某些類型的工作負載。有近實時處理需求的任務很適合使用流處理模式。分析、伺服器或應用程序錯誤日誌,以及其他基於時間的衡量指標是最適合的類型,因為對這些領域的數據變化做出響應對於業務職能來說是極為關鍵的。流處理很適合用來處理必須對變動或峰值做出響應,並且關注一段時間內變化趨勢的數據。
Apache Storm
Apache Storm是一種側重於極低延遲的流處理框架,也許是要求近實時處理的工作負載的最佳選擇。該技術可處理非常大量的數據,通過比其他解決方案更低的延遲提供結果。
流處理模式
Storm的流處理可對框架中名為Topology(拓撲)的DAG(Directed Acyclic Graph,有向無環圖)進行編排。這些拓撲描述了當數據片段進入系統後,需要對每個傳入的片段執行的不同轉換或步驟。
拓撲包含:
· Stream:普通的數據流,這是一種會持續抵達系統的無邊界數據。
· Spout:位於拓撲邊緣的數據流來源,例如可以是API或查詢等,從這里可以產生待處理的數據。
· Bolt:Bolt代表需要消耗流數據,對其應用操作,並將結果以流的形式進行輸出的處理步驟。Bolt需要與每個Spout建立連接,隨後相互連接以組成所有必要的處理。在拓撲的尾部,可以使用最終的Bolt輸出作為相互連接的其他系統的輸入。
Storm背後的想法是使用上述組件定義大量小型的離散操作,隨後將多個組件組成所需拓撲。默認情況下Storm提供了「至少一次」的處理保證,這意味著可以確保每條消息至少可以被處理一次,但某些情況下如果遇到失敗可能會處理多次。Storm無法確保可以按照特定順序處理消息。
為了實現嚴格的一次處理,即有狀態處理,可以使用一種名為Trident的抽象。嚴格來說不使用Trident的Storm通常可稱之為Core Storm。Trident會對Storm的處理能力產生極大影響,會增加延遲,為處理提供狀態,使用微批模式代替逐項處理的純粹流處理模式。
為避免這些問題,通常建議Storm用戶盡可能使用Core Storm。然而也要注意,Trident對內容嚴格的一次處理保證在某些情況下也比較有用,例如系統無法智能地處理重復消息時。如果需要在項之間維持狀態,例如想要計算一個小時內有多少用戶點擊了某個鏈接,此時Trident將是你唯一的選擇。盡管不能充分發揮框架與生俱來的優勢,但Trident提高了Storm的靈活性。
Trident拓撲包含:
· 流批(Stream batch):這是指流數據的微批,可通過分塊提供批處理語義。
· 操作(Operation):是指可以對數據執行的批處理過程。
優勢和局限
目前來說Storm可能是近實時處理領域的最佳解決方案。該技術可以用極低延遲處理數據,可用於希望獲得最低延遲的工作負載。如果處理速度直接影響用戶體驗,例如需要將處理結果直接提供給訪客打開的網站頁面,此時Storm將會是一個很好的選擇。
Storm與Trident配合使得用戶可以用微批代替純粹的流處理。雖然藉此用戶可以獲得更大靈活性打造更符合要求的工具,但同時這種做法會削弱該技術相比其他解決方案最大的優勢。話雖如此,但多一種流處理方式總是好的。
Core Storm無法保證消息的處理順序。Core Storm為消息提供了「至少一次」的處理保證,這意味著可以保證每條消息都能被處理,但也可能發生重復。Trident提供了嚴格的一次處理保證,可以在不同批之間提供順序處理,但無法在一個批內部實現順序處理。
在互操作性方面,Storm可與Hadoop的YARN資源管理器進行集成,因此可以很方便地融入現有Hadoop部署。除了支持大部分處理框架,Storm還可支持多種語言,為用戶的拓撲定義提供了更多選擇。
總結
對於延遲需求很高的純粹的流處理工作負載,Storm可能是最適合的技術。該技術可以保證每條消息都被處理,可配合多種編程語言使用。由於Storm無法進行批處理,如果需要這些能力可能還需要使用其他軟體。如果對嚴格的一次處理保證有比較高的要求,此時可考慮使用Trident。不過這種情況下其他流處理框架也許更適合。
Apache Samza
Apache Samza是一種與Apache Kafka消息系統緊密綁定的流處理框架。雖然Kafka可用於很多流處理系統,但按照設計,Samza可以更好地發揮Kafka獨特的架構優勢和保障。該技術可通過Kafka提供容錯、緩沖,以及狀態存儲。
Samza可使用YARN作為資源管理器。這意味著默認情況下需要具備Hadoop集群(至少具備HDFS和YARN),但同時也意味著Samza可以直接使用YARN豐富的內建功能。
流處理模式
Samza依賴Kafka的語義定義流的處理方式。Kafka在處理數據時涉及下列概念:
· Topic(話題):進入Kafka系統的每個數據流可稱之為一個話題。話題基本上是一種可供消耗方訂閱的,由相關信息組成的數據流。
· Partition(分區):為了將一個話題分散至多個節點,Kafka會將傳入的消息劃分為多個分區。分區的劃分將基於鍵(Key)進行,這樣可以保證包含同一個鍵的每條消息可以劃分至同一個分區。分區的順序可獲得保證。
· Broker(代理):組成Kafka集群的每個節點也叫做代理。
· Procer(生成方):任何向Kafka話題寫入數據的組件可以叫做生成方。生成方可提供將話題劃分為分區所需的鍵。
· Consumer(消耗方):任何從Kafka讀取話題的組件可叫做消耗方。消耗方需要負責維持有關自己分支的信息,這樣即可在失敗後知道哪些記錄已經被處理過了。
由於Kafka相當於永恆不變的日誌,Samza也需要處理永恆不變的數據流。這意味著任何轉換創建的新數據流都可被其他組件所使用,而不會對最初的數據流產生影響。
優勢和局限
乍看之下,Samza對Kafka類查詢系統的依賴似乎是一種限制,然而這也可以為系統提供一些獨特的保證和功能,這些內容也是其他流處理系統不具備的。
例如Kafka已經提供了可以通過低延遲方式訪問的數據存儲副本,此外還可以為每個數據分區提供非常易用且低成本的多訂閱者模型。所有輸出內容,包括中間態的結果都可寫入到Kafka,並可被下游步驟獨立使用。
這種對Kafka的緊密依賴在很多方面類似於MapRece引擎對HDFS的依賴。雖然在批處理的每個計算之間對HDFS的依賴導致了一些嚴重的性能問題,但也避免了流處理遇到的很多其他問題。
Samza與Kafka之間緊密的關系使得處理步驟本身可以非常鬆散地耦合在一起。無需事先協調,即可在輸出的任何步驟中增加任意數量的訂閱者,對於有多個團隊需要訪問類似數據的組織,這一特性非常有用。多個團隊可以全部訂閱進入系統的數據話題,或任意訂閱其他團隊對數據進行過某些處理後創建的話題。這一切並不會對資料庫等負載密集型基礎架構造成額外的壓力。
直接寫入Kafka還可避免回壓(Backpressure)問題。回壓是指當負載峰值導致數據流入速度超過組件實時處理能力的情況,這種情況可能導致處理工作停頓並可能丟失數據。按照設計,Kafka可以將數據保存很長時間,這意味著組件可以在方便的時候繼續進行處理,並可直接重啟動而無需擔心造成任何後果。
Samza可以使用以本地鍵值存儲方式實現的容錯檢查點系統存儲數據。這樣Samza即可獲得「至少一次」的交付保障,但面對由於數據可能多次交付造成的失敗,該技術無法對匯總後狀態(例如計數)提供精確恢復。
Samza提供的高級抽象使其在很多方面比Storm等系統提供的基元(Primitive)更易於配合使用。目前Samza只支持JVM語言,這意味著它在語言支持方面不如Storm靈活。
總結
對於已經具備或易於實現Hadoop和Kafka的環境,Apache Samza是流處理工作負載一個很好的選擇。Samza本身很適合有多個團隊需要使用(但相互之間並不一定緊密協調)不同處理階段的多個數據流的組織。Samza可大幅簡化很多流處理工作,可實現低延遲的性能。如果部署需求與當前系統不兼容,也許並不適合使用,但如果需要極低延遲的處理,或對嚴格的一次處理語義有較高需求,此時依然適合考慮。
混合處理系統:批處理和流處理
一些處理框架可同時處理批處理和流處理工作負載。這些框架可以用相同或相關的組件和API處理兩種類型的數據,藉此讓不同的處理需求得以簡化。
如你所見,這一特性主要是由Spark和Flink實現的,下文將介紹這兩種框架。實現這樣的功能重點在於兩種不同處理模式如何進行統一,以及要對固定和不固定數據集之間的關系進行何種假設。
雖然側重於某一種處理類型的項目會更好地滿足具體用例的要求,但混合框架意在提供一種數據處理的通用解決方案。這種框架不僅可以提供處理數據所需的方法,而且提供了自己的集成項、庫、工具,可勝任圖形分析、機器學習、互動式查詢等多種任務。
Apache Spark
Apache Spark是一種包含流處理能力的下一代批處理框架。與Hadoop的MapRece引擎基於各種相同原則開發而來的Spark主要側重於通過完善的內存計算和處理優化機制加快批處理工作負載的運行速度。
Spark可作為獨立集群部署(需要相應存儲層的配合),或可與Hadoop集成並取代MapRece引擎。
批處理模式
與MapRece不同,Spark的數據處理工作全部在內存中進行,只在一開始將數據讀入內存,以及將最終結果持久存儲時需要與存儲層交互。所有中間態的處理結果均存儲在內存中。
雖然內存中處理方式可大幅改善性能,Spark在處理與磁碟有關的任務時速度也有很大提升,因為通過提前對整個任務集進行分析可以實現更完善的整體式優化。為此Spark可創建代表所需執行的全部操作,需要操作的數據,以及操作和數據之間關系的Directed Acyclic Graph(有向無環圖),即DAG,藉此處理器可以對任務進行更智能的協調。
為了實現內存中批計算,Spark會使用一種名為Resilient Distributed Dataset(彈性分布式數據集),即RDD的模型來處理數據。這是一種代表數據集,只位於內存中,永恆不變的結構。針對RDD執行的操作可生成新的RDD。每個RDD可通過世系(Lineage)回溯至父級RDD,並最終回溯至磁碟上的數據。Spark可通過RDD在無需將每個操作的結果寫回磁碟的前提下實現容錯。
流處理模式
流處理能力是由Spark Streaming實現的。Spark本身在設計上主要面向批處理工作負載,為了彌補引擎設計和流處理工作負載特徵方面的差異,Spark實現了一種叫做微批(Micro-batch)*的概念。在具體策略方面該技術可以將數據流視作一系列非常小的「批」,藉此即可通過批處理引擎的原生語義進行處理。
Spark Streaming會以亞秒級增量對流進行緩沖,隨後這些緩沖會作為小規模的固定數據集進行批處理。這種方式的實際效果非常好,但相比真正的流處理框架在性能方面依然存在不足。
優勢和局限
使用Spark而非Hadoop MapRece的主要原因是速度。在內存計算策略和先進的DAG調度等機制的幫助下,Spark可以用更快速度處理相同的數據集。
Spark的另一個重要優勢在於多樣性。該產品可作為獨立集群部署,或與現有Hadoop集群集成。該產品可運行批處理和流處理,運行一個集群即可處理不同類型的任務。
除了引擎自身的能力外,圍繞Spark還建立了包含各種庫的生態系統,可為機器學習、互動式查詢等任務提供更好的支持。相比MapRece,Spark任務更是「眾所周知」地易於編寫,因此可大幅提高生產力。
為流處理系統採用批處理的方法,需要對進入系統的數據進行緩沖。緩沖機制使得該技術可以處理非常大量的傳入數據,提高整體吞吐率,但等待緩沖區清空也會導致延遲增高。這意味著Spark Streaming可能不適合處理對延遲有較高要求的工作負載。
由於內存通常比磁碟空間更貴,因此相比基於磁碟的系統,Spark成本更高。然而處理速度的提升意味著可以更快速完成任務,在需要按照小時數為資源付費的環境中,這一特性通常可以抵消增加的成本。
Spark內存計算這一設計的另一個後果是,如果部署在共享的集群中可能會遇到資源不足的問題。相比HadoopMapRece,Spark的資源消耗更大,可能會對需要在同一時間使用集群的其他任務產生影響。從本質來看,Spark更不適合與Hadoop堆棧的其他組件共存一處。
總結
Spark是多樣化工作負載處理任務的最佳選擇。Spark批處理能力以更高內存佔用為代價提供了無與倫比的速度優勢。對於重視吞吐率而非延遲的工作負載,則比較適合使用Spark Streaming作為流處理解決方案。
Apache Flink
Apache Flink是一種可以處理批處理任務的流處理框架。該技術可將批處理數據視作具備有限邊界的數據流,藉此將批處理任務作為流處理的子集加以處理。為所有處理任務採取流處理為先的方法會產生一系列有趣的副作用。
這種流處理為先的方法也叫做Kappa架構,與之相對的是更加被廣為人知的Lambda架構(該架構中使用批處理作為主要處理方法,使用流作為補充並提供早期未經提煉的結果)。Kappa架構中會對一切進行流處理,藉此對模型進行簡化,而這一切是在最近流處理引擎逐漸成熟後才可行的。
流處理模型
Flink的流處理模型在處理傳入數據時會將每一項視作真正的數據流。Flink提供的DataStream API可用於處理無盡的數據流。Flink可配合使用的基本組件包括:
· Stream(流)是指在系統中流轉的,永恆不變的無邊界數據集
· Operator(操作方)是指針對數據流執行操作以產生其他數據流的功能
· Source(源)是指數據流進入系統的入口點
· Sink(槽)是指數據流離開Flink系統後進入到的位置,槽可以是資料庫或到其他系統的連接器
為了在計算過程中遇到問題後能夠恢復,流處理任務會在預定時間點創建快照。為了實現狀態存儲,Flink可配合多種狀態後端系統使用,具體取決於所需實現的復雜度和持久性級別。
此外Flink的流處理能力還可以理解「事件時間」這一概念,這是指事件實際發生的時間,此外該功能還可以處理會話。這意味著可以通過某種有趣的方式確保執行順序和分組。
批處理模型
Flink的批處理模型在很大程度上僅僅是對流處理模型的擴展。此時模型不再從持續流中讀取數據,而是從持久存儲中以流的形式讀取有邊界的數據集。Flink會對這些處理模型使用完全相同的運行時。
Flink可以對批處理工作負載實現一定的優化。例如由於批處理操作可通過持久存儲加以支持,Flink可以不對批處理工作負載創建快照。數據依然可以恢復,但常規處理操作可以執行得更快。
另一個優化是對批處理任務進行分解,這樣即可在需要的時候調用不同階段和組件。藉此Flink可以與集群的其他用戶更好地共存。對任務提前進行分析使得Flink可以查看需要執行的所有操作、數據集的大小,以及下游需要執行的操作步驟,藉此實現進一步的優化。
優勢和局限
Flink目前是處理框架領域一個獨特的技術。雖然Spark也可以執行批處理和流處理,但Spark的流處理採取的微批架構使其無法適用於很多用例。Flink流處理為先的方法可提供低延遲,高吞吐率,近乎逐項處理的能力。
Flink的很多組件是自行管理的。雖然這種做法較為罕見,但出於性能方面的原因,該技術可自行管理內存,無需依賴原生的Java垃圾回收機制。與Spark不同,待處理數據的特徵發生變化後Flink無需手工優化和調整,並且該技術也可以自行處理數據分區和自動緩存等操作。
Flink會通過多種方式對工作進行分許進而優化任務。這種分析在部分程度上類似於SQL查詢規劃器對關系型資料庫所做的優化,可針對特定任務確定最高效的實現方法。該技術還支持多階段並行執行,同時可將受阻任務的數據集合在一起。對於迭代式任務,出於性能方面的考慮,Flink會嘗試在存儲數據的節點上執行相應的計算任務。此外還可進行「增量迭代」,或僅對數據中有改動的部分進行迭代。
在用戶工具方面,Flink提供了基於Web的調度視圖,藉此可輕松管理任務並查看系統狀態。用戶也可以查看已提交任務的優化方案,藉此了解任務最終是如何在集群中實現的。對於分析類任務,Flink提供了類似SQL的查詢,圖形化處理,以及機器學習庫,此外還支持內存計算。
Flink能很好地與其他組件配合使用。如果配合Hadoop 堆棧使用,該技術可以很好地融入整個環境,在任何時候都只佔用必要的資源。該技術可輕松地與YARN、HDFS和Kafka 集成。在兼容包的幫助下,Flink還可以運行為其他處理框架,例如Hadoop和Storm編寫的任務。
目前Flink最大的局限之一在於這依然是一個非常「年幼」的項目。現實環境中該項目的大規模部署尚不如其他處理框架那麼常見,對於Flink在縮放能力方面的局限目前也沒有較為深入的研究。隨著快速開發周期的推進和兼容包等功能的完善,當越來越多的組織開始嘗試時,可能會出現越來越多的Flink部署
總結
Flink提供了低延遲流處理,同時可支持傳統的批處理任務。Flink也許最適合有極高流處理需求,並有少量批處理任務的組織。該技術可兼容原生Storm和Hadoop程序,可在YARN管理的集群上運行,因此可以很方便地進行評估。快速進展的開發工作使其值得被大家關注。
結論
大數據系統可使用多種處理技術。
對於僅需要批處理的工作負載,如果對時間不敏感,比其他解決方案實現成本更低的Hadoop將會是一個好選擇。
對於僅需要流處理的工作負載,Storm可支持更廣泛的語言並實現極低延遲的處理,但默認配置可能產生重復結果並且無法保證順序。Samza與YARN和Kafka緊密集成可提供更大靈活性,更易用的多團隊使用,以及更簡單的復制和狀態管理。
對於混合型工作負載,Spark可提供高速批處理和微批處理模式的流處理。該技術的支持更完善,具備各種集成庫和工具,可實現靈活的集成。Flink提供了真正的流處理並具備批處理能力,通過深度優化可運行針對其他平台編寫的任務,提供低延遲的處理,但實際應用方面還為時過早。
最適合的解決方案主要取決於待處理數據的狀態,對處理所需時間的需求,以及希望得到的結果。具體是使用全功能解決方案或主要側重於某種項目的解決方案,這個問題需要慎重權衡。隨著逐漸成熟並被廣泛接受,在評估任何新出現的創新型解決方案時都需要考慮類似的問題。

⑦ 大數據常用的各種演算法

我們經常談到的所謂的​​ 數據挖掘 是通過大量的數據集進行排序,自動化識別趨勢和模式並且建立相關性的過程。那現在市面的數據公司都是通過各種各樣的途徑來收集海量的信息,這些信息來自於網站、公司應用、社交媒體、移動設備和不斷增長的物聯網。

比如我們現在每天都在使用的搜索引擎。在自然語言處理領域,有一種非常流行的演算法模型,叫做詞袋模型,即把一段文字看成一袋水果,這個模型就是要算出這袋水果里,有幾個蘋果、幾個香蕉和幾個梨。搜索引擎會把這些數字記下來,如果你想要蘋果,它就會把有蘋果的這些袋子給你。

當我們在網上買東西或是看電影時,網站會推薦一些可能符合我們偏好的商品或是電影,這個推薦有時候還挺准。事實上,這背後的演算法,是在數你喜歡的電影和其他人喜歡的電影有多少個是一樣的,如果你們同時喜歡的電影超過一定個數,就把其他人喜歡、但你還沒看過的電影推薦給你。 搜索引擎和推薦系統 在實際生產環境中還要做很多額外的工作,但是從本質上來說,它們都是在數數。

當數據量比較小的時候,可以通過人工查閱數據。而到了大數據時代,幾百TB甚至上PB的數據在分析師或者老闆的報告中,就只是幾個數字結論而已。 在數數的過程中,數據中存在的信息也隨之被丟棄,留下的那幾個數字所能代表的信息價值,不抵其真實價值之萬一。 過去十年,許多公司花了大價錢,用上了物聯網和雲計算,收集了大量的數據,但是到頭來卻發現得到的收益並沒有想像中那麼多。

所以說我們現在正處於「 數字化一切 」的時代。人們的所有行為,都將以某種數字化手段轉換成數據並保存下來。每到新年,各大網站、App就會給用戶推送上一年的回顧報告,比如支付寶會告訴用戶在過去一年裡花了多少錢、在淘寶上買了多少東西、去什麼地方吃過飯、花費金額超過了百分之多少的小夥伴;航旅縱橫會告訴用戶去年做了多少次飛機、總飛行里程是多少、去的最多的城市是哪裡;同樣的,最後讓用戶知道他的行程超過了多少小夥伴。 這些報告看起來非常酷炫,又冠以「大數據」之名,讓用戶以為是多麼了不起的技術。

實際上,企業對於數據的使用和分析,並不比我們每年收到的年度報告更復雜。已經有30多年歷史的商業智能,看起來非常酷炫,其本質依然是數數,並把數出來的結果畫成圖給管理者看。只是在不同的行業、場景下,同樣的數字和圖表會有不同的名字。即使是最近幾年炙手可熱的大數據處理技術,也不過是可以數更多的數,並且數的更快一些而已。

在大數據處理過程中會用到那些演算法呢?

1、A* 搜索演算法——圖形搜索演算法,從給定起點到給定終點計算出路徑。其中使用了一種啟發式的估算,為每個節點估算通過該節點的較佳路徑,並以之為各個地點排定次序。演算法以得到的次序訪問這些節點。因此,A*搜索演算法是較佳優先搜索的範例。

2、集束搜索(又名定向搜索,Beam Search)——較佳優先搜索演算法的優化。使用啟發式函數評估它檢查的每個節點的能力。不過,集束搜索只能在每個深度中發現最前面的m個最符合條件的節點,m是固定數字——集束的寬度。

3、二分查找(Binary Search)——在線性數組中找特定值的演算法,每個步驟去掉一半不符合要求的數據。

4、分支界定演算法(Branch and Bound)——在多種最優化問題中尋找特定最優化解決方案的演算法,特別是針對離散、組合的最優化。

5、Buchberger演算法——一種數學演算法,可將其視為針對單變數較大公約數求解的歐幾里得演算法和線性系統中高斯消元法的泛化。

6、數據壓縮——採取特定編碼方案,使用更少的位元組數(或是其他信息承載單元)對信息編碼的過程,又叫來源編碼。

7、Diffie-Hellman密鑰交換演算法——一種加密協議,允許雙方在事先不了解對方的情況下,在不安全的通信信道中,共同建立共享密鑰。該密鑰以後可與一個對稱密碼一起,加密後續通訊。

8、Dijkstra演算法——針對沒有負值權重邊的有向圖,計算其中的單一起點最短演算法。

9、離散微分演算法(Discrete differentiation)。

10、動態規劃演算法(Dynamic Programming)——展示互相覆蓋的子問題和最優子架構演算法

11、歐幾里得演算法(Euclidean algorithm)——計算兩個整數的較大公約數。最古老的演算法之一,出現在公元前300前歐幾里得的《幾何原本》。

12、期望-較大演算法(Expectation-maximization algorithm,又名EM-Training)——在統計計算中,期望-較大演算法在概率模型中尋找可能性較大的參數估算值,其中模型依賴於未發現的潛在變數。EM在兩個步驟中交替計算,第一步是計算期望,利用對隱藏變數的現有估計值,計算其較大可能估計值;第二步是較大化,較大化在第一步上求得的較大可能值來計算參數的值。

13、快速傅里葉變換(Fast Fourier transform,FFT)——計算離散的傅里葉變換(DFT)及其反轉。該演算法應用范圍很廣,從數字信號處理到解決偏微分方程,到快速計算大整數乘積。

14、梯度下降(Gradient descent)——一種數學上的最優化演算法。

15、哈希演算法(Hashing)。

16、堆排序(Heaps)。

17、Karatsuba乘法——需要完成上千位整數的乘法的系統中使用,比如計算機代數系統和大數程序庫,如果使用長乘法,速度太慢。該演算法發現於1962年。

18、LLL演算法(Lenstra-Lenstra-Lovasz lattice rection)——以格規約(lattice)基數為輸入,輸出短正交向量基數。LLL演算法在以下公共密鑰加密方法中有大量使用:背包加密系統(knapsack)、有特定設置的RSA加密等等。

19、較大流量演算法(Maximum flow)——該演算法試圖從一個流量網路中找到較大的流。它優勢被定義為找到這樣一個流的值。較大流問題可以看作更復雜的網路流問題的特定情況。較大流與網路中的界面有關,這就是較大流-最小截定理(Max-flow min-cut theorem)。Ford-Fulkerson 能找到一個流網路中的較大流。

20、合並排序(Merge Sort)。

21、牛頓法(Newton's method)——求非線性方程(組)零點的一種重要的迭代法。

22、Q-learning學習演算法——這是一種通過學習動作值函數(action-value function)完成的強化學習演算法,函數採取在給定狀態的給定動作,並計算出期望的效用價值,在此後遵循固定的策略。Q-leanring的優勢是,在不需要環境模型的情況下,可以對比可採納行動的期望效用。

23、兩次篩法(Quadratic Sieve)——現代整數因子分解演算法,在實踐中,是目前已知第二快的此類演算法(僅次於數域篩法Number Field Sieve)。對於110位以下的十位整數,它仍是最快的,而且都認為它比數域篩法更簡單。

24、RANSAC——是「RANdom SAmple Consensus」的縮寫。該演算法根據一系列觀察得到的數據,數據中包含異常值,估算一個數學模型的參數值。其基本假設是:數據包含非異化值,也就是能夠通過某些模型參數解釋的值,異化值就是那些不符合模型的數據點。

25、RSA——公鑰加密演算法。較早的適用於以簽名作為加密的演算法。RSA在電商行業中仍大規模使用,大家也相信它有足夠安全長度的公鑰。

26、Schönhage-Strassen演算法——在數學中,Schönhage-Strassen演算法是用來完成大整數的乘法的快速漸近演算法。其演算法復雜度為:O(N log(N) log(log(N))),該演算法使用了傅里葉變換。

27、單純型演算法(Simplex Algorithm)——在數學的優化理論中,單純型演算法是常用的技術,用來找到線性規劃問題的數值解。線性規劃問題包括在一組實變數上的一系列線性不等式組,以及一個等待較大化(或最小化)的固定線性函數。

28、奇異值分解(Singular value decomposition,簡稱SVD)——在線性代數中,SVD是重要的實數或復數矩陣的分解方法,在信號處理和統計中有多種應用,比如計算矩陣的偽逆矩陣(以求解最小二乘法問題)、解決超定線性系統(overdetermined linear systems)、矩陣逼近、數值天氣預報等等。

29、求解線性方程組(Solving a system of linear equations)——線性方程組是數學中最古老的問題,它們有很多應用,比如在數字信號處理、線性規劃中的估算和預測、數值分析中的非線性問題逼近等等。求解線性方程組,可以使用高斯—約當消去法(Gauss-Jordan elimination),或是柯列斯基分解( Cholesky decomposition)。

30、Strukturtensor演算法——應用於模式識別領域,為所有像素找出一種計算方法,看看該像素是否處於同質區域( homogenous region),看看它是否屬於邊緣,還是是一個頂點。

31、合並查找演算法(Union-find)——給定一組元素,該演算法常常用來把這些元素分為多個分離的、彼此不重合的組。不相交集(disjoint-set)的數據結構可以跟蹤這樣的切分方法。合並查找演算法可以在此種數據結構上完成兩個有用的操作:

查找:判斷某特定元素屬於哪個組。

合並:聯合或合並兩個組為一個組。

32、維特比演算法(Viterbi algorithm)——尋找隱藏狀態最有可能序列的動態規劃演算法,這種序列被稱為維特比路徑,其結果是一系列可以觀察到的事件,特別是在隱藏的Markov模型中。

⑧ 如何進行大數據處理

大數據處理之一:收集


大數據的收集是指運用多個資料庫來接收發自客戶端(Web、App或許感測器方式等)的 數據,而且用戶能夠經過這些資料庫來進行簡略的查詢和處理作業,在大數據的收集進程中,其主要特色和應戰是並發數高,因為同時有可能會有成千上萬的用戶 來進行拜訪和操作


大數據處理之二:導入/預處理


雖然收集端本身會有許多資料庫,但是假如要對這些海量數據進行有效的剖析,還是應該將這 些來自前端的數據導入到一個集中的大型分布式資料庫,或許分布式存儲集群,而且能夠在導入基礎上做一些簡略的清洗和預處理作業。導入與預處理進程的特色和應戰主要是導入的數據量大,每秒鍾的導入量經常會到達百兆,甚至千兆等級。


大數據處理之三:核算/剖析


核算與剖析主要運用分布式資料庫,或許分布式核算集群來對存儲於其內的海量數據進行普通 的剖析和分類匯總等,以滿足大多數常見的剖析需求,在這方面,一些實時性需求會用到EMC的GreenPlum、Oracle的Exadata,以及根據 MySQL的列式存儲Infobright等,而一些批處理,或許根據半結構化數據的需求能夠運用Hadoop。 核算與剖析這部分的主要特色和應戰是剖析觸及的數據量大,其對系統資源,特別是I/O會有極大的佔用。


大數據處理之四:發掘


主要是在現有數據上面進行根據各種演算法的核算,然後起到預測(Predict)的作用,然後實現一些高等級數據剖析的需求。主要運用的工具有Hadoop的Mahout等。該進程的特色和應戰主要是用於發掘的演算法很復雜,並 且核算觸及的數據量和核算量都很大,常用數據發掘演算法都以單線程為主。


關於如何進行大數據處理,青藤小編就和您分享到這里了。如果您對大數據工程有濃厚的興趣,希望這篇文章可以為您提供幫助。如果您還想了解更多關於數據分析師、大數據工程師的技巧及素材等內容,可以點擊本站的其他文章進行學習。

⑨ 海量數據演算法:如何從超過10G的記錄IP地址的日誌中,較快的找出登錄次數最多的一個IP

對於以上問題我們可以把ip地址看成是分布在[0, 2^32]的一批數字。然後統計出這批數字中出現最多的把[0, 2^32] 劃分為32個區間,32個區間再細劃分,選出最大的一個值,以此類推。雖然理論上IPv4 有42億個IP地址,但是實際上會來訪問伺服器並且留下日誌的可遠沒有那麼多。

以上就是具體的操作了,希望對大家有幫助,當然有錯誤也請指出。



⑩ 如何處理海量數據

在實際的工作環境下,許多人會遇到海量數據這個復雜而艱巨的問題,它的主要難點有以下幾個方面:
一、數據量過大,數據中什麼情況都可能存在。
如果說有10條數據,那麼大不了每條去逐一檢查,人為處理,如果有上百條數據,也可以考慮,如果數據上到千萬級別,甚至 過億,那不是手工能解決的了,必須通過工具或者程序進行處理,尤其海量的數據中,什麼情況都可能存在,例如,數據中某處格式出了問題,尤其在程序處理時, 前面還能正常處理,突然到了某個地方問題出現了,程序終止了。
二、軟硬體要求高,系統資源佔用率高。
對海量的數據進行處理,除了好的方法,最重要的就是合理使用工具,合理分配系統資源。一般情況,如果處理的數據過TB級,小型機是要考慮的,普通的機子如果有好的方法可以考慮,不過也必須加大CPU和內存,就象面對著千軍萬馬,光有勇氣沒有一兵一卒是很難取勝的。
三、要求很高的處理方法和技巧。
這也是本文的寫作目的所在,好的處理方法是一位工程師長期工作經驗的積累,也是個人的經驗的總結。沒有通用的處理方法,但有通用的原理和規則。
下面我們來詳細介紹一下處理海量數據的經驗和技巧:
一、選用優秀的資料庫工具
現在的資料庫工具廠家比較多,對海量數據的處理對所使用的資料庫工具要求比較高,一般使用Oracle或者DB2,微軟 公司最近發布的SQL Server 2005性能也不錯。另外在BI領域:資料庫,數據倉庫,多維資料庫,數據挖掘等相關工具也要進行選擇,象好的ETL工具和好的OLAP工具都十分必要, 例如Informatic,Eassbase等。筆者在實際數據分析項目中,對每天6000萬條的日誌數據進行處理,使用SQL Server 2000需要花費6小時,而使用SQL Server 2005則只需要花費3小時。
二、編寫優良的程序代碼
處理數據離不開優秀的程序代碼,尤其在進行復雜數據處理時,必須使用程序。好的程序代碼對數據的處理至關重要,這不僅僅是數據處理准確度的問題,更是數據處理效率的問題。良好的程序代碼應該包含好的演算法,包含好的處理流程,包含好的效率,包含好的異常處理機制等。
三、對海量數據進行分區操作
對海量數據進行分區操作十分必要,例如針對按年份存取的數據,我們可以按年進行分區,不同的資料庫有不同的分區方式,不 過處理機制大體相同。例如SQL Server的資料庫分區是將不同的數據存於不同的文件組下,而不同的文件組存於不同的磁碟分區下,這樣將數據分散開,減小磁碟I/O,減小了系統負荷, 而且還可以將日誌,索引等放於不同的分區下。
四、建立廣泛的索引
對海量的數據處理,對大表建立索引是必行的,建立索引要考慮到具體情況,例如針對大表的分組、排序等欄位,都要建立相應 索引,一般還可以建立復合索引,對經常插入的表則建立索引時要小心,筆者在處理數據時,曾經在一個ETL流程中,當插入表時,首先刪除索引,然後插入完 畢,建立索引,並實施聚合操作,聚合完成後,再次插入前還是刪除索引,所以索引要用到好的時機,索引的填充因子和聚集、非聚集索引都要考慮。
五、建立緩存機制
當數據量增加時,一般的處理工具都要考慮到緩存問題。緩存大小設置的好差也關繫到數據處理的成敗,例如,筆者在處理2億條數據聚合操作時,緩存設置為100000條/Buffer,這對於這個級別的數據量是可行的。
六、加大虛擬內存
如果系統資源有限,內存提示不足,則可以靠增加虛擬內存來解決。筆者在實際項目中曾經遇到針對18億條的數據進行處理, 內存為1GB,1個P42.4G的CPU,對這么大的數據量進行聚合操作是有問題的,提示內存不足,那麼採用了加大虛擬內存的方法來解決,在6塊磁碟分區 上分別建立了6個4096M的磁碟分區,用於虛擬內存,這樣虛擬的內存則增加為 4096*6 + 1024 =25600 M,解決了數據處理中的內存不足問題。
七、分批處理
海量數據處理難因為數據量大,那麼解決海量數據處理難的問題其中一個技巧是減少數據量。可以對海量數據分批處理,然後處 理後的數據再進行合並操作,這樣逐個擊破,有利於小數據量的處理,不至於面對大數據量帶來的問題,不過這種方法也要因時因勢進行,如果不允許拆分數據,還 需要另想辦法。不過一般的數據按天、按月、按年等存儲的,都可以採用先分後合的方法,對數據進行分開處理。
八、使用臨時表和中間表
數據量增加時,處理中要考慮提前匯總。這樣做的目的是化整為零,大表變小表,分塊處理完成後,再利用一定的規則進行合 並,處理過程中的臨時表的使用和中間結果的保存都非常重要,如果對於超海量的數據,大表處理不了,只能拆分為多個小表。如果處理過程中需要多步匯總操作, 可按匯總步驟一步步來,不要一條語句完成,一口氣吃掉一個胖子。
九、優化查詢SQL語句
在對海量數據進行查詢處理過程中,查詢的SQL語句的性能對查詢效率的影響是非常大的,編寫高效優良的SQL腳本和存儲 過程是資料庫工作人員的職責,也是檢驗資料庫工作人員水平的一個標准,在對SQL語句的編寫過程中,例如減少關聯,少用或不用游標,設計好高效的資料庫表 結構等都十分必要。筆者在工作中試著對1億行的數據使用游標,運行3個小時沒有出結果,這是一定要改用程序處理了。
十、使用文本格式進行處理
對一般的數據處理可以使用資料庫,如果對復雜的數據處理,必須藉助程序,那麼在程序操作資料庫和程序操作文本之間選擇, 是一定要選擇程序操作文本的,原因為:程序操作文本速度快;對文本進行處理不容易出錯;文本的存儲不受限制等。例如一般的海量的網路日誌都是文本格式或者 csv格式(文本格式),對它進行處理牽扯到數據清洗,是要利用程序進行處理的,而不建議導入資料庫再做清洗。
十一、定製強大的清洗規則和出錯處理機制
海量數據中存在著不一致性,極有可能出現某處的瑕疵。例如,同樣的數據中的時間欄位,有的可能為非標準的時間,出現的原因可能為應用程序的錯誤,系統的錯誤等,這是在進行數據處理時,必須制定強大的數據清洗規則和出錯處理機制。
十二、建立視圖或者物化視圖
視圖中的數據來源於基表,對海量數據的處理,可以將數據按一定的規則分散到各個基表中,查詢或處理過程中可以基於視圖進行,這樣分散了磁碟I/O,正如10根繩子吊著一根柱子和一根吊著一根柱子的區別。
十三、避免使用32位機子(極端情況)
目前的計算機很多都是32位的,那麼編寫的程序對內存的需要便受限制,而很多的海量數據處理是必須大量消耗內存的,這便要求更好性能的機子,其中對位數的限制也十分重要。
十四、考慮操作系統問題
海量數據處理過程中,除了對資料庫,處理程序等要求比較高以外,對操作系統的要求也放到了重要的位置,一般是必須使用伺服器的,而且對系統的安全性和穩定性等要求也比較高。尤其對操作系統自身的緩存機制,臨時空間的處理等問題都需要綜合考慮。
十五、使用數據倉庫和多維資料庫存儲
數據量加大是一定要考慮OLAP的,傳統的報表可能5、6個小時出來結果,而基於Cube的查詢可能只需要幾分鍾,因此處理海量數據的利器是OLAP多維分析,即建立數據倉庫,建立多維數據集,基於多維數據集進行報表展現和數據挖掘等。
十六、使用采樣數據,進行數據挖掘
基於海量數據的數據挖掘正在逐步興起,面對著超海量的數據,一般的挖掘軟體或演算法往往採用數據抽樣的方式進行處理,這樣 的誤差不會很高,大大提高了處理效率和處理的成功率。一般采樣時要注意數據的完整性和,防止過大的偏差。筆者曾經對1億2千萬行的表數據進行采樣,抽取出 400萬行,經測試軟體測試處理的誤差為千分之五,客戶可以接受。
還有一些方法,需要在不同的情況和場合下運用,例如使用代理鍵等操作,這樣的好處是加快了聚合時間,因為對數值型的聚合比對字元型的聚合快得多。類似的情況需要針對不同的需求進行處理。
海量數據是發展趨勢,對數據分析和挖掘也越來越重要,從海量數據中提取有用信息重要而緊迫,這便要求處理要准確,精度要高,而且處理時間要短,得到有價值信息要快,所以,對海量數據的研究很有前途,也很值得進行廣泛深入的研究。

閱讀全文

與海量數據處理演算法相關的資料

熱點內容
pdf中圖片修改 瀏覽:268
匯編編譯後 瀏覽:473
php和java整合 瀏覽:828
js中執行php代碼 瀏覽:440
國產單片機廠商 瀏覽:57
蘋果手機怎麼設置不更新app軟體 瀏覽:284
轉行當程序員如何 瀏覽:492
蘋果id怎麼驗證app 瀏覽:864
查看手機命令 瀏覽:953
抖音反編譯地址 瀏覽:225
如何加密軟體oppoa5 瀏覽:233
java從入門到精通明日科技 瀏覽:94
拆解汽車解壓視頻 瀏覽:597
新版百度雲解壓縮 瀏覽:592
android上下拉刷新 瀏覽:880
centos可執行文件反編譯 瀏覽:838
林清玄pdf 瀏覽:271
黑馬程序員java基礎 瀏覽:284
awss3命令 瀏覽:359
百度店鋪客戶訂單手機加密 瀏覽:502