mapreduce
一.mapreduce是個分布式運算程 序的程式設計框架,是使用者開發「基於hadoop的
資料分析應用」的核心框架。
mapreduce核心功能是將使用者編寫的業務邏輯**和自帶預設元件整合成乙個
完整的分布式運算程式,併發執行在乙個hadoop集群 上。
二.mapreduce優缺點
1.2.1優點
mapreduce籲程式設計
它簡單的實現一些介面,就可以完成乙個分布式程式,這個分布式程式可
以分布到大量廉價的pc機器上執行。也就是說你寫乙個分布式程式, 跟寫
-個簡單的序列程式是一模樣的。 就是因為這個特點使得mapreduce編
程變得非常流行。
2.良好的擴充套件性
當你的計算資源不能得到滿足的時候,你可以通過簡單的增加機器來擴充套件.
它的計算能力。
3.容錯性
mapreduce設計的初衷就是使程式能夠部署在廉價的pc機器上,這就要求
它具有很高的容錯性。比如其中一台機器掛了,它可以把上面的計算任務
轉移到另外乙個節點上執行,不至於這個任務執行失敗,而且這個過程不
需要人工參與,而完全是由hadoop內部完成的。
4.適合pb級以上海量資料的離線處理
可以實現上千臺伺服器集群併發工作,提供資料處理能力。
mapreduce優缺點
1.2.2缺點
1.不擅長實時計算
mapreduce無法像mysql-樣,在毫秒或者秒級內返回結果。
2.不擅長流式計算
流式計算的輸入資料是動態的,而mapreduce的輸入資料集是靜態的,不能
動態變化。這是因為mapreduce自身的設計特點決定了資料來源必須是靜態的。
3.不擅長dag (有向圖)計算
多個應用程式存在依賴關係,後乙個應用程式的輸入為前乙個的輸出。在
這種情況下,mapreduce並不是不能做,而是使用後,每個mapreduce作業
的輸出結果都會寫入到磁碟,會造成大量的磁碟io,導致效能非常的低下。
三.(1)必須實現writable介面
(2)反序列化時,需要反射呼叫空參建構函式,所以必須有空參構造
public flowbean()
(3)重寫序列化方法
@override
public void write(dataoutput out) throws ioexception
(4)重寫反序列化方法
@override
public void readfields(datainput in) throws ioexception
(5)注意反序列化的順序和序列化的順序完全一致
(6)要想把結果顯示在檔案中,需要重寫tostring(),可用」\t」分開,方便後續用。
(7)如果需要將自定義的bean放在key中傳輸,則還需要實現comparable介面,因為mapreduce框中的shuffle過程要求對key必須能排序。詳見後面排序案例。
@override
public int compareto(flowbean o)
四.五.
1)maptask收集我們的map()方法輸出的kv對,放到記憶體緩衝區中
2)從記憶體緩衝區不斷溢位本地磁碟檔案,可能會溢位多個檔案
3)多個溢位檔案會被合併成大的溢位檔案
4)在溢位過程及合併的過程中,都要呼叫partitioner進行分割槽和針對key進行排序
5)reducetask根據自己的分割槽號,去各個maptask機器上取相應的結果分割槽資料
6)reducetask會取到同乙個分割槽的來自不同maptask的結果檔案,reducetask會將這些檔案再進行合併(歸併排序)
7)合併成大檔案後,shuffle的過程也就結束了,後面進入reducetask的邏輯運算過程
(從檔案中取出乙個乙個的鍵值對group,呼叫使用者自定義的reduce()方法)
六.(1)combiner的意義就是對每乙個maptask的輸出進行區域性彙總,以減小網路傳輸量;
(2)並不是任何情況都能夠使用combiner,我們需要在不影響業務的情況下使用它。
七.小檔案的優化無非以下幾種方式:
(1)在資料採集的時候,就將小檔案或小批資料合成大檔案再上傳hdfs。
(2)在業務處理之前,在hdfs.上使用mapreduce程式對小檔案進行合併。
(3)在mapreduce處理時,可採用combinetextinputformat提高效率。
hdfs小檔案解決方案
hadoop archive
是乙個高效地將小檔案放入hdfs塊中的檔案存檔工具,它能夠將多個小
檔案打包成乙個har檔案, 這樣就減少了namenode的記憶體使用。
sequence file
sequence file由一系列的二進位制key alue組成,如果key為檔名,value為
檔案內容,則何以將大批小檔案合併成乙個大檔案。
combinefilelnputformat
combinef ileinputf ommat是一種新的inputformat, 用於將多個檔案合併成一
個單獨的split,另外,它會考慮資料的儲存位置
hdfs小檔案解決方案
4.開啟jvm重用
對於大量小檔案job,可以開啟jvm重用會減少45%執行時間。
jvm重用原理: -個map執行在乙個jvm上, 開啟重用的話,該map在jvm
上執行完畢後,jvm繼續執行其他map.
具體設定: . mapreduce job jvm nuntasks值在10-20之間。 八.
4.3.2 bzip2壓縮
bzip2壓縮
優點:支援split; 具有很高的壓縮率,比gzip壓縮率都高; hadoop本身自
帶,使用方便。
缺點:壓縮解壓速度慢。
應用場景:適合對速度要求不高,但需要較高的壓縮率的時候;或者輸出
之後的資料比較大,處理之後的資料需要壓縮存檔減少磁碟空間並且以後數
據用得比較少的情況;或者對單個很大的文字檔案想壓縮減少儲存空間,同
時又需要支援split,而且相容之前的應用程式的情況。
4.3 lzo壓縮
lzo壓縮
優點:壓縮解壓速度也比較快,合理的壓縮率;支援split, hadoop中最
流行的壓縮格式;可以在l inux系統下安裝lzop命令,使用方便。
缺點:壓縮率比gzip要低-些; hadoop本身不支援,需要安裝;在應用中
對lzo格式的檔案需要做一些特殊處理(為 了支援split需要建索引,還需要指
定inputf ormat為lzo格式)。
應用場景:乙個很大的文字檔案,壓縮之後還大於200m以上的可以考慮,
而且單個檔案越大,lzo優點越越明顯。
python複習第一階段
linux基礎命令 cd 切換目錄和路徑 pwd 檢視當前路徑 clear 清屏 mv 移動 剪下 重新命名檔案 ls 檢視當前資料夾下的內容 ls a 顯示指定目錄下所有子目錄和檔案,包括隱藏檔案 ls l 以列表方式顯示檔案的詳細資訊 touch 建立檔案 mkdir 建立目錄 mkdir p ...
第一階段練習
1 輸入乙個整數,把該整數分別按照八進位制 十進位制 十六進製制形式輸出 include stdio.h main 2 輸入乙個小數 整數部分3位 小數部分5位 把該小數分別按照以下格式輸出 小數部分4位寬度,整個數字8位寬度 小數部分3位寬度,整個數字9位寬度,空白部分使用0填充 include ...
第一階段 2015 12 2016 03
距離上一次寫部落格,大半年就過去了,這半年,都做了些什麼呢,生活又都有些什麼變化呢。2015的下半年是收穫的半年吧。第二,學ios的過程中結識了新的朋友,耳機哥,是很棒的一件事。第三,得到了乙份很美滿的愛情。最終在一起,還好沒錯過。第四,開始正視自己的不足,不再逃避,開始認真製作簡歷,並開始找工作,...