国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

Hadoop的第二個(gè)核心組件:MapReduce框架第一節(jié)

這篇具有很好參考價(jià)值的文章主要介紹了Hadoop的第二個(gè)核心組件:MapReduce框架第一節(jié)。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

一、基本概念

Hadoop解決了大數(shù)據(jù)面臨的兩個(gè)核心問題:海量數(shù)據(jù)的存儲(chǔ)問題、海量數(shù)據(jù)的計(jì)算問題

其中MapReduce就是專門設(shè)計(jì)用來解決海量數(shù)據(jù)計(jì)算問題的,同時(shí)MapReduce和HDFS不一樣的地方在于,雖然兩者均為分布式組件,但是HDFS是一個(gè)完善的軟件,我們只需要使用即可,不需要去進(jìn)行任何的邏輯的編輯。而MapReduce進(jìn)行數(shù)據(jù)計(jì)算,計(jì)算什么樣的數(shù)據(jù),使用什么樣的邏輯,MR程序都不清楚,因此MR只是一個(gè)分布式的計(jì)算【框架】,所謂的框架就是MR程序把分布式計(jì)算的思想和邏輯全部封裝好了,我們只需要按照框架的思維編寫計(jì)算代碼(就是我們自己處理數(shù)據(jù)的邏輯代碼),編寫完成之后,我們的程序必然是分布式的程序。

使用分布式計(jì)算框架的好處就在于我們開發(fā)人員只需要把關(guān)注點(diǎn)和重點(diǎn)放在業(yè)務(wù)的邏輯開發(fā),而非分布式計(jì)算程序邏輯的邏輯。

二、MapReduce的分布式計(jì)算核心思想

MR框架實(shí)現(xiàn)分布式計(jì)算的邏輯是將MR程序分成了兩部分:Map階段、Reduce階段

其中運(yùn)行一個(gè)計(jì)算程序先執(zhí)行Map階段,map階段又可以同時(shí)運(yùn)行多個(gè)計(jì)算程序(MapTask)去計(jì)算map階段的邏輯,Map階段主要負(fù)責(zé)分?jǐn)?shù)據(jù),而且map階段的多個(gè)MapTask并行運(yùn)行互不干擾。

第二階段Reduce階段,Reduce階段也可以同時(shí)運(yùn)行多個(gè)計(jì)算程序(ReduceTask),Reduce階段的任務(wù)主要負(fù)責(zé)合數(shù)據(jù),同時(shí)多個(gè)ReduceTask同時(shí)運(yùn)行互不干擾的。

任何一個(gè)MR程序,只能有一個(gè)Map階段,一個(gè)Reduce階段。

三、MapReduce程序在運(yùn)行過程中三個(gè)核心進(jìn)程

MRAppMaster(一個(gè)):負(fù)責(zé)整個(gè)分布式程序的監(jiān)控

MapTask(多個(gè)):Map階段的核心進(jìn)程,每一個(gè)MapTask處理數(shù)據(jù)源的一部分?jǐn)?shù)據(jù)

ReduceTask(多個(gè)):Reduce階段的核心進(jìn)程,每一個(gè)ReduceTask負(fù)責(zé)處理Map階段輸出的一部分?jǐn)?shù)據(jù)

四、如何編寫MapReduce計(jì)算程序:(編程步驟)

1、編寫MapTask的計(jì)算邏輯

1、編寫一個(gè)Java類繼承Mapper類,繼承Mapper類之后必須指定四個(gè)泛型,四個(gè)泛型分別代表了MapTask階段的輸入的數(shù)據(jù)和輸出的數(shù)據(jù)類型。
MR程序要求輸入的數(shù)據(jù)和輸出的數(shù)據(jù)類型必須都得是key-value鍵值對(duì)類型的數(shù)據(jù)。

2、重寫繼承的Mapper類當(dāng)中的map方法,map方法處理數(shù)據(jù)的時(shí)候是文件中的一行數(shù)據(jù)調(diào)用一次map方法,map方法的計(jì)算邏輯就是MapTask的核心計(jì)算邏輯。

3、同時(shí)map方法中數(shù)據(jù)計(jì)算完成,需要把數(shù)據(jù)以指定的key-value格式類型輸出。

2、編寫ReduceTask的計(jì)算邏輯

