1. 程式人生 > >MapReduce例項淺析

MapReduce例項淺析

Hadoop Map/Reduce是一個使用簡易的軟體框架,基於它寫出來的應用程式能夠執行在由上千個商用機器組成的大型叢集上,並以一種可靠容錯的方式並行處理上T級別的資料集。

一個Map/Reduce 作業(job) 通常會把輸入的資料集切分為若干獨立的資料塊,由 map任務(task)以完全並行的方式處理它們。框架會對map的輸出先進行排序, 然後把結果輸入給reduce任務。通常作業的輸入和輸出都會被儲存在檔案系統中。 整個框架負責任務的排程和監控,以及重新執行已經失敗的任務。

通常,Map/Reduce框架和分散式檔案系統是執行在一組相同的節點上的,也就是說,計算節點和儲存節點通常在一起。這種配置允許框架在那些已經存好資料的節點上高效地排程任務,這可以使整個叢集的網路頻寬被非常高效地利用。

Map/Reduce框架由一個單獨的master JobTracker 和每個叢集節點一個slave TaskTracker共同組成。master負責排程構成一個作業的所有任務,這些任務分佈在不同的slave上,master監控它們的執行,重新執行已經失敗的任務。而slave僅負責執行由master指派的任務。

應用程式至少應該指明輸入/輸出的位置(路徑),並通過實現合適的介面或抽象類提供map和reduce函式。再加上其他作業的引數,就構成了作業配置(job configuration)。然後,Hadoop的 job client提交作業(jar包/可執行程式等)和配置資訊給JobTracker,後者負責分發這些軟體和配置資訊給slave、排程任務並監控它們的執行,同時提供狀態和診斷資訊給job-client。

雖然Hadoop框架是用Java實現的,但Map/Reduce應用程式則不一定要用 Java來寫 。

2.樣例分析:單詞計數

1、WordCount原始碼分析

單詞計數是最簡單也是最能體現MapReduce思想的程式之一,該程式完整的程式碼可以在Hadoop安裝包的src/examples目錄下找到

單詞計數主要完成的功能是:統計一系列文字檔案中每個單詞出現的次數,如圖所示:

(1)Map過程

Map過程需要繼承org.apache.hadoop.mapreduce包中的Mapper類,並重寫map方法

通過在map方法中新增兩句把key值和value值輸出到控制檯的程式碼,可以發現map方法中的value值儲存的是文字檔案中的一行(以回車符作為行結束標記),而key值為該行的首字元相對於文字檔案的首地址的偏移量。然後StringTokenizer類將每一行拆分成一個個的單詞,並將<word,1>作為map方法的結果輸出,其餘的工作都交由MapReduce框架處理。其中IntWritable和Text類是Hadoop對int和string類的封裝,這些類能夠被序列化,以方便在分散式環境中進行資料交換。

TokenizerMapper的實現程式碼如下:

