欧美一级特黄大片做受成人-亚洲成人一区二区电影-激情熟女一区二区三区-日韩专区欧美专区国产专区

MapReduce初試

一、境遇

成都創(chuàng)新互聯(lián)是一家集網(wǎng)站建設(shè),峨眉山企業(yè)網(wǎng)站建設(shè),峨眉山品牌網(wǎng)站建設(shè),網(wǎng)站定制,峨眉山網(wǎng)站建設(shè)報(bào)價(jià),網(wǎng)絡(luò)營(yíng)銷,網(wǎng)絡(luò)優(yōu)化,峨眉山網(wǎng)站推廣為一體的創(chuàng)新建站企業(yè),幫助傳統(tǒng)企業(yè)提升企業(yè)形象加強(qiáng)企業(yè)競(jìng)爭(zhēng)力??沙浞譂M足這一群體相比中小企業(yè)更為豐富、高端、多元的互聯(lián)網(wǎng)需求。同時(shí)我們時(shí)刻保持專業(yè)、時(shí)尚、前沿,時(shí)刻以成就客戶成長(zhǎng)自我,堅(jiān)持不斷學(xué)習(xí)、思考、沉淀、凈化自己,讓我們?yōu)楦嗟钠髽I(yè)打造出實(shí)用型網(wǎng)站。

    接觸Hadoop已經(jīng)有半年了,從Hadoop集群搭建到Hive、HBase、Sqoop相關(guān)組件的安裝,甚至Spark on Hive、Phoenix、Kylin這些邊緣的項(xiàng)目都有涉及。如果說(shuō)部署,我自認(rèn)為可以沒有任何問(wèn)題,但是如果說(shuō)我對(duì)于這個(gè)系統(tǒng)已經(jīng)掌握了,我卻不敢這么講,因?yàn)橹辽費(fèi)apReduce我還沒有熟悉,其工作機(jī)制也只是一知半解。關(guān)于MapReduce的運(yùn)算,我差不多理解了,但是實(shí)際實(shí)現(xiàn)現(xiàn)在卻只能靠找到的代碼,真的是慚愧的很。

    于是再也忍不住,一定要有點(diǎn)自己的東西,最起碼,寫的時(shí)候不用去找別人的博客,嗯,找自己的就行。

二、實(shí)驗(yàn)

    1、實(shí)驗(yàn)過(guò)程

        最開始實(shí)驗(yàn)的是最簡(jiǎn)單的去重MapReduce,在本地文件實(shí)驗(yàn)時(shí)沒有任何問(wèn)題,但把文件放到HDFS上就怎么也找不到了,究其原因,HDFS上的需要用Hadoop執(zhí)行jar文件才可以

        1)javac輸出類到指定目錄 dir

            javac *.java -d dir

        2)jar打包c(diǎn)lass文件

            1,打包指定class文件到target.jar

                jar cvf target.jar x1.class x2.class ... xn.class

            2,打包指定路徑dir下的所有class文件到target.jar

                jar cvf target.jar -C dir .

            3,打包c(diǎn)lass文件成可執(zhí)行jar,程序入口Main函數(shù)

                jar cvfe tarrget.jar Main -C dir .

            Hadoop只需要普通jar即可,不用打包成可執(zhí)行jar

        3)執(zhí)行jar,主類MapDuplicate

            Hadoop jar target.jar MapDuplicate (params)

    2、代碼分析

        1)import類

import java.io.IOException;
import org.apache.hadoop.conf.Configuration;
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.Mapper;
import org.apache.hadoop.mapreduce.Reducer;
import org.apache.hadoop.mapreduce.lib.input.FileInputFormat;
import org.apache.hadoop.mapreduce.lib.output.FileOutputFormat;
import org.apache.hadoop.util.GenericOptionsParser;

            Configuration類:用來(lái)設(shè)定Hadoop的參數(shù),如:IP、端口等

            Path:用來(lái)設(shè)定輸入輸出路徑

            IntWritable:MapReduce用到的int類型

            Text:MapReduce用到的string類型

            Job:生成MapReduce任務(wù)的主類,任務(wù)參數(shù)也在此類中設(shè)定

            Mapper:被繼承的Map類

            Reducer:被繼承的Reduce類

            FileInputFormat:輸入文件格式

            FileOutputFormat:輸出文件格式(可改為其它IO類,如數(shù)據(jù)庫(kù))

            GenericOptionsParser:解析命令行參數(shù)的類

        2)代碼結(jié)構(gòu)

