mapreduce基本原理
一,概念理解
1,mapreduce是乙個分布式運算程式的程式設計架構,相對於hdfs來說就是客戶端。其核心功能就是將使用者編寫的業務邏輯**和自帶預設元件整合成乙個完整的分布式運算程式,並執行在乙個hadoop集群上。
二,mapreduce框架結構及核心執行機制
2,mr程式執行的流程(以wordcount為例子)
maptask啟動後根據給定的切片範圍進行資料處理。
執行reducertask,將運算結果通過使用者指定的outputformat將結果輸出到外部儲存。
三,mapreduce程式的執行模式
1,本地執行模式:而處理的資料及輸出結果可以在本地檔案系統。
2,集群執行模式:將mapreduce程式提交給yarn集群resourcemanager,分發到很多的節點上併發執行處理的資料和輸出結果應該位於hdfs檔案系統。
四,wordcount示例編寫
1,定義乙個
類
package com;2,定義乙個reducer類import j**a.io.ioexception;
import org.apache.hadoop.io.intwritable;
import org.apache.hadoop.io.longwritable;
import org.apache.hadoop.io.text;
/*keyin指的是輸入的key
* valueuin指的是輸入的value
* keyout輸出的key值
* valueout輸出的value值
*/ /*longwritable key 讀取檔案內容的偏移量
* text value 文字neirong
* * */
//從寫map方法
@override
throws ioexception, interruptedexception
}}
package3,定義乙個主類,用來描述job並提交jobcom;
import
j**a.io.ioexception;
import
j**a.util.iterator;
import
org.apache.hadoop.io.intwritable;
import
org.apache.hadoop.io.text;
import
org.apache.hadoop.mapreduce.reducer;
/** reduce的keyin指的是輸入的key
* reduce的valuein 指的是輸入的value
* redude的keyout指的是 輸出的key
* reduce 的valueout 指的是 輸出的value值
* *
* */
public
class wordcountreducer extends reducer
context.write(keyin,
newintwritable(count));
} }
packagecom;
import
org.apache.hadoop.conf.configuration;
import
org.apache.hadoop.fs.path;
import
org.apache.hadoop.io.intwritable;
import
org.apache.hadoop.mapred.jobconf;
import
org.apache.hadoop.mapreduce.job;
import
org.apache.hadoop.mapreduce.lib.input.fileinputformat;
import
org.apache.hadoop.mapreduce.lib.output.fileoutputformat;
import
com.sun.jersey.core.impl.provider.entity.xmljaxbelementprovider.text;
public
class
wordcountsubmit
}
MapReducer程式除錯技巧
寫過程式分布式 的人都知道,分布式的程式是比較難以除錯的,但是也不是不可以除錯,對於hadoop分布式集群來說,在其上面執行的是mapreduce程式,因此,有時候寫好了mapreduce程式之後,執行結果發現跟自己想要的結果不一樣,但是有沒有報錯,此時就很難發現問題,查詢問題的方法之一就是對程式進...
MapReducer中的多次歸約處理
我們知道,mapreduce 在reducer 可能有人疑惑幾個問題 端進行歸約處理?端進行歸約處理?端可以進行歸約處理,為什麼在reducer端還要處理?進行歸約後,資料量變小了,這樣再通過網路傳輸時,傳輸時間就變短了,減少了整個作業的執行時間。回答第二個問題 因為reducer 進行歸約的類稱為...
MapReducer糾錯之序列化反序列化問題
在mapreducer程式設計中經常會出現序列化反序列化的說法 在這裡解釋一下 序列化 序列化的意思就是把記憶體中的物件變成位元組儲存到磁碟上 反序列化 反序列化的意思就是把磁碟上的物件活化到記憶體中 說到這裡也許還是沒有說清楚序列化的意思,在大資料中,假設有乙個非常大的集群,也就是很多計算機,這一...