欧美一区二区三区老妇人-欧美做爰猛烈大尺度电-99久久夜色精品国产亚洲a-亚洲福利视频一区二区

HadoopMapReduce是什么

這篇文章主要介紹“Hadoop MapReduce是什么”,在日常操作中,相信很多人在Hadoop MapReduce是什么問(wèn)題上存在疑惑,小編查閱了各式資料,整理出簡(jiǎn)單好用的操作方法,希望對(duì)大家解答”Hadoop MapReduce是什么”的疑惑有所幫助!接下來(lái),請(qǐng)跟著小編一起來(lái)學(xué)習(xí)吧!

為蔚縣等地區(qū)用戶提供了全套網(wǎng)頁(yè)設(shè)計(jì)制作服務(wù),及蔚縣網(wǎng)站建設(shè)行業(yè)解決方案。主營(yíng)業(yè)務(wù)為網(wǎng)站建設(shè)、成都網(wǎng)站制作、蔚縣網(wǎng)站設(shè)計(jì),以傳統(tǒng)方式定制建設(shè)網(wǎng)站,并提供域名空間備案等一條龍服務(wù),秉承以專業(yè)、用心的態(tài)度為用戶提供真誠(chéng)的服務(wù)。我們深信只要達(dá)到每一位用戶的要求,就會(huì)得到認(rèn)可,從而選擇與我們長(zhǎng)期合作。這樣,我們也可以走得更遠(yuǎn)!

一、MapReduce是什么?

1. mapreduce的定義

  • MapReduce是一個(gè)分布式運(yùn)算程序的編程框架,是用戶開(kāi)發(fā)“基于Hadoop的數(shù)據(jù)分析應(yīng)用”的核心框架。

  • MapReduce核心功能是將用戶編寫(xiě)的業(yè)務(wù)邏輯代碼和自帶默認(rèn)組件整合成一個(gè)完整的分布式運(yùn)算程序,并發(fā)運(yùn)行在一個(gè)Hadoop集群上。

2.mapreduce的核心思想

  • MapReduce思想在生活中處處可見(jiàn)?;蚨嗷蛏俣荚佑|過(guò)這種思想。MapReduce的思想核心是“分而治之”,適用于大量復(fù)雜的任務(wù)處理場(chǎng)景(大規(guī)模數(shù)據(jù)處理場(chǎng)景)。即使是發(fā)布過(guò)論文實(shí)現(xiàn)分布式計(jì)算的谷歌也只是實(shí)現(xiàn)了這種思想,而不是自己原創(chuàng)。

  • Map負(fù)責(zé)“分”,即把復(fù)雜的任務(wù)分解為若干個(gè)“簡(jiǎn)單的任務(wù)”來(lái)并行處理??梢赃M(jìn)行拆分的前提是這些小任務(wù)可以并行計(jì)算,彼此間幾乎沒(méi)有依賴關(guān)系。

  • Reduce負(fù)責(zé)“合”,即對(duì)map階段的結(jié)果進(jìn)行全局匯總。

  • 這兩個(gè)階段合起來(lái)正是MapReduce思想的體現(xiàn)。

還有一個(gè)比較形象的語(yǔ)言解釋MapReduce:

  • 我們要數(shù)圖書(shū)館中的所有書(shū)。你數(shù)1號(hào)書(shū)架,我數(shù)2號(hào)書(shū)架。這就是“Map”。我們?nèi)嗽蕉啵瑪?shù)書(shū)就越快。

  • 現(xiàn)在我們到一起,把所有人的統(tǒng)計(jì)數(shù)加在一起。這就是“Reduce”。

二、MapReduce編程

1.MapReduce編程模型

  • MapReduce是采用一種分而治之的思想設(shè)計(jì)出來(lái)的分布式計(jì)算框架

  • 那什么是分而治之呢?

    • 比如一復(fù)雜、計(jì)算量大、耗時(shí)長(zhǎng)的的任務(wù),暫且稱為“大任務(wù)”;

    • 此時(shí)使用單臺(tái)服務(wù)器無(wú)法計(jì)算或較短時(shí)間內(nèi)計(jì)算出結(jié)果時(shí),可將此大任務(wù)切分成一個(gè)個(gè)小的任務(wù),小任務(wù)分別在不同的服務(wù)器上并行的執(zhí)行;

    • 最終再匯總每個(gè)小任務(wù)的結(jié)果

  • MapReduce由兩個(gè)階段組 成:

    • Map階段(切分成一個(gè)個(gè)小的任務(wù))

    • Reduce階段(匯總小任務(wù)的結(jié)果) Hadoop MapReduce是什么

1. Map階段
  • map階段有一個(gè)關(guān)鍵的map()函數(shù);

  • 此函數(shù)的輸入是鍵值對(duì)

  • 輸出是一系列鍵值對(duì),輸出寫(xiě)入本地磁盤。