public class MapDuplicate {
    public static class Map extends Mapper<...> { ... }
    public static class Reduce extends Reducer<...> { ... }
    public static void main(String[] args) throws Ex { ... }
}

        2)Map類

        public static class Map extends Mapper<Object,Text,Text,Text> {
                private static Text line = new Text();

                public void map(Object key,Text value,Context context)
                throws IOException,InterruptedException {
                        line = value;
                        context.write(line,new Text(""));
                }
        }

            Map類的主要作用是將數(shù)據(jù)進(jìn)行統(tǒng)一處理,按照規(guī)則給出鍵值對(duì),為Combine和Reduce等Reduce操作提供標(biāo)準(zhǔn)化數(shù)據(jù)。從代碼上來(lái)講,均繼承Mapper類,并實(shí)現(xiàn)map函數(shù)

            Mapper類繼承的四個(gè)參數(shù),前兩個(gè)分別是輸入數(shù)據(jù)鍵和值的類型,一般寫Object,Text即可;后兩個(gè)是輸出數(shù)據(jù)鍵和值的類型,這兩個(gè)類型必須和Reduce的輸入數(shù)據(jù)鍵值類型一致。

            所有的Java值類型在送到MapReduce任務(wù)前都要轉(zhuǎn)化成對(duì)應(yīng)的值類型:如:String->Text,int->IntWritable,long->LongWritable

            Context是Java類與MapReduce任務(wù)交互的類,它把Map的鍵值對(duì)傳給Combiner或者Reducer,也把Reducer的結(jié)果寫到HDFS上

        3)Reduce類

        public static class Reduce extends Reducer<Text,Text,Text,Text> {
                public void reduce(Text key,Iterable<Text> values,Context context)
                throws IOException,InterruptedException {
                        context.write(key,new Text(""));
                }
        }

            Reduce有兩種操作,Combine和Reduce,都繼承Reducer類。前者用于對(duì)數(shù)據(jù)進(jìn)行預(yù)處理,將處理好的數(shù)據(jù)交給Reduce,可以看成是本地的Reduce,當(dāng)不需要任何處理時(shí),Combine可以直接用Reduce代替;后者用于對(duì)數(shù)據(jù)進(jìn)行正式處理,將相同鍵值的數(shù)據(jù)合并,每一個(gè)Reduce函數(shù)過(guò)程只處理同一個(gè)鍵(key)的數(shù)據(jù)。

            Reducer類繼承的四個(gè)參數(shù),前兩個(gè)是輸入數(shù)據(jù)鍵和值的類型,必須與Mapper類的輸出類型一致(Combine也必須一致,而且Combine輸出需要跟Reduce的輸入一致,所以Combine輸入輸出類型必須是相同的);后兩個(gè)是輸出數(shù)據(jù)鍵和值的類型,即我們最終得到的結(jié)果

        4)Main函數(shù)

        public static void main(String[] args) throws Exception {
                Configuration conf = new Configuration();
                conf.set("mapred.job.tracker","XHadoop1:9010");
                String[] ioArgs = new String[] {"duplicate_in","duplicate_out"};
                String[] otherArgs = new GenericOptionsParser(conf,ioArgs).getRemainingArgs();
                if (otherArgs.length != 2) {
                        System.err.println("Usage: MapDuplicate <in> <out>");
                        System.exit(2);
                }
                Job job = new Job(conf,"MapDuplicate");
                job.setJarByClass(MapDuplicate.class);
                job.setMapperClass(Map.class);
                job.setCombinerClass(Reduce.class);
                job.setReducerClass(Reduce.class);
                job.setOutputKeyClass(Text.class);
                job.setOutputValueClass(Text.class);

                FileInputFormat.addInputPath(job,new Path(otherArgs[0]));
                FileOutputFormat.setOutputPath(job,new Path(otherArgs[1]));
                System.exit(job.waitForCompletion(true) ? 0 : 1);
        }

            首先,必須有Configuration類,通過(guò)這個(gè)類指定工作的機(jī)器

            然后,接收參數(shù)的語(yǔ)句,這個(gè)不解釋了

            然后,需要有Job類,指定MapReduce處理用到的類,需要指定的有:Mapper類、Combiner類、Reducer類、輸出數(shù)據(jù)鍵和值類型的類

            然后,指定輸入數(shù)據(jù)的路徑

            然后,等待任務(wù)結(jié)束并退出