1、編寫一個(gè)Java類繼承Reducer類,繼承Reducer類之后必須指定四個(gè)泛型,四個(gè)泛型分別代表了Reduce階段的輸入和輸出的KV數(shù)據(jù)類型。
Reduce的輸入的KV類型就是Map階段的輸出的KV類型。
Reduce的輸出類型自定義的。

2、重寫Reducer類當(dāng)中提供的reduce方法,reduce方法處理數(shù)據(jù)的時(shí)候一組相同的key調(diào)用一次reduce方法,reduce方法的計(jì)算邏輯就是ReduceTask的核心計(jì)算邏輯。

3、調(diào)用reduce方法,reduce邏輯處理完成,需要把數(shù)據(jù)以指定的key-value格式類型輸出。

3、編寫Driver驅(qū)動(dòng)程序

Driver驅(qū)動(dòng)程序是用來組裝MR程序,組裝MR程序的處理的文件路徑、MR程序的Map階段的計(jì)算邏輯、MR程序的Reduce階段的計(jì)算邏輯、MR程序運(yùn)行完成之后的結(jié)果的輸出路徑。

Driver驅(qū)動(dòng)程序本質(zhì)上就是一個(gè)main函數(shù)

MapReduce底層是由Java開發(fā)的,因此MR程序我們要編寫的話支持使用Java代碼來進(jìn)行編寫

五、MapReduce的案例實(shí)現(xiàn) —— 大數(shù)據(jù)分布式計(jì)算的經(jīng)典案例WordCount(單詞計(jì)數(shù))

1、案例需求

現(xiàn)在有一個(gè)文件,文件很大,文件中存儲(chǔ)的每一行數(shù)據(jù)都是由空格分割的多個(gè)單詞組成的,現(xiàn)在需要通過大數(shù)據(jù)分布式計(jì)算技術(shù)去統(tǒng)計(jì)文件中每一個(gè)單詞出現(xiàn)的總次數(shù)

2、案例分析(基于MapReduce)

Hadoop的第二個(gè)核心組件:MapReduce框架第一節(jié),Hadoop,hadoop,mapreduce,大數(shù)據(jù)

3、代碼開發(fā)

1、創(chuàng)建一個(gè)maven管理的Java項(xiàng)目

2、引入MR的編程依賴

  • hadoop-client
  • hadoop-hdfs
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>

  <groupId>com.kang</groupId>
  <artifactId>mr-study</artifactId>
  <version>1.0-SNAPSHOT</version>
  <packaging>jar</packaging>

  <name>mr-study</name>
  <url>http://maven.apache.org</url>

  <properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <hadoop.version>3.1.4</hadoop.version>
  </properties>

  <dependencies>
    <dependency>
      <groupId>org.apache.hadoop</groupId>
      <artifactId>hadoop-client</artifactId>
      <version>${hadoop.version}</version>
    </dependency>
    <dependency>
      <groupId>org.apache.hadoop</groupId>
      <artifactId>hadoop-hdfs</artifactId>
      <version>${hadoop.version}</version>
    </dependency>
  </dependencies>
</project>

3、編寫Mapper階段的計(jì)算邏輯

package com.kang.wc;

import org.apache.hadoop.io.LongWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Mapper;

import java.io.IOException;

/**
 * 單詞計(jì)數(shù)的MapTask的計(jì)算邏輯
 * 1、繼承Mapper類。同時(shí)需要指定四個(gè)泛型 兩兩一組 分別 代表輸入的key value 和輸出的key value的數(shù)據(jù)類型
 *      默認(rèn)情況下,map階段讀取文件數(shù)據(jù)是以每一行的偏移量為key 整數(shù)類型 每一行的數(shù)據(jù)為value讀取的 字符串類型
 *      map階段輸出以單詞為key 字符串 以1為value輸出 整數(shù)
 *      數(shù)據(jù)類型不能使用Java中的數(shù)據(jù)類型,數(shù)據(jù)類型必須是Hadoop的一種序列化類型
 *      Int —— hadoop.io.IntWritable
 *      Long —— hadoop.io.LongWritable
 *      String —— hadoop.io.Text
 * 2、重寫map方法
 */