2. Reduce階段
  • reduce階段有一個(gè)關(guān)鍵的函數(shù)reduce()函數(shù)

  • 此函數(shù)的輸入也是鍵值對(duì)(即map的輸出(kv對(duì)))

  • 輸出也是一系列鍵值對(duì),結(jié)果最終寫(xiě)入HDFS

  1. Map&Reduce

Hadoop MapReduce是什么

2.Mapreduce編程指導(dǎo)思想(八個(gè)步驟)

  • mapReduce編程模型的總結(jié):

  • MapReduce的開(kāi)發(fā)一共有八個(gè)步驟其中map階段分為2個(gè)步驟,shuffle階段4個(gè)步驟,reduce階段分為2個(gè)步驟

1. Map階段2個(gè)步驟
  • 第一步:設(shè)置inputFormat類,將我們的數(shù)據(jù)切分成key,value對(duì),輸入到第二步

  • 第二步:自定義map邏輯,處理我們第一步的輸入數(shù)據(jù),然后轉(zhuǎn)換成新的key,value對(duì)進(jìn)行輸出

2. shuffle階段4個(gè)步驟
  • 第三步:對(duì)輸出的key,value對(duì)進(jìn)行分區(qū)。(相同key的數(shù)據(jù)屬于同一分區(qū))

  • 第四步:對(duì)不同分區(qū)的數(shù)據(jù)按照相同的key進(jìn)行排序

  • 第五步:對(duì)分組后的數(shù)據(jù)進(jìn)行規(guī)約(combine操作),降低數(shù)據(jù)的網(wǎng)絡(luò)拷貝(可選步驟)

  • 第六步:對(duì)排序后的數(shù)據(jù)進(jìn)行分組,分組的過(guò)程中,將相同key的value放到一個(gè)集合當(dāng)中(每組數(shù)據(jù)調(diào)用一次reduce方法)

3. reduce階段2個(gè)步驟
  • 第七步:對(duì)多個(gè)map的任務(wù)進(jìn)行合并,排序,寫(xiě)reduce函數(shù)自己的邏輯,對(duì)輸入的key,value對(duì)進(jìn)行處理,轉(zhuǎn)換成新的key,value對(duì)進(jìn)行輸出

  • 第八步:設(shè)置outputformat將輸出的key,value對(duì)數(shù)據(jù)進(jìn)行保存到文件中。

3.Hadoop當(dāng)中常用的數(shù)據(jù)類型

  • hadoop沒(méi)有沿用java當(dāng)中基本的數(shù)據(jù)類型,而是自己進(jìn)行封裝了一套數(shù)據(jù)類型,其自己封裝的類型與java的類型對(duì)應(yīng)如下

  • 下表常用的數(shù)據(jù)類型對(duì)應(yīng)的Hadoop數(shù)據(jù)序列化類型

Java類型Hadoop Writable類型
BooleanBooleanWritable
ByteByteWritable
IntIntWritable
FloatFloatWritable
LongLongWritable
DoubleDoubleWritable
StringText
MapMapWritable
ArrayArrayWritable
byte[]BytesWritable

4.MapReduce編程入門之單詞統(tǒng)計(jì)

Hadoop MapReduce是什么

5.mapreduce編程入門案例之單詞計(jì)數(shù)統(tǒng)計(jì)實(shí)現(xiàn)

  • 需求:現(xiàn)有數(shù)據(jù)格式如下,每一行數(shù)據(jù)之間都是使用逗號(hào)進(jìn)行分割,求取每個(gè)單詞出現(xiàn)的次數(shù)

hello,hello
world,world
hadoop,hadoop
hello,world
hello,flume
hadoop,hive
hive,kafka
flume,storm
hive,oozie
第一步:創(chuàng)建maven工程并導(dǎo)入以下jar包
<repositories>
        <repository>
            <id>cloudera</id>
            <url>https://repository.cloudera.com/artifactory/cloudera-repos/</url>
        </repository>
    </repositories>
    <dependencies>
        <dependency>
            <groupId>org.apache.hadoop</groupId>
            <artifactId>hadoop-client</artifactId>
            <version>2.6.0-mr1-cdh6.14.2</version>
        </dependency>
        <dependency>
            <groupId>org.apache.hadoop</groupId>
            <artifactId>hadoop-common</artifactId>
            <version>2.6.0-cdh6.14.2</version>
        </dependency>
        <dependency>
            <groupId>org.apache.hadoop</groupId>
            <artifactId>hadoop-hdfs</artifactId>
            <version>2.6.0-cdh6.14.2</version>
        </dependency>
 
        <dependency>
            <groupId>org.apache.hadoop</groupId>
            <artifactId>hadoop-mapreduce-client-core</artifactId>
            <version>2.6.0-cdh6.14.2</version>
        </dependency>
        <!-- https://mvnrepository.com/artifact/junit/junit -->
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.11</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.testng</groupId>
            <artifactId>testng</artifactId>
            <version>RELEASE</version>
            <scope>test</scope>
        </dependency>
    </dependencies>
    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.0</version>
                <configuration>
                    <source>1.8</source>
                    <target>1.8</target>
                    <encoding>UTF-8</encoding>
                    <!--   <verbal>true</verbal>-->
                </configuration>
            </plugin>
 
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-shade-plugin</artifactId>
                <version>2.4.3</version>
                <executions>
                    <execution>
                        <phase>package</phase>
                        <goals>
                            <goal>shade</goal>
                        </goals>
                        <configuration>
                            <minimizeJar>true</minimizeJar>
                        </configuration>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>
