1. 程式人生 > >使用hadoop進行大規模資料的全域性排序

使用hadoop進行大規模資料的全域性排序

1.   Hellow hadoop~~!

Hadoop(某人兒子的一隻虛擬大象的名字)是一個複雜到極致,又簡單到極致的東西。

說它複雜,是因為一個hadoop叢集往往有幾十臺甚至成百上千臺low cost的計算機組成,你執行的每一個任務都要在這些計算機上做任務的分發,執行中間資料排序以及最後的彙總,期間還包含節點發現,任務的重試,故障節點替換等等等等的維護以及異常情況處理。誰叫hadoop叢集往往都是由一些平民計算機組成,沒事兒罷個工什麼的,實在是再尋常不過的事情。

而說其簡單,則是因為,上面說到的那些,你通通不用管,你所需要做的,就是寫一個程式,當然也可以是指令碼,從標準輸入讀入一條資料,處理完之後,把結果輸出到標準輸出。

現在,或許你就明白了,hadoop就是一個計算模型。一個分散式的計算模型。

1.1Map和reduce

天下大事,分久必合、合久必分。

所謂分散式計算,就是把一大堆用於計算的資料材料切了,扔到多個鍋裡面,該焯水的焯水,該油炸的油炸。然後都準備的差不多了,按著一定的先後順序,比如不好熟的先放,好熟的後放什麼的,一塊下鍋炒成一盤菜出來,端出來上桌。

前面的步驟,就是map,分發。Map的作用就是把輸入資料打散,做簡單的處理,輸出。而hadoop則要先將中間資料排序,這個稱為shuffle,然後由reduce把中間資料合併到一起。將最終結果輸出。

舉個簡單的例子:公安局要根據資料庫內身份證號獲得全國每個地市人口數情況(好吧,這個應該是統計局做的),這個任務落到你的頭上了,你應該先把所有的身份證號匯出到檔案中,每行一個,然後把這些檔案交給map。Map中的要做的就是擷取身份證號的前面六位,把這六位數字直接輸出。然後hadoop會把這些身份證號的前六位排序,把相同的資料都排到一起,交給reduce,reduce判斷每次輸入的號碼是否與上一個處理的相同,相同則累加,不同則把之前的號碼,和統計的數值輸出。這樣,你就獲得了各地市的人口數統計。

下面這個圖就是map和reduce處理的圖示。

上圖是MapReduce的資料處理檢視。分為map,shuffle,reduce三個部分。各map任務讀入切分後的大規模資料進行處理並將資料作為一系列key:value對輸出,輸出的中間資料按照定義的方式通過shuffle程式分發到相應的reduce任務。Shuffle程式還會按照定義的方式對傳送到一個reduce任務的資料進行排序。Reduce進行最後的資料處理。

MapReduce計算框架適用於超大規模的資料(100TB量級)且各資料之間相關性較低的情況。

1.2HDFS

之前,或許你聽說過NTFS,VFS,NFS等等等等,沒錯,HDFS就是hadoop file system。

為什麼需要一種專門的檔案系統呢?

這是因為hadoop使用過網路鬆散(說其鬆散,是因為hadoop叢集中的任意一個計算機故障了或是不相干了,都不會對叢集造成影響)的組合到一起的。多個計算機需要一個統一的檔案訪問方式。也就是根據一個路徑,不同的計算機可以定位同一個檔案。

HDFS就是這樣一種分散式檔案系統,提供了較好的容錯功能和擴充套件性。

1.3節點與槽位

Hadoop叢集是由很多low cost的計算機組成的,這些計算機被稱為節點。組成hadoop的計算機通常都是全功能的,沒有特別的專門用於計算和儲存的部分。

這樣帶來的好處是明顯的,因為特別大的硬碟和特別快的cpu,總是意味著難以接受的價格。而且這樣一個配置“特別的”節點計算機掛掉了,找個他的替身將是很困難的事情。

計算節點和儲存節點統一的另一個好處是,任務在計算過程中產生的檔案,可以直接放在本機的儲存節點上,減少網路頻寬佔用和延遲。

在衡量hadoop的map和reduce的處理能力的時候通常都是以槽位為單位的。槽位就是叢集內每個計算機的cpu併發數(cpu數*核心數*超執行緒數)的總和。每個任務都會安排在一個槽位內允許,安排不到槽位的任務則會等待。

2.   Hadoop應用例項:大規模資料的排序

Hadoop平臺沒有提供全域性資料排序,而在大規模資料處理中進行資料的全域性排序是非常普遍的需求。大量的將大規模資料任務切分成小資料規模的資料處理任務都必須先將大規模資料進行全域性排序。例如處理兩組大的資料集的屬性合併,可以對兩組資料進行全域性排序然後分解成一系列小的二路歸併問題實現。

2.1應用hadoop進行大規模資料全域性排序的方法

