日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

MapReduce流程(WordCount案例实现)

發布時間:2025/1/21 编程问答 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 MapReduce流程(WordCount案例实现) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

文章目錄

  • 1 MapReduce概述
    • 設計構思
    • 實例進程
      • 實例進程分類
      • 完整執行過程
      • 總結
  • 2 MapReduce編程規范
    • Map階段2個步驟
    • Shuffle階段4個步驟
    • Reduce階段2個步驟
  • 3.實現WordCount案例
    • 3.1準備工作
    • 3.2Map代碼編寫
    • 3.3Reduce代碼編寫
    • 3.4任務類編寫
  • 4.MapReduce運行模式
    • 4.1 集群運行模式
    • 4.2 本地運行模式

1 MapReduce概述

設計構思

MapReduce是一個分布式運算程序的編程框架,核心功能是將用戶編寫的業務邏輯代碼和自帶默認組件整合成一個完整的分布式運算程序,并發運行在Hadoop集群上。

MapReduce設計并提供了統一的計算框架,為程序員隱藏了絕大多數系統層面的處理細節。為程序員提供一個抽象和高層的編程接口和框架。程序員僅需要關心其應用層的具體計算問題,僅需編寫少量的處理應用本身計算問題的程序代碼。如何具體完成這個并行計算任務所相關的諸多系統層細節被隱藏起來,交給計算框架去處理:

Map和Reduce為程序員提供了一個清晰的操作接口抽象描述。MapReduce中定義了如下的Map和Reduce兩個抽象的編程接口,由用戶去編程實現.Map和Reduce,MapReduce處理的數據類型是<key,value>鍵值對。

以WordCount為例:

  • Map: ( k1 ; v1 ) →[ ( k2 ; v2 ) ]

  • Shuffle過程(不需要我們寫)

  • Reduce:( k2 ; [ v2 ] )→[ ( k3 , v3 ) ]

實例進程

實例進程分類