第二步:定義mapper類
import org.apache.hadoop.io.IntWritable;
 import org.apache.hadoop.io.LongWritable;
 import org.apache.hadoop.io.Text;
 import org.apache.hadoop.mapreduce.Mapper;
 import java.io.IOException;
 
 /**
  * 自定義mapper類需要繼承Mapper,有四個(gè)泛型,
  * keyin: k1   行偏移量 Long
  * valuein: v1   一行文本內(nèi)容   String
  * keyout: k2   每一個(gè)單詞   String
  * valueout : v2   1         int
  * 在hadoop當(dāng)中沒(méi)有沿用Java的一些基本類型,使用自己封裝了一套基本類型
  * long ==>LongWritable
  * String ==> Text
  * int ==> IntWritable
  *
  */
 public class MyMapper extends Mapper<LongWritable,Text,Text,IntWritable> {
    /**
      * 繼承mapper之后,覆寫(xiě)map方法,每次讀取一行數(shù)據(jù),都會(huì)來(lái)調(diào)用一下map方法
      * @param key:對(duì)應(yīng)k1
      * @param value:對(duì)應(yīng)v1
      * @param context 上下文對(duì)象。承上啟下,承接上面步驟發(fā)過(guò)來(lái)的數(shù)據(jù),通過(guò)context將數(shù)據(jù)發(fā)送到下面的步驟里面去
      * @throws IOException
      * @throws InterruptedException
      * k1   v1
      * 0;hello,world
      *
      * k2 v2
      * hello 1
      * world   1
      */
    @Override
    protected void map(LongWritable key, Text value, Context context) throws IOException, InterruptedException {
        //獲取我們的一行數(shù)據(jù)
        String line = value.toString();
        String[] split = line.split(",");
        Text text = new Text();
        IntWritable intWritable = new IntWritable(1);
        for (String word : split) {
            //將每個(gè)單詞出現(xiàn)都記做1次
            //key2 Text類型
            //v2 IntWritable類型
            text.set(word);
            //將我們的key2 v2寫(xiě)出去到下游
            context.write(text,intWritable);
        }
    }
 }
第三步:定義reducer類
import org.apache.hadoop.io.IntWritable;
 import org.apache.hadoop.io.Text;
 import org.apache.hadoop.mapreduce.Reducer;
 
 import java.io.IOException;
 
 public class MyReducer extends Reducer<Text,IntWritable,Text,IntWritable> {
    //第三步:分區(qū)   相同key的數(shù)據(jù)發(fā)送到同一個(gè)reduce里面去,相同key合并,value形成一個(gè)集合
    /**
      * 繼承Reducer類之后,覆寫(xiě)reduce方法
      * @param key
      * @param values
      * @param context
      * @throws IOException
      * @throws InterruptedException
      */
    @Override
    protected void reduce(Text key, Iterable<IntWritable> values, Context context) throws IOException, InterruptedException {
        int result = 0;
        for (IntWritable value : values) {
            //將我們的結(jié)果進(jìn)行累加
            result += value.get();
        }
        //繼續(xù)輸出我們的數(shù)據(jù)
        IntWritable intWritable = new IntWritable(result);
        //將我們的數(shù)據(jù)輸出
        context.write(key,intWritable);
    }
 }