使用hadoop進行大量的資料排序排序最直觀的方法是把檔案所有內容給map之後,map不做任何處理,直接輸出給一個reduce,利用hadoop的自己的shuffle機制,對所有資料進行排序,而後由reduce直接輸出。

然而這樣的方法跟單機毫無差別,完全無法用到多機分散式計算的便利。因此這種方法是不行的。

利用hadoop分而治之的計算模型,可以參照快速排序的思想。在這裡我們先簡單回憶一下快速排序。快速排序基本步驟就是需要現在所有資料中選取一個作為支點。然後將大於這個支點的放在一邊,小於這個支點的放在另一邊。

設想如果我們有N個支點(這裡可以稱為標尺),就可以把所有的資料分成N+1個part,將這N+1個part丟給reduce,由hadoop自動排序,最後輸出N+1個內部有序的檔案,再把這N+1個檔案首尾相連合併成一個檔案,收工。

由此我們可以歸納出這樣一個用hadoop對大量資料排序的步驟:

1)  對待排序資料進行抽樣;

2)  對抽樣資料進行排序,產生標尺;

3)  Map對輸入的每條資料計算其處於哪兩個標尺之間;將資料發給對應區間ID的reduce

4)  Reduce將獲得資料直接輸出。

這裡使用對一組url進行排序來作為例子:

 

這裡還有一點小問題要處理:如何將資料發給一個指定ID的reduce?hadoop提供了多種分割槽演算法。這些演算法根據map輸出的資料的key來確定此資料應該發給哪個reduce(reduce的排序也依賴key)。因此,如果需要將資料發給某個reduce,只要在輸出資料的同時,提供一個key(在上面這個例子中就是reduce的ID+url),資料就該去哪兒去哪兒了。

2.2注意事項

1)         標尺的抽取應該儘可能的均勻,這與快速排序很多變種演算法均是強調支點的選取是一致的。

2)         HDFS是一種讀寫效能很不對稱的檔案系統。應該儘可能的利用其讀效能很強的特點。減少對寫檔案和shuffle操作的依賴。舉例來說,當需要根據資料的統計情況來決定對資料的處理的時候。將統計和資料處理分成兩輪map-reduce比將統計資訊合併和資料處理都放到一個reduce中要快速的多。

3.   總結

Hadoop實際是一種以資料為驅動的計算模型,結合MapReduce和HDFS,將任務執行在資料存放的計算節點上,充分利用了計算節點的儲存和計算資源,同時也大大節省了網路傳輸資料的開銷。

Hadoop提供了簡便利用叢集進行平行計算的平臺。各種可以隔離資料集之間相關性的運算模型都能夠在Hadoop上被良好應用。之後會有更多的利用Hadoop實現的大規模資料基礎計算方法的介紹。

相關推薦

使用hadoop進行大規模資料全域性排序

1.   Hellow hadoop~~! Hadoop(某人兒子的一隻虛擬大象的名字)是一個複雜到極致,又簡單到極致的東西。 說它複雜,是因為一個hadoop叢集往往有幾十臺甚至成百上千臺low cost的計算機組成,你執行的每一個任務都要在這些計算機上做任務的分發,執行

hadoop簡單實現文字資料全域性排序

(1)、關於mapreduce mapreduce很適合資料之間相關性較低且資料量龐大的情況,map操作將原始資料經過特定操作打散後輸出,作為中間結果,hadoop通過shuffle操作對中間結果排序,之後,reduce操作接收中間結果並進行彙總操作,最後將結果輸出到檔案中

使用bitmap進行大量資料排序、判斷存在與否

使用bitmap主要是可以減少儲存空間的使用,用一個bit來儲存一個元素的狀態。當我們需要在一億個數中判斷某個數是否存在時,我們不需要將這一億個數同時放入記憶體。 排序 首先有一個bit陣列,如果我們排序的所有元素中最大的數是一億,那麼我們就需要這個陣列大小初始

Hadoop 進行分散式資料處理,從 入門、進階到應用開發

[email protected]:~# hadoop-0.20 fs -ls output Found 2 items drwxr-xr-x - root supergroup 0 2010-05-12 19:04 /user/root/output/_logs -rw-r

資料之使用hadoop對海量資料進行統計並排序

不得不說,Hadoop確實是處理海量離線資料的利器,當然,凡是一個東西有優點必定也有缺點,hadoop的缺點也很多,比如對流式計 算,實時計算,DAG具有依賴關係的計算,支援都不友好,所以,由此誕生了很多新的分散式計算框 架,Storm,Spark,Tez,impala,

如何使用hadoop對海量資料進行統計並排序

下面進入正題,先來分析下散仙這個例子的需求,總共需要二步來完成,第一步就是對短語的統計,第二步就是對結果集的排序。所以如果使用MapReduce來完成的話,就得需要2個作業來完成這件事情,第一個作業來統計詞頻,第二個來負責進行排序,當然這兩者之間是有依賴關係的,第二個作業的執行,需要依賴第一個作業的結果,這就

