MapReduce:簡單介紹

MapReduce是Google流行的一種并行編程技術。 它用于處理大量數據。 僅通過將工作并行分配給多臺機器,就可以在合理的時間內完成這種處理。 每臺機器都處理一小部分數據。

MapReduce是一種編程模型,使開發人員可以專注于編寫處理數據的代碼,而不必擔心并行執行的細節。

MapReduce需要將要處理的數據建模為鍵值對。 開發人員編寫了map函數和reduce函數的代碼。

MapReduce運行時為每個鍵/值對調用map函數。 映射功能將鍵值對作為輸入,并產生另一個鍵值對的輸出。

MapReduce運行時通過鍵對映射函數的輸出進行排序和分組。 然后,它調用將其傳遞給鍵的reduce函數以及與該鍵關聯的值的列表。 為每個鍵調用reduce函數。 reduce函數的輸出是鍵值對。 該值通常是聚合值或通過處理為輸入鍵傳遞的值列表而計算出的值。 對于由map函數生成的每個中間鍵,調用reduce函數。 reduce函數的輸出是必需的結果。

例如,假設您有大量的日志文件,其中包含某些事件(例如訪問帳戶)的審核日志。 您需要找出過去10年中每個帳戶被訪問了多少次。
假定日志文件中的每一行都是審核記錄。 我們正在逐行處理日志文件,map和reduce函數如下所示:

map(key , value) {// key = byte offset in log file // value = a line in the log fileif ( value is an account access audit log) {account number = parse account from valueoutput key = account number, value = 1}
}reduce(key, list of values) {// key = account number// list of values {1,1,1,1.....}for each valuecount = count + valueoutput key , count 
}

每個日志文件中的每一行都會調用map函數。 不相關的行將被忽略。 從相關行中解析出帳號,并輸出一個值1。MapReduce運行時按帳號對輸出進行排序和分組。 為每個帳戶調用reduce函數。 reduce函數匯總每個帳戶的值,這是必需的結果。

MapReduce作業通常在計算機集群上執行。 每臺機器執行一個任務,該任務可以是映射任務,也可以是歸約任務。 每個任務都在處理數據的子集。 在上面的示例中,假設我們從一組大型輸入文件開始。 MapReduce運行時將輸入數據分為稱為分割或碎片的分區。 每個拆分或碎片均由計算機上的映射任務處理。 每個映射任務的輸出均按鍵排序和分區。 來自所有映射的輸出被合并以創建輸入到reduce任務的分區。

可以有多臺計算機,每臺計算機都運行簡化任務。 每個reduce任務都有一個要處理的分區。 該分區可以具有多個鍵。 但是每個鍵的所有數據都在1個分區中。 換句話說,每個鍵只能處理1個縮減任務。

機器數量,映射任務數量,reduce任務數量以及其他幾項都是可配置的。

對于需要對大數據集進行某些處理的問題,MapReduce非常有用。 該算法可以分解為map和reduce函數。 MapReduce運行時負責將處理分配到多臺計算機并匯總結果。

Apache Hadoop是mapreduce的開源Java實現。 請繼續關注有關使用hadoop的有關mapreduce的未來博客/教程。

參考: 什么是MapReduce? 來自我們的JCG合作伙伴在“ Khangaonkar報告”中的報道 。

相關文章 :
  • Cajo,用Java完成分布式計算的最簡單方法
  • Hibernate映射集合性能問題
  • Java Code Geeks Andygene Web原型
  • Servlet 3.0異步處理可將服務器吞吐量提高十倍

翻譯自: https://www.javacodegeeks.com/2011/05/mapreduce-soft-introduction.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/374603.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/374603.shtml
英文地址,請注明出處:http://en.pswp.cn/news/374603.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

python翻譯詞典實例

#!/usr/bin/python # -*- coding:utf-8 -*- #通過有道翻譯來進行內容翻譯 import urllib2 import urllib import json #---------翻譯方法定義 start---------# def transfer( transferStr , lanSource auto ): data {type:lanSource,i:transferStr,doctype:json,xmlVersion:1…

元素分類--塊級元素(特點:獨占一行, 寬高邊距可改)

什么是塊級元素&#xff1f;在html中<div>、 <p>、<h1>、<form>、<ul> 和 <li>就是塊級元素。設置display:block就是將元素顯示為塊級元素。如下代碼就是將內聯元素a轉換為塊狀元素&#xff0c;從而使a元素具有塊狀元素特點。 a{display:b…

Java應用程序中的消息傳遞主體

消息傳遞是每個Java應用程序的關鍵方面&#xff0c;尤其是對于涉及企業應用程序集成&#xff08;EAI&#xff09;或關注點分離的應用程序&#xff0c;例如多層WEB應用程序。 消息傳遞可以分為兩個主要類別&#xff0c;即同步和異步。 另一方面&#xff0c;使用同步消息傳遞時&…

站立會議05(第二次沖刺)

一、站立會議信息&#xff08;配站立會議照片&#xff09; 第五天我們繼續開發&#xff0c;把注冊驗證信息完善一下&#xff0c;將開始網站公共主頁的開發。 二、任務進度 第五天我們注冊驗證完成。 三、任務看板&#xff08;圖&#xff09; 四、燃盡圖&#xff08;圖&#xff…

[SoapUI] DataSource, DataSourceLoop, DataSink