public class WCMapper extends Mapper<LongWritable, Text, Text, LongWritable> {
    /**
     * map方法就是MapTask的核心計(jì)算邏輯方法
     * map方法是切片中的一行數(shù)據(jù)調(diào)用一次
     * @param key   這一行數(shù)據(jù)的偏移量
     * @param value 這一行數(shù)據(jù)
     * @param context 上下文對(duì)象 用于輸出map階段處理完成的key value數(shù)據(jù)
     * @throws IOException
     * @throws InterruptedException
     */
    @Override
    protected void map(LongWritable key, Text value, Mapper<LongWritable, Text, Text, LongWritable>.Context context) throws IOException, InterruptedException {
        //拿到一行數(shù)據(jù),并且將一行數(shù)據(jù)轉(zhuǎn)成字符串類型
        String line = value.toString();
        //字符串以空格切割得到一個(gè)數(shù)組,數(shù)組中存放的就是一行的多個(gè)單詞
        String[] words = line.split(" ");
        //遍歷數(shù)組 得到每一個(gè)單詞 以單詞為key 以1為value輸出數(shù)據(jù)即可
        for (String word : words) {
            context.write(new Text(word),new LongWritable(1L));
        }
    }
}

4、編寫Reducer階段的計(jì)算邏輯

package com.kang.wc;

import org.apache.hadoop.io.LongWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Reducer;

import java.io.IOException;

/**
 * Reduce的編程邏輯:
 * 1、繼承Reducer類,指定輸入和輸出的kv類型
 *      輸入KV就是Map階段的輸出KV Text LongWritable
 *      輸出kv  Text LongWritable
 * 2、重寫reduce方法
 */
public class WCReducer extends Reducer<Text, LongWritable,Text,LongWritable> {
    /**
     * Reduce方法是Reduce階段的核心計(jì)算邏輯
     * reduce方法是一組相同的key執(zhí)行一次
     * @param key      一組相同的key  某一個(gè)單詞
     * @param values   是一個(gè)集合,集合存放的就是這一個(gè)單詞的所有的value值
     * @param context  上下文對(duì)象 用于reduce階段輸出數(shù)據(jù)
     * @throws IOException
     * @throws InterruptedException
     */
    @Override
    protected void reduce(Text key, Iterable<LongWritable> values, Reducer<Text, LongWritable, Text, LongWritable>.Context context) throws IOException, InterruptedException {
        //只需要將某個(gè)單詞聚合起來的value數(shù)據(jù)累加起來 得到總次數(shù)
        long sum = 0L;
        for (LongWritable value : values) {
            sum += value.get();
        }
        //只需要以單詞為key 以sum為value輸出即可
        context.write(key,new LongWritable(sum));
    }
}

5、編寫Driver驅(qū)動(dòng)程序

package com.kang.wc;

import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.io.LongWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Job;
import org.apache.hadoop.mapreduce.Mapper;
import org.apache.hadoop.mapreduce.Reducer;
import org.apache.hadoop.mapreduce.lib.input.FileInputFormat;
import org.apache.hadoop.mapreduce.lib.output.FileOutputFormat;

import java.io.IOException;

/**
 * Driver驅(qū)動(dòng)程序說白了就是封裝MR程序的
 * Driver驅(qū)動(dòng)程序其實(shí)就是一個(gè)main函數(shù)
 */
public class WCDriver {
    public static void main(String[] args) throws IOException, InterruptedException, ClassNotFoundException {
        //1、準(zhǔn)備一個(gè)配置文件對(duì)象Configuration
        Configuration conf = new Configuration();
        //指定HDFS的地址
        conf.set("fs.defaultFS","hdfs://192.168.31.104:9000");
        //2、創(chuàng)建封裝MR程序使用一個(gè)Job對(duì)象
        Job job = Job.getInstance(conf);
        //3、封裝處理的文件路徑hdfs://single:9000/wc.txt
        FileInputFormat.setInputPaths(job,new Path("/wc.txt"));
        //4、封裝MR程序的Mapper階段,還要封裝Mapper階段輸出的key-value類型
        job.setMapperClass(WCMapper.class);
        job.setMapOutputKeyClass(Text.class);
        job.setMapOutputValueClass(LongWritable.class);
        //5、封裝MR程序的Reducer階段,還要封裝reduce的輸出kv類型
        job.setReducerClass(WCReducer.class);
        job.setOutputKeyClass(Text.class);
        job.setMapOutputValueClass(LongWritable.class);
        job.setNumReduceTasks(1);//指定reduce階段只有一個(gè)ReduceTask
        //6、封裝MR程序的輸出路徑 —— 輸出路徑一定不能存在  如果存在會(huì)報(bào)錯(cuò)
        FileOutputFormat.setOutputPath(job,new Path("/wcoutput"));
        //7、提交運(yùn)行MR程序
        boolean flag = job.waitForCompletion(true);
        System.exit(flag?0:1);
    }
}