hadoop mr 全域性排序

全域性排序     需求:根據使用者每月使用的流量按照使用的流量多少排序     介面->WritableComparable     排序操作在hadoop中屬於預設的行為。預設按照字典順序排序。

資料演算法-Hadoop/Spark大資料處理技巧》讀書筆記(一)——二次排序

寫在前面: 在做直播的時候有同學問Spark不是用Scala語言作為開發語言麼,的確是的,從網上查資料的話也會看到大把大把的用Scala編寫的Spark程式,但是仔細看就會發現這些用Scala寫的文章

Hadoop——自定義資料型別,實現WritableComparable, 並且 分組,排序

http://blog.csdn.net/u014432433/article/details/51104026 1. 在進行mapreduce程式設計時key鍵往往用於分組或排序,當我們在進行這些操作時Hadoop內建的key鍵資料型別不能滿足需求時, 或針對用例優化自定

delphi DbGridEh資料進行升序降序排序

//傳入升序引數procedure TfmJcDjMxBase.mnuDxMainAscClick(Sender: TObject);begin  inherited;  GetMainDataSort('1') ;end;//傳入降序引數procedure TfmJcDjM

hadoop 全域性排序的 原始碼

/**  * Licensed to the Apache Software Foundation (ASF) under one  * or more contributor license agreements.  See the NOTICE file  * dist

使用Vegan包進行生態學資料排序分析的學習(一)

基本概念與分析原理的理解 做生物資訊以來一直對排序等的概念不是特別理解。這兩天查了幾篇資料,梳理了一下,做一下簡要的總結。 1.排序: 假設我們有一個OTU表: 行為樣本,列為OTU(也可以理解為特徵)。我們要對這4個樣本進行排

資料結構排序(一)

插入排序:直接插入排序,希爾排序 直接插入排序: 穩定性:不改變相同關鍵字序列,穩定 ASL: : 解釋說明: 序 號:0 1 2 3 4 5 6 7 8 監視哨: 34 12 49 28 31 52 51 49* 第一趟: 34 第二趟: 12 34 第三趟: 12 3

資料就業前景怎麼樣?hadoop工程師、資料探勘、資料分析師薪資多少?

近幾年來,大資料這個詞突然變得很火,不僅納入阿里巴巴、谷歌等網際網路公司的戰略規劃中,同時也在我國國務院和其他國家的政府報告中多次提及,大資料無疑成為當今網際網路世界中的新寵兒。 《大資料人才報告》顯示,目前全國的大資料人才僅46萬,未來3-5年內大資料人才的缺口將高達150萬,越來越多

webpack-dev-conf r.js檔案,如何進行後臺資料模擬?

參照了別人寫的記錄一下 最新的vue裡dev-server.js被替換成了webpack-dev-conf.js 在模擬後臺資料的時候直接在webpack-dev-conf.js檔案中修改 第一步,在const portfinder = require(‘portfinder’)

如何用Python進行資料探勘和分析!

大資料無處不在。在時下這個年代,不管你喜歡與否,在運營一個成功的商業的過程中都有可能會遇到它。 什麼是大資料? 大資料就像它看起來那樣——有大量的資料。單獨而言,你能從單一的資料獲取的洞見窮其有限。但是結合複雜數學模型以及強大計算能力的TB級資料,卻能創造出人類無法制造的洞見。大資料分析提供

一文詳解大規模資料計算處理原理及操作重點

摘要: 大資料技術主要針對的是大規模資料的計算處理問題,那麼要想解決的這一問題,首先要解決的就是大規模資料的儲存問題。 一、RAID技術 大資料技術主要針對的是大規模資料的計算處理問題,那麼要想解決的這一問題,首先要解決的就是大規模資料的儲存問題。大規模資料儲存要解決的核心問題有三個方面:

EasyUI Datagrid 分頁的情況下實現點選表頭的小三角圖示對資料庫中所有資料重新排序

說明一下: 當點選 datagrid 表頭某一列的小三角圖示時,easyui 本身是有排序的,但是在當我們對 datagrid 進行了分頁的情況下,點選排序只是對當前頁的資料進行排序,而需求需要我對資料庫裡面的所有資料進行排序,這樣的話只能從後臺先排好序再返回了。 看了一下文件,發

NVIDIA針對大規模資料分析和機器學習推出RAPIDS開源GPU加速平臺!

2018年10月10日,NVIDIA釋出了一款針對資料科學和機器學習的GPU加速平臺,該平臺已為多個行業領先者所採用,並能幫助超大規模公司以前所未有的速度分析海量資料並進行精準的業務預測。 RAPIDS™ 開源軟體幫助資料科學家顯著地提高了工作績效,對於這些資料科學家來說,種種業務挑戰應接不暇,

在LINQ中對中文進行特定順序的排序

在LINQ中對中文進行特定順序的排序 .NET 開發  >  ADO.NET 與 LINQ 常規討論