八天學會hadoop 3 流量排序統計實戰

2021-08-30 02:28:23 字數 2335 閱讀 7617

1.map task 過程中會把資料寫入到記憶體中,在spill寫入之前,會先進行二次排序,首先根據資料所屬的partition進行排序,然後每個partition中的資料再按key來排序。

2. 接著會進行combine過程(如果設定了combiner了的話) combine本身也是乙個reducer 會對寫入到磁碟的資料處理,期望減少寫入到磁碟資料的大小

3.當資料達到閾值,會進行spill 生成多個磁碟檔案。,多個磁碟檔案進行歸併排序。map task的shuffle就此結束。

map task     partition->sort->combine->spill(磁碟)->歸併排序

reduce task 會接受不同 map task 同乙個的partition的資料 然後又進行歸併排序。然後進行reduce處理 最終結果寫到hdfs上面。

如果指定reducetask的數量為1 那麼任何數摸1都會得0 其實就乙個分割槽號0 如果指定reducetask 其實最多就2個分割槽 分割槽號0 和分割槽號1 

自定義hadoop 可以比較 可以序列化的bean

public class flowbean implements writablecomparable

public flowbean(long downflow, long upflow, string phonenumber)

/*** this.sumflow指定引數 返回-1 指定引數要靠前 在這裡 總流量大的靠前

* @param o 方法引數

* @return

*/@override

public int compareto(flowbean o)

/*** 從磁碟到記憶體

* @param dataoutput

* @throws ioexception

*/@override

public void write(dataoutput dataoutput) throws ioexception

/*** 序列化 從記憶體到磁碟

* @param datainput

* @throws ioexception

*/@override

public void readfields(datainput datainput) throws ioexception

private long upflow;

private long downflow;

private long sumflow;

private string phonenumber;

public long getupflow()

public void setupflow(long upflow)

public long getdownflow()

public void setdownflow(long downflow)

public long getsumflow()

public void setsumflow(long sumflow)

public string getphonenumber()

public void setphonenumber(string phonenumber)

public void set(string phonenumber, long upflow, long downflow)

@override

public string tostring()

}

**runner如下

map到reduce中間的shuffle會根據key進行sort哦  

好的 我們下次再見

十天學會php之第八天

學習目的 做乙個分頁顯示 關鍵就是用到了sql語句中的limit來限定顯示的記錄從幾到幾。我們需要乙個記錄當前頁的變數 page,還需要總共的記錄數 num 對於 page如果沒有我們就讓它 0,如果有 0就讓它也 0,如果超過了總的頁數就讓他 總的頁數。execc select count fro...

十天學會php之第八天

文字關鍵字 程式設計 php 技巧 execc selectcount fromtablename resultc mysql query execc rsc mysql fetch array resultc num rsc 0 這樣可以得到記錄總數 ceil num 10 如果一頁10記錄的話,...

十天學會php之第八天

學習目的 做乙個分頁顯示 關鍵就是用到了sql語句中的limit來限定顯示的記錄從幾到幾。我們需要乙個記錄當前頁的變數 page,還需要總共的記錄數 num 對於 page如果沒有我們就讓它 0,如果有 0就讓它也 0,如果超過了總的頁數就讓他 總的頁數。execc select count fro...