第四步:組裝main程序
import org.apache.hadoop.conf.Configuration;
 import org.apache.hadoop.conf.Configured;
 import org.apache.hadoop.fs.Path;
 import org.apache.hadoop.io.IntWritable;
 import org.apache.hadoop.io.Text;
 import org.apache.hadoop.mapreduce.Job;
 import org.apache.hadoop.mapreduce.lib.input.TextInputFormat;
 import org.apache.hadoop.mapreduce.lib.output.TextOutputFormat;
 import org.apache.hadoop.util.Tool;
 import org.apache.hadoop.util.ToolRunner;
 
 /*
 這個(gè)類作為mr程序的入口類,這里面寫(xiě)main方法
  */
 public class WordCount extends Configured implements Tool{
    /**
      * 實(shí)現(xiàn)Tool接口之后,需要實(shí)現(xiàn)一個(gè)run方法,
      * 這個(gè)run方法用于組裝我們的程序的邏輯,其實(shí)就是組裝八個(gè)步驟
      * @param args
      * @return
      * @throws Exception
      */
    @Override
    public int run(String[] args) throws Exception {
        //獲取Job對(duì)象,組裝我們的八個(gè)步驟,每一個(gè)步驟都是一個(gè)class類
        Configuration conf = super.getConf();
        Job job = Job.getInstance(conf, "mrdemo1");
 
        //實(shí)際工作當(dāng)中,程序運(yùn)行完成之后一般都是打包到集群上面去運(yùn)行,打成一個(gè)jar包
        //如果要打包到集群上面去運(yùn)行,必須添加以下設(shè)置
        job.setJarByClass(WordCount.class);
 
        //第一步:讀取文件,解析成key,value對(duì),k1:行偏移量 v1:一行文本內(nèi)容
        job.setInputFormatClass(TextInputFormat.class);
        //指定我們?nèi)ツ囊粋€(gè)路徑讀取文件
        TextInputFormat.addInputPath(job,new Path("文件位置"));
        //第二步:自定義map邏輯,接受k1   v1 轉(zhuǎn)換成為新的k2   v2輸出
        job.setMapperClass(MyMapper.class);
        //設(shè)置map階段輸出的key,value的類型,其實(shí)就是k2 v2的類型
        job.setMapOutputKeyClass(Text.class);
        job.setMapOutputValueClass(IntWritable.class);
        //第三步到六步:分區(qū),排序,規(guī)約,分組都省略
        //第七步:自定義reduce邏輯
        job.setReducerClass(MyReducer.class);
        //設(shè)置key3 value3的類型
        job.setOutputKeyClass(Text.class);
        job.setOutputValueClass(IntWritable.class);
        //第八步:輸出k3 v3 進(jìn)行保存
        job.setOutputFormatClass(TextOutputFormat.class);
        //一定要注意,輸出路徑是需要不存在的,如果存在就報(bào)錯(cuò)
        TextOutputFormat.setOutputPath(job,new Path("輸出文件位置"));
        //提交job任務(wù)
        boolean b = job.waitForCompletion(true);
        return b?0:1;
        /***
          * 第一步:讀取文件,解析成key,value對(duì),k1   v1
          * 第二步:自定義map邏輯,接受k1   v1 轉(zhuǎn)換成為新的k2   v2輸出
          * 第三步:分區(qū)。相同key的數(shù)據(jù)發(fā)送到同一個(gè)reduce里面去,key合并,value形成一個(gè)集合
          * 第四步:排序   對(duì)key2進(jìn)行排序。字典順序排序
          * 第五步:規(guī)約 combiner過(guò)程 調(diào)優(yōu)步驟 可選
          * 第六步:分組
          * 第七步:自定義reduce邏輯接受k2   v2 轉(zhuǎn)換成為新的k3   v3輸出
          * 第八步:輸出k3 v3 進(jìn)行保存
          *
          *
          */
    }
    /*
    作為程序的入口類
      */
    public static void main(String[] args) throws Exception {
        Configuration configuration = new Configuration();
        configuration.set("hello","world");
        //提交run方法之后,得到一個(gè)程序的退出狀態(tài)碼
        int run = ToolRunner.run(configuration, new WordCount(), args);
        //根據(jù)我們 程序的退出狀態(tài)碼,退出整個(gè)進(jìn)程
        System.exit(run);
    }
 }

到此,關(guān)于“Hadoop MapReduce是什么”的學(xué)習(xí)就結(jié)束了,希望能夠解決大家的疑惑。理論與實(shí)踐的搭配能更好的幫助大家學(xué)習(xí),快去試試吧!若想繼續(xù)學(xué)習(xí)更多相關(guān)知識(shí),請(qǐng)繼續(xù)關(guān)注創(chuàng)新互聯(lián)網(wǎng)站,小編會(huì)繼續(xù)努力為大家?guī)?lái)更多實(shí)用的文章!

網(wǎng)頁(yè)名稱:HadoopMapReduce是什么
文章轉(zhuǎn)載:http://chinadenli.net/article30/gehpso.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供全網(wǎng)營(yíng)銷推廣、服務(wù)器托管網(wǎng)站制作、網(wǎng)站建設(shè)、定制網(wǎng)站、Google

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

網(wǎng)站建設(shè)網(wǎng)站維護(hù)公司