一個完整的mapreduce程序在分布式運行時有三類實例進程:

  • MRAppMaster負責整個程序的過程調度及狀態協調
  • MapTask負責map階段的整個數據處理流程
  • ReduceTask負責reduce階段的整個數據處理流程
  • 完整執行過程

  • Client提交計算任務

  • 啟動AppMaster進程

  • AppMaster請求分配資源

  • ResourceManager回復資源列表

  • AppMaster要求NodeManager分配資源

  • NodeManager執行具體的計算任務

  • NodeManager將計算狀態和結果匯報給AppMaster

  • AppMaster匯報計算結果

  • 總結

    ResourceManager分配任務

    NodeManager實際執行任務

    2 MapReduce編程規范

    Map階段2個步驟

  • 設置InputFormat類(設置文件讀取方式),將數據切分為Key-Value(K1和V1)對(改行文本的偏移量,該行數據),輸入到第二步
  • 自定義Map邏輯,將第一步的結果轉換成另外的Key-Value (K2和V2)對,輸出結果
  • Shuffle階段4個步驟

  • 對輸出的Key-Value對進行分區
  • 對不同分區的數據按照相同的Key排序
  • (可選)對分組過的數據初步規約,降低數據的網絡拷貝
  • 對數據進行分組,相同Key的value放入一個集合中
  • Reduce階段2個步驟

  • 對多個Map任務的結果進行排序以及合并,編寫Reduce函數實現自己的邏輯,對輸入的Key-value進行處理,轉為新的Key-value (K3和V3)輸出
  • 設置OutputFormat處理并保存Reduce輸出的Key-Value數據
  • 3.實現WordCount案例

    3.1準備工作

    1)在hadoop集群上上傳文件至hdfs

    #新建一個文件 vim wordcount.txt#在文件中寫入實例數據 按i鍵進入文件寫入模式,寫入后按esc,輸入:wq!保存更改 hello,world,hadoop hive,hello,tom love,hadoop hdfs#上傳到HDFS ## 在HDFS文件系統中增加目錄wordcount hdfs dfs -mkdir /wordcount/ ## 將剛剛創建的文件上傳至該文件夾,登錄web界面(50070)可以看到成功上傳 hdfs dfs -put wordcount.txt /wordcount

    2)導入依賴pom.xml

    注意查看自己的hadoop版本

    <dependencies><dependency><groupId>org.apache.hadoop</groupId><artifactId>hadoop-common</artifactId><version>2.6.1</version></dependency><dependency><groupId>org.apache.hadoop</groupId><artifactId>hadoop-hdfs</artifactId><version>2.6.1</version></dependency><dependency><groupId>org.apache.hadoop</groupId><artifactId>hadoop-client</artifactId><version>2.6.1</version></dependency><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.11</version><scope>test</scope></dependency> </dependencies>

    3)測試hadoop連接環境

    可以使用BigData插件測試,參照文章https://blog.csdn.net/weixin_44155966/article/details/108820920

    3.2Map代碼編寫

    package com.hunan.MapReduce;import org.apache.hadoop.io.LongWritable; import org.apache.hadoop.io.Text; import org.apache.hadoop.mapreduce.Mapper;import java.io.IOException;/* 四個泛型解釋: KEYIN:K1的類型 偏移量 VALUEIN:V1的類型 每行字符串KEYOUT:K2的類型 單詞 VALUEOUT:V2的類型 固定值1*/ //hadoop自己的類型 public class WordCountMapper extends Mapper<LongWritable,Text, Text,LongWritable> {//map方法就是將K1,V1轉為K2,V2/*參數:key : K1 行偏移量value : V1 每一行的文本數據context: 表示上下文對象,將各個流程連在一起*//*如何將K1,V1轉換為K2,V2K1 V10 hello,world,hadoop19 hive,hello,tom----------------------K2 V2hello 1world 1hadoop 1hive 1hello 1tom 1*/@Overrideprotected void map(LongWritable key, Text value, Context context) throws IOException, InterruptedException {Text text = new Text();LongWritable longWritable = new LongWritable();//1.將一行的文本數據進行拆分String[] split = value.toString().split(",");//2.遍歷數組,組裝K2,V2for (String s : split) {//3.將K2,V2寫入上下文中//context.write(new Text(s), new LongWritable(1));text.set(s);longWritable.set(1);context.write(text,longWritable);}} }

    3.3Reduce代碼編寫

    package com.hunan.MapReduce;import org.apache.hadoop.io.LongWritable; import org.apache.hadoop.io.Text; import org.apache.hadoop.mapreduce.Reducer;import java.io.IOException;/* 四個泛型解釋: KEYIN:K2的類型 單詞 VALUEIN:V2的類型 1KEYOUT:K3的類型 單詞 VALUEOUT:V3的類型 個數*/ public class WordCountReducer extends Reducer<Text, LongWritable,Text,LongWritable> {//map方法就是將新K2,V2轉為K3,V3/*參數:key: 新K2values: 集合 新V2context:上下文對象*//*如何將新K2,V2轉為K3,V3新K2 新V2hello <1,1>world <1>hadoop <1,1,1>---------------K3 V3hello 2world 1hadoop 3*/@Overrideprotected void reduce(Text key, Iterable<LongWritable> values, Context context) throws IOException, InterruptedException {long count=0;//1.遍歷集合,將集合中數字相加,得到V3for (LongWritable value : values) {count+=value.get();}//2.將K2和V3寫入上下文中context.write(key,new LongWritable(count));} }

    3.4任務類編寫

    package com.hunan.MapReduce;import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.conf.Configured; 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.lib.input.TextInputFormat; import org.apache.hadoop.mapreduce.lib.output.TextOutputFormat; import org.apache.hadoop.util.Tool; import org.apache.hadoop.util.ToolRunner;public class JobMain extends Configured implements Tool {//該方法用于指定一個job任務,從提交到結果保存的整個任務public int run(String[] args) throws Exception {//1.創建一個job任務對象Job job = Job.getInstance(super.getConf(), "WordConut");//2.配置job任務對象(八個步驟)//第一步:指定文件讀取方式和讀取路徑job.setInputFormatClass(TextInputFormat.class);//TextInputFormat.addInputPath(job,new Path("hdfs://master:9000/wordcount"));TextInputFormat.addInputPath(job,new Path("file:///C:\\wordcount"));//第二步:指定Map階段的處理方式和數據類型job.setMapperClass(WordCountMapper.class);job.setMapOutputKeyClass(Text.class);//設置Map階段K2的類型job.setMapOutputKeyClass(LongWritable.class);//設置Map階段V2的類型//第三,四,五,六步 采用默認的shuffle階段處理//第七步:指定ruduce階段的處理方式和數據類型job.setReducerClass(WordCountReducer.class);job.setOutputKeyClass(Text.class);//設置Reduce階段K2的類型job.setMapOutputKeyClass(LongWritable.class);//設置Reduce階段V2的類型//第八步:設置輸出類型和輸出路徑job.setOutputFormatClass(TextOutputFormat.class);//TextOutputFormat.setOutputPath(job,new Path("hdfs://master:9000/wordcount_out"));TextOutputFormat.setOutputPath(job,new Path("file:///D:\\wordcount_output"));//等待任務結束boolean b = job.waitForCompletion(true);return b? 0 : 1;}public static void main(String[] args) throws Exception {Configuration configuration = new Configuration();//configuration.set("mapred.job.tracker", "192.168.60.101:9000");//啟動job任務int run = ToolRunner.run(configuration, new JobMain(), args);System.exit(run);} }

    4.MapReduce運行模式

    4.1 集群運行模式

  • 將MapReduce程序提交給Yarn集群,分發到很多的節點上并發執行

  • 處理的數據和輸出結果應該位于HDFS文件系統

  • 提交集群的實現步驟:將程序打成JAR包(雙擊右側maven-Lifecycle-package),并上傳至節點,然后在集群上用hadoop命令啟動。

  • 兩個參數分別為jar包名,main方法的路徑

  • hadoop jar hadoop_learning-1.0-SNAPSHOT.jar com.hunan.MapReduce.JobMain

    4.2 本地運行模式

  • MapReduce程序在本地以單進程的形式運行
  • 處理的數據及輸出結果在本地文件系統。
  • TextInputFormat.addInputPath(job,new Path("file:///d:\\data\\wordcount")); TextOutputFormat.setOutputPath(job,new Path("file:///d:\\data\\wordcount_output")); hadoop jar hadoop_learning-1.0-SNAPSHOT.jar com.hunan.MapReduce.JobMain 與50位技術專家面對面20年技術見證,附贈技術全景圖

    總結

    以上是生活随笔為你收集整理的MapReduce流程(WordCount案例实现)的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

    主站蜘蛛池模板: 亚洲国产成 | 亚洲精品国产片 | 久久看片网 | 九九九在线观看 | 无码人妻一区二区三区一 | 天天摸天天 | 国产欧美日韩精品区一区二污污污 | 欧美一级免费看 | 日韩一区二区三区中文字幕 | 337p粉嫩大胆色噜噜噜 | 亚洲人成久久 | 日韩91在线| 国产精品午夜在线 | 国产精品无码专区av免费播放 | 久久久精品动漫 | 久久最新网址 | 欧美午夜剧场 | 97超视频 | 欧美性猛交一区二区三区精品 | 白丝一区| 91精品国产日韩91久久久久久 | 欧美日韩国产综合网 | 午夜少妇| 国产麻豆精品一区 | 国产精品夜色一区二区三区 | 黄色片xxx| 好大好爽视频 | 18禁超污无遮挡无码免费游戏 | 黑人玩弄人妻一区二区三区影院 | 怡红院最新网址 | 露脸丨91丨九色露脸 | 中国一级片黄色一级片黄 | 日韩精品久久一区二区 | 青青艹在线观看 | 2017天天干 | 国产熟女高潮一区二区三区 | 精品一区二区三区中文字幕 | 最新日本中文字幕 | 性视频免费看 | 人人妻人人澡人人爽 | 白白色在线播放 | 天天狠天天插天天透 | 黄网站色 | 波多野结衣黄色网址 | 欧美午夜精品一区二区蜜桃 | 亚洲精品久久久久久国 | 一区二区三区久久精品 | 国产精品99久久久 | 乱短篇艳辣500篇h文最新章节 | 美女操操操| 伊人伊人伊人伊人 | 亚洲精品尤物 | 久久久久久国产精品免费免费 | 精品婷婷| 免费视频一区 | 香蕉国产 | 伊人99热| 羞羞漫画在线 | 黄色网页在线看 | 欧美aaa级| 亚洲精品成人在线视频 | 欧美乱妇日本无乱码特黄大片 | 一级日韩片 | 免费黄色在线看 | 欧美嘿咻视频 | 精彩视频一区二区 | 超碰97自拍 | 天天爽天天 | 69av视频在线观看 | 简单av在线 | 日韩免费片 | av激情小说 | 国产小视频网址 | 黄色性情网站 | 少妇大叫太粗太大爽一区二区 | 三级国产网站 | 黄色片网站免费在线观看 | 欧美sm极限捆绑bd | 久草视频在线免费看 | 狠狠操狠狠爱 | 亚洲影视精品 | 欧美a级在线免费观看 | 久久久久麻豆v国产精华液好用吗 | 亚洲天堂免费在线 | 亚洲国产无线乱码在线观看 | 日本深夜福利 | 欧美三级理论片 | 美女av在线免费观看 | 夜色精品 | 中文视频一区二区 | 天天插综合网 | 免费在线观看av网址 | 狠狠干2021 | 亚洲av片一区二区三区 | 亚洲gay视频 | 欧美成人h版在线观看 | 欧美成人第一页 | 亚洲熟伦熟女新五十路熟妇 | 久久久久久久久久久久久久久久久久久久 |