Script assertion in login: 轉載于:https://www.cnblogs.com/MasterMonkInTemple/p/4748189.html

1154. 一年中的第幾天

給你一個字符串 date &#xff0c;按 YYYY-MM-DD 格式表示一個 現行公元紀年法 日期。請你計算并返回該日期是當年的第幾天。 通常情況下&#xff0c;我們認為 1 月 1 日是每年的第 1 天&#xff0c;1 月 2 日是每年的第 2 天&#xff0c;依此類推。每個月的天數與現行公元紀年…

將CAPTCHA添加到您的GWT應用程序

什么是驗證碼&#xff1f; 在一個充滿惡意機器人的世界中&#xff0c;您該怎么做才能保護您寶貴的Web應用程序&#xff1f; 您真正應該做的基本事情之一就是向其中添加CAPTCHA功能。 如果您不熟悉&#xff08;聽起來有些奇怪&#xff09;&#xff0c;則CAPTCHA是確保用戶實際上…

SQL基礎語句

數據庫面試常見題 一、SQL語言包括數據定義語言、數據操作語言、數據控制語言和事務控制語言1&#xff1a;DDL(Data Definition Language)&#xff0c;是用于描述數據庫中要存儲的現實世界實體的語言。 CREATE TABLE - 創建新表 ALTER TABLE - 變更&#xff08;改變&#xff0…

YYModel Summary

YYModel Effect-> YYModel的作用Provide some data-model method—>提供一些數據模型的方法Convert json to any object, or convert any object to json.->對任何對象轉換成JSON&#xff0c;和對任何JSON轉換為對象Set object properties with a key-value dictionar…

iOS學習——ScrollView圖片輪播和同類控件優先級問題

iOS學習——ScrollView的使用和同類控件優先級問題 1. 布置界面 ScrollView的使用非常簡單&#xff0c;只有三步 1.1 添加一個scrollview 1.2 向scrollview添加內容 1.3 告訴scrollview中內容的實際大小 首先做第一步&#xff0c;布置界面。 拖拽一個scrollview就可以了 就…

Exchanger和無GC的Java

總覽 Exchanger類在線程之間傳遞工作和回收使用的對象方面非常有效。 AFAIK&#xff0c;它也是最少使用的并發類之一。 但是&#xff0c;如果您不需要GC&#xff0c;則使用ArrayBlockingQueue進行日志記錄會更簡單。 交換器類 Exchanger類對于在兩個線程之間來回傳遞數據很有…

構造函數的反射

1 import java.lang.reflect.Constructor;2 3 public class zzbds {4 public static void main(String[] args) {5 6 try{ 7 Class cStudent.class; //獲得無參構造函數8 Constructor constructorc.getConstructor(new Class[]{…

字符串連接“+”int、char、string

String s1 "21" "8" "54";System.out.println(s1);String s2 "21" 8 "54";System.out.println(s2);String s3 "21" 8 "54";System.out.println(s3);21854 21854 21854

使用Spring使用Java發送電子郵件– GMail SMTP服務器示例

對于使用Java發送電子郵件&#xff0c; JavaMail API是標準解決方案。 如官方網頁所述&#xff0c;“ JavaMail API提供了獨立于平臺和協議的框架來構建郵件和消息傳遞應用程序”。 必需的類包含在JavaEE平臺中&#xff0c;但是要在獨立的JavaSE應用程序中使用它&#xff0c;您…

Java字符與數字的計算

先看例子&#xff1a; char ch;int x;int y 7;System.out.print("7的ASCII碼值是&#xff1a;");System.out.println(y);ch 7 2;System.out.print("7 2的char型&#xff1a;");System.out.println(ch);x 7 2;System.out.print("7 2的int型&…

wordcount

源代碼如下 package org.apache.hadoop.examples; import java.io.IOException; import java.util.StringTokenizer; import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.fs.Path; import org.apache.hadoop.io.IntWritable; import org.apache.hadoop.io…

EJB 3.1全局JNDI訪問

如本系列前面的部分所述&#xff0c;EJB 3.0版規范的主要缺點是缺少可移植的全局JNDI名稱。 這意味著沒有可移植的方式將EJB引用鏈接到應用程序外部的Bean。 EJB v。3.1規范用自己的話填補了這一定義&#xff1a; “一個標準化的全局JNDI名稱空間和一系列相關的名稱空間&#…

Git 分支管理和沖突解決

創建分支 git branch 沒有參數&#xff0c;顯示本地版本庫中所有的本地分支名稱。 當前檢出分支的前面會有星號。 git branch newname 在當前檢出分支上新建分支&#xff0c;名叫newname。 git checkout newname 檢出分支&#xff0c;即切換到名叫newname的分支。 git checkout…

力扣打開轉盤鎖

打開轉盤鎖 評論區大神代碼&#xff1a; public int openLock(String[] deadends, String target) {Set<String> set new HashSet<>(Arrays.asList(deadends));//開始遍歷的字符串是"0000"&#xff0c;相當于根節點String startStr "0000";i…

EJB程序化查找

在上一篇文章中&#xff0c;我們了解了EJB 引用和EJB 注入 。 盡管EJB注入是一種強大的容器工具&#xff0c;可以簡化模塊化應用程序的開發&#xff0c;但有時還是需要執行程序化EJB查找。 讓我們假設&#xff0c;例如&#xff0c;一組不同的EJB實現了由公共業務接口定義的公共…