1 2 3 4 5 6 7 8 9 10 11 12 13 14 public static class TokenizerMapper extends Mapper<Object, Text, Text, IntWritable>{ private final static IntWritable one = new IntWritable(1); private Text word = new Text(); public void map(Object key, Text value, Context context) throws IOException, InterruptedException { System.out.println("key = " + key.toString());//新增檢視key值 System.out.println("value = " + value.toString());//新增檢視value值 StringTokenizer itr = new StringTokenizer(value.toString()); while (itr.hasMoreTokens()) { word.set(itr.nextToken()); context.write(word, one); } } }

(2)Reduce過程

Reduce過程需要繼承org.apache.hadoop.mapreduce包中的Reducer類,並重寫reduce方法

reduce方法的輸入引數key為單個單詞,而values是由各Mapper上對應單詞的計數值所組成的列表,所以只要遍歷values並求和,即可得到某個單詞的出現總次數

IntSumReduce類的實現程式碼如下:

1 2 3 4 5 6 7 8 9 10 11 12 public static class IntSumReducer extends Reducer<Text,IntWritable,Text,IntWritable> { private IntWritable result =

相關推薦

MapReduce例項淺析

Hadoop Map/Reduce是一個使用簡易的軟體框架,基於它寫出來的應用程式能夠執行在由上千個商用機器組成的大型叢集上,並以一種可靠容錯的方式並行處理上T級別的資料集。 一個Map/Reduce 作業(job) 通常會把輸入的資料集切分為若干獨立的資料塊,由 map任務(task)以完全並

偽分散式執行Hadoop例項之yarn執行MapReduce例項

一、配置叢集 配置yarn-env.sh檔案 配置一下JAVA_HOME 配置yarn-site.xml <!-- reducer獲取資料的方式 --> <property> <name>yarn.nodemanager.au

Hadoop的MapReduce例項講解—Python寫的WordCount Demo

MapReduce是hadoop這隻大象的核心,Hadoop 中,資料處理核心就是 MapReduce 程式設計模型。一個Map/Reduce 作業(job) 通常會把輸入的資料集切分為若干獨立的資料塊,由 map任務(task)以完全並行的方式處理它們

執行一個mapreduce例項

本文改編自開啟 因為參考文中步驟有部分執行不正確,所以自己記錄下自己的步驟,並將原因整理了下。 Score.java檔案 下載 import java.io.IOException; import java.util.Iterator; import

Mapreduce例項-分組排重(group by distinct)

需要實現以下幾個類,程式碼太多,列了下主要程式碼,可根據排重資料的特徵判讀是否需要新增combiner來提速。public class GroupComparator implements RawComparator<MyBinaryKey> { @Over

【Hadoop】Windows 10 在Intellij IEDA本地執行Hadoop MapReduce例項

環境: 作業系統:Windows 10 Hadoop版本:2.7.3 Java版本: 1.8 前期準備: 1. 配置hadoop環境。 2. 配置maven環境。 1.下載maven部署包apache-maven-3.5.3-

7.測試hadoop安裝成功與否,並跑mapreduce例項

start-all.sh 2.建立hdfs目錄 hadoop fs -mkdir /input 3.上傳檔案 hadoop fs -put /data/hadoop-2.6.5/README.txt /input/ 4.修改檔名稱 hadoop fs -mv /input/READ

MapReduce例項】資料去重

一、例項描述 資料去重是利用並行化思想來對資料進行有意義的篩選。統計大資料集上的資料種類個數、從網站日誌中計算訪問等這些看似龐大的任務都會涉及資料去重。 比如,輸入檔案 file1.txt,其內容如下: 2017-12-9 a 2017-12-10 b

hadoop入門(六)JavaAPI+Mapreduce例項wordCount單詞計數詳解

剛剛研究了一下haoop官網單詞計數的例子,把詳細步驟解析貼在下面: 準備工作: 1、haoop叢集環境搭建完成 2、新建一個檔案hello,並寫入2行單詞,如下: [[email protected] hadoop-2.6.0]# vi hello hello

MapReduce例項

本文參考http://michaelnielsen.org/blog/page/19/ 從MapReduce的經典例子—單詞統計開始。 一個MapReduce job的輸入是一個(input_key, input_value)這樣的鍵值對集合。鍵值對集合可以

[hadoop]MapReduce例項之好友推薦(六)

一、定義好友檔案qq hadoop hello hdfs world tom cat cat dog hello world hello hdfs hadoop好友hello,hdfs好友worl

[Linux]例項淺析epoll的水平觸發和邊緣觸發,以及邊緣觸發為什麼要使用非阻塞IO

1 /* 2 *url:http://www.cnblogs.com/yuuyuu/p/5103744.html 3 * 4 */ 5 6 #include <stdio.h> 7 #include <stdlib.h> 8 #include

Hadoop那些事兒(三)---MapReduce程式設計淺析

1.map和reduce 1.1 mapReduce處理邏輯 在本系列文章的第一篇中,曾對MapReduce原理做過簡單的描述,在這裡再重述一遍。 首先我們有兩個檔案word1.txt和word2.txt 其中word1.txt的內容如下: a

hodoop中使用MapReduce例項

網址: 1、http://hadoop.apache.org/docs/stable/hadoop-mapreduce-client/hadoop-mapreduce-client-core/MapReduceTutorial.html 2、http://eric-gcm.

Mapreduce例項---分割槽流量彙總

一:問題介紹 給一個數據檔案,檔案包含手機使用者的各種上網資訊,求每個手機使用者的總上行流量,總下行流量和總流量;並且按號碼歸屬地分省份彙總。 資料流程: 二:需要的jar包 hadoop-2

Mapreduce例項---統計單詞個數(wordcount)

一:問題介紹 統計每一個單詞在整個資料集中出現的總次數。 資料流程: 二:需要的jar包 Hadoop-2.4.1\share\hadoop\hdfs\hadoop-hdfs-2.4.1.ja

一個mapreduce例項加註釋

1.WCMapper.java package cn.itcast.hadoop.mr.wordcount; import java.io.IOException; import org.apache.commons.lang.StringUtils; import o

Hadoop2.0 Mapreduce例項WordCount體驗

     在Hadoop2.0中MapReduce程式的都需要繼承org.apache.hadoop.mapreduce.Mapper 和 org.apache.hadoop.mapreduce.Reducer這兩個基礎類,來定製自己的mapreduce功能,原始碼中主要的

[轉]MapReduce淺析

偏移量 統計 這也 tasks 分別是 practice 介紹 存儲節點 pro 本文轉自http://edisonchou.cnblogs.com/ 一、神馬是高大上的MapReduce   MapReduce是Google的一項重要技術,它首先是一個編程模型,用以進行大

MapReduce簡介和過程淺析

http putc 後臺 產生 collect map() shuf 具體步驟 大數據 預備知識:什麽是hadoop,HDFS? Hadoop是一個開源框架,它允許在整個集群使用簡單編程模型計算機的分布式環境存儲並處理大數據。它的目的是從單一的服務器到上千臺機器的擴展,每一