Hadoop的第二個(gè)核心組件:MapReduce框架第一節(jié),Hadoop,hadoop,mapreduce,大數(shù)據(jù)

Hadoop的第二個(gè)核心組件:MapReduce框架第一節(jié),Hadoop,hadoop,mapreduce,大數(shù)據(jù)

Hadoop的第二個(gè)核心組件:MapReduce框架第一節(jié),Hadoop,hadoop,mapreduce,大數(shù)據(jù)文章來源地址http://www.zghlxwxcb.cn/news/detail-697294.html

到了這里,關(guān)于Hadoop的第二個(gè)核心組件:MapReduce框架第一節(jié)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 面向?qū)ο蟮牡诙€(gè)基本特征:繼承011026

    生活中: ? ? ? ? 繼承 --- 延續(xù) ? ? ? ? ? ? ? ? --- 擴(kuò)展 代碼中: ? ? ? ? 繼承 --- 重復(fù)使用已有的類的代碼(復(fù)用) ? ? ? ? ? ? ? ? --- 擴(kuò)展已有類的代碼(擴(kuò)展) ① 代碼的復(fù)用和擴(kuò)展 ② 滿足is - a 的關(guān)系 事物的分類來說,子類別的關(guān)系 Student is a Person. Teacher is a Pe

    2024年02月05日
    瀏覽(26)
  • 分布式計(jì)算框架Hadoop核心組件

    分布式計(jì)算框架Hadoop核心組件

    Hadoop作為成熟的分布式計(jì)算框架在大數(shù)據(jù)生態(tài)領(lǐng)域已經(jīng)使用多年,本文簡(jiǎn)要介紹Hadoop的核心組件MapReduce、YARN和HDFS,以加深了解。 1、Hadoop基本介紹 Hadoop是分布式計(jì)算框架,主要解決海量數(shù)據(jù)的存儲(chǔ)和計(jì)算問題。Hadoop主要組件包括分布式文件系統(tǒng)HDFS、分布式離線并行計(jì)算框架

    2024年02月06日
    瀏覽(23)
  • 大數(shù)據(jù)框架之Hadoop:MapReduce(三)MapReduce框架原理——MapTask工作機(jī)制

    大數(shù)據(jù)框架之Hadoop:MapReduce(三)MapReduce框架原理——MapTask工作機(jī)制

    MapTask工作機(jī)制如下圖所示。 (1)Read階段:MapTask通過用戶編寫的RecordReader,從輸入InputSplit中解析出一個(gè)個(gè)key/value。 (2)Map階段:該節(jié)點(diǎn)主要是將解析出的key/value交給用戶編寫map()函數(shù)處理,并產(chǎn)生一系列新的key/value。 (3)Collect收集階段:在用戶編寫map()函數(shù)中,當(dāng)數(shù)據(jù)處

    2023年04月08日
    瀏覽(19)
  • Hadoop三大框架之MapReduce工作流程

    Hadoop三大框架之MapReduce工作流程

    MapReduce的思想核心是“分而治之”,適用于大量復(fù)雜的任務(wù)處理場(chǎng)景(大規(guī)模數(shù)據(jù)處理場(chǎng)景)。 Map負(fù)責(zé)“分”,把復(fù)雜的任務(wù)分解為若干個(gè)“簡(jiǎn)單的任務(wù)”來并行處理。可以進(jìn)行拆分的前提是這些小任務(wù)可以并行計(jì)算,彼此間幾乎沒有依賴關(guān)系。 Reduce負(fù)責(zé)“合”,即對(duì)map階

    2024年02月02日
    瀏覽(21)
  • Hadoop的第三大組成:YARN框架

    Hadoop的第三大組成:YARN框架

    YARN是一個(gè)分布式資源調(diào)度系統(tǒng),專門用來給分布式計(jì)算程序提供計(jì)算資源的,而且YARN只負(fù)責(zé)進(jìn)行資源的提供,不管計(jì)算程序的邏輯,因此YARN這個(gè)軟件非常的成功,因?yàn)閅ARN不關(guān)注程序計(jì)算邏輯,因此只要是分布式計(jì)算程序,只要滿足YARN的運(yùn)行要求,那么就可以在YARN上進(jìn)行運(yùn)

    2024年02月09日
    瀏覽(22)
  • Hadoop入門學(xué)習(xí)筆記——四、MapReduce的框架配置和YARN的部署

    Hadoop入門學(xué)習(xí)筆記——四、MapReduce的框架配置和YARN的部署

    視頻課程地址:https://www.bilibili.com/video/BV1WY4y197g7 課程資料鏈接:https://pan.baidu.com/s/15KpnWeKpvExpKmOC8xjmtQ?pwd=5ay8 Hadoop入門學(xué)習(xí)筆記(匯總) 本次YARN的部署結(jié)構(gòu)如下圖所示: 當(dāng)前,共有三臺(tái)服務(wù)器(虛擬機(jī))構(gòu)成集群,集群規(guī)劃如下所示: 主機(jī) 部署的服務(wù) node1 ResourceManager、N

    2024年02月04日
    瀏覽(17)
  • 年輕人的第一款單元測(cè)試框架———vitest

    年輕人的第一款單元測(cè)試框架———vitest

    一款合格的開源項(xiàng)目是避免不了單元測(cè)試的,這也是這幾年單元測(cè)試的熱度居高不下的原因。而在今年的 state of js 2022 中,我們可以看見在 代碼庫(kù)層級(jí)列表 中, vitest 飛升一躍,直接到了第二名,僅次于同門師兄弟 vite ,而 element plus unocss 等知名開源項(xiàng)目都采用了vitest進(jìn)行單

    2024年01月17日
    瀏覽(18)
  • Hadoop核心組件及組件介紹

    Hadoop核心組件及組件介紹

    1、Hadoop通用組件 -? Hadoop Common 包含了其他hadoop模塊要用到的庫(kù)文件和工具 2、分布式文件系統(tǒng) - Hadoop Distributed File System (HDFS) 運(yùn)行于通用硬件上的分布式文件系統(tǒng),高吞吐,高可靠 3、資源管理組件 - Hadoop YARN 于2012年引入的組件,用于管理集群中的計(jì)算資源并在這些資源上

    2024年02月05日
    瀏覽(23)
  • 【大數(shù)據(jù)開發(fā) Spark】第一篇:Spark 簡(jiǎn)介、Spark 的核心組成(5大模塊)、Spark 的主要特征(4大特征)、Spark 對(duì)比 MapReduce

    【大數(shù)據(jù)開發(fā) Spark】第一篇:Spark 簡(jiǎn)介、Spark 的核心組成(5大模塊)、Spark 的主要特征(4大特征)、Spark 對(duì)比 MapReduce

    初步了解一項(xiàng)技術(shù),最好的方式就是去它的官網(wǎng)首頁,一般首頁都會(huì)有十分官方且準(zhǔn)確的介紹,學(xué)習(xí) Spark 也不例外, 官方介紹:Apache Spark ?是一種多語言引擎,用于在單節(jié)點(diǎn)機(jī)器或集群上執(zhí)行數(shù)據(jù)工程、數(shù)據(jù)科學(xué)和機(jī)器學(xué)習(xí)。 我們可以得知,Spark 可以單節(jié)點(diǎn)運(yùn)行,也可以搭

    2024年02月05日
    瀏覽(34)
  • 金字塔的思維--思考的第一步就是先提煉出一個(gè)基本框架

    ? ? ? ? 如果以哲學(xué)的眼光來看待這一切,那么可以說每一件事情都包含在其他事物之間,包括我們的社會(huì)體系,包括整個(gè)自然界,萬事萬物都處于某一特定的體系當(dāng)中。一輛行駛的汽車,一匹奔跑的駿馬,一棟建筑,一個(gè)面包,你、我、他,所有的一切都從屬于某一個(gè)大的

    2024年02月08日
    瀏覽(23)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包