三、總結(jié)

    這個(gè)實(shí)驗(yàn)可以說(shuō)是最簡(jiǎn)單的MapReduce,但是麻雀雖小五臟俱全。

    從原理來(lái)講,MapReduce有以下步驟:

        HDFS(Block)->Split->Mapper->Partion->Spill->Sort->Combiner->Merge->Reducer->HDFS

    1、HDFS輸入數(shù)據(jù)被分成Split,被Mapper類讀取,

    2、Mapper讀取數(shù)據(jù)后,將任務(wù)進(jìn)行Partion(分配)

    3、如果Map操作內(nèi)存溢出,需要Spill(溢寫)到磁盤上

    4、Mapper進(jìn)行Sort(排序)操作

    5、排序之后進(jìn)行Combine(合并key)操作,可以理解為本地模式Reduce

    6、Combine的同時(shí)會(huì)進(jìn)行溢出文件的Merge(合并)

    7、所有任務(wù)完成后將數(shù)據(jù)交給Reducer進(jìn)行處理,處理完成寫入HDFS

    8、從Map任務(wù)開始到Reduce任務(wù)開始的數(shù)據(jù)傳輸操作叫做Shuffle

    從編程來(lái)講,MapReduce有以下步驟:

    1、編寫Mapper類

    2、編寫Combiner類(可選)

    3、編寫Reducer類

    4、調(diào)用過(guò)程:參數(shù)配置Configuration

                 指定任務(wù)類

                 指定輸入輸出格式

                 指定數(shù)據(jù)位置

                 開始任務(wù)

    以上僅僅是淺層認(rèn)識(shí),僅供學(xué)習(xí)參考及備查。

網(wǎng)站標(biāo)題:MapReduce初試
分享URL:http://aaarwkj.com/article36/gipgpg.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供面包屑導(dǎo)航、App設(shè)計(jì)、網(wǎng)站設(shè)計(jì)公司、企業(yè)建站、搜索引擎優(yōu)化微信公眾號(hào)

廣告

聲明:本網(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è)
国产二区三区在线播放| 中文字幕中文字幕久久不卡| 黄色日韩大片在线观看| 国产伦国产一区二区三区在线观看| 日韩欧美国产一区二区精品| 亚洲精品aa片在线观看国产| 国产精品一区二区污网站| 最新国产成人免费在线视频| 欧美乱与老熟妇视频观看| 日韩中文字幕亚洲精品一| 日韩精品一区伦理视频| 国产中文字幕精品在线| 在线精品91国产在线观看| 日韩欧美国产精品一区| 亚洲精品丝袜成人偷拍| 亚洲欧美另类重口国产| 亚洲综合五月天色婷婷| 青青草原高清在线观看| 日韩国产欧美亚洲一区不卡| 国产一级内射视频免费观看| 色综合视频二区偷拍在线| 亚洲福利一区二区三区| 人妻中文字幕精品系列| 国产在线观看一区二区三区精品| 天天操天天干蜜桃av| 国产精品神马午夜福利| 超薄丝袜美腿一二三区在线播放 | 给我搜一个一级黄色片| 日韩视频一区二区三区系列| 国产欧美日韩一区二区三区不卡| 免费啪啪视频一区二区| 精品爆白浆一区二区三区| 久久精品国产一区二区三区不卡| 免费特黄特黄的欧美大片| 精品视频中文字幕天码| 亚洲国产欧美日韩综合| 日韩欧美一区亚洲一区| 91青青草原在线视频| 国产极品av一区二区三区| 国产91高清免费视频| 国产手机在线91精品观看|