中文字幕第五页-中文字幕第页-中文字幕韩国-中文字幕最新-国产尤物二区三区在线观看-国产尤物福利视频一区二区

Hadoop應(yīng)用引用第三方j(luò)ar的幾種方式(一)

    雖然我們可以在Eclipse下面開發(fā)Hadoop應(yīng)用程序,但是當(dāng)我們引用了第三方j(luò)ar文件的時(shí)候,把我們編寫的程序打成jar包之后,如何能夠在Hadoop集群下面運(yùn)行,是一個(gè)我們?cè)诔绦蜷_發(fā)的過程中必須要解決的一個(gè)問題,通過搜索資料,在這里把幾種可行的解決方案在這里總結(jié)一下。

創(chuàng)新互聯(lián)從2013年開始,是專業(yè)互聯(lián)網(wǎng)技術(shù)服務(wù)公司,擁有項(xiàng)目網(wǎng)站制作、網(wǎng)站建設(shè)網(wǎng)站策劃,項(xiàng)目實(shí)施與項(xiàng)目整合能力。我們以讓每一個(gè)夢(mèng)想脫穎而出為使命,1280元建始做網(wǎng)站,已為上家服務(wù),為建始各地企業(yè)和個(gè)人服務(wù),聯(lián)系電話:13518219792

    

    本來打算也一篇的,可是寫到后來,發(fā)現(xiàn)我太啰嗦了,寫的有點(diǎn)太細(xì)了,決定分開來寫,寫成兩篇好了。。。。

    第一篇:主要寫Eclipse下面引入第三方j(luò)ar,以及打包在集群上運(yùn)行。

    第二篇:主要寫Hadoop應(yīng)用程序如何引入第三方j(luò)ar,以及對(duì)生產(chǎn)環(huán)境下應(yīng)該怎么去引入第三方j(luò)ar的個(gè)人見解,文章鏈接《Hadoop應(yīng)用引用第三方j(luò)ar的幾種方式(二)》

===========================================================================================

    在這里先說一下Eclipse下面引入第三方j(luò)ar的方法,這和下面的打成jar包有關(guān)系,一般來說有兩種方法:一種方法是直接在本地磁盤的目錄下,然后引入;另一種方法是在Eclipse工程根目錄下面新建lib目錄,然后引入。

    第一種引入方法

    在這里以Hadoop的提供的WordCount進(jìn)行簡(jiǎn)單的修改來進(jìn)行測(cè)試。代碼如下:

package com.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.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;

import com.hadoop.hdfs.OperateHDFS;

public class WordCount {

    public static class TokenizerMapper extends
            Mapper<Object, Text, Text, IntWritable> {

        private final static IntWritable one = new IntWritable(1);

        private Text word = new Text();

        public void map(Object key, Text value, Context context)
                throws IOException, InterruptedException {
            
            //它什么都不做,就是為了測(cè)試引入第三方j(luò)ar的,如果找不到,肯定就會(huì)報(bào)ClassNotFound異常
            OperateHDFS s = new OperateHDFS();
            
            StringTokenizer itr = new StringTokenizer(value.toString());
            while (itr.hasMoreTokens()) {
                word.set(itr.nextToken());
                context.write(word, one);
            }
        }
    }

    public static class IntSumReducer extends
            Reducer<Text, IntWritable, Text, IntWritable> {

        private IntWritable result = new IntWritable();

        public void reduce(Text key, Iterable<IntWritable> values,
                Context context) throws IOException, InterruptedException {
            int sum = 0;
            for (IntWritable val : values) {
                sum += val.get();
            }
            result.set(sum);
            context.write(key, result);
        }
    }

    public static void main(String[] args) throws Exception {
        Configuration conf = new Configuration();
        
        String[] otherArgs =
                new GenericOptionsParser(conf, args).getRemainingArgs();
        if (otherArgs.length < 2) {
            System.err.println("Usage: wordcount <in> [<in>...] <out>");
            System.exit(2);
        }
        Job job = new Job(conf, "word count");
        job.setJarByClass(WordCount.class);
        job.setMapperClass(TokenizerMapper.class);
        job.setCombinerClass(IntSumReducer.class);
        job.setReducerClass(IntSumReducer.class);
        job.setOutputKeyClass(Text.class);
        job.setOutputValueClass(IntWritable.class);
        
        for (int i = 0; i < otherArgs.length - 1; ++i) {
            FileInputFormat.addInputPath(job, new Path(otherArgs[i]));
        }
        FileOutputFormat.setOutputPath(job, new Path(
                otherArgs[otherArgs.length - 1]));
        System.exit(job.waitForCompletion(true) ? 0 : 1); 
    }
}

    

    我把一個(gè)jar包放在的D盤的mylib目錄下面,這個(gè)jar是上一篇文章《使用Hadoop提供的API操作HDFS》中的類打成的jar包

Hadoop應(yīng)用引用第三方j(luò)ar的幾種方式(一)

    在工程右鍵Build Path==》Configure Build Path==》Add External JARs,找到上面目錄下的jar文件,即可引入。此時(shí)如果在Eclipse下運(yùn)行WordCount類,程序正確執(zhí)行,沒有問題。

    此時(shí)對(duì)整個(gè)工程打包的時(shí)候,你可以看到,打包的時(shí)候是沒有機(jī)會(huì)選擇引入的第三方j(luò)ar包的,只能選擇要打包的類,這里只選擇了一個(gè)WordCount,打包過程如下所示

Hadoop應(yīng)用引用第三方j(luò)ar的幾種方式(一)

    此時(shí)在Hadoop集群上面運(yùn)行WordCount_dlib.jar,通過下面的命令運(yùn)行:

    hadoop jar WordCount_dlib.jar com.hadoop.examples.WordCount input outputdlib

    不出意外,程序報(bào)ClassNotFound異常,結(jié)果如下所示

Hadoop應(yīng)用引用第三方j(luò)ar的幾種方式(一)

    第二種引入方法

    在項(xiàng)目的根目錄(如果不是根目錄,我沒有進(jìn)行測(cè)試是否可行)下新建lib目錄(在工程上右鍵,新建文件夾),名字只能是lib,你換成其他的名字,它不會(huì)自動(dòng)加載的。把上面的jar放到lib下面,然后在工程右鍵Build Path==》Configure Build Path==》Add JARs,找到工程目錄lib下的jar文件,即可引入。此時(shí)如果在Eclipse下運(yùn)行WordCount類,程序正確執(zhí)行,沒有問題。

Hadoop應(yīng)用引用第三方j(luò)ar的幾種方式(一)    此時(shí)對(duì)整個(gè)工程打包的時(shí)候,你可以看到,打包的時(shí)候是可以選擇lib下的jar包的,也可以選擇要打包的類,這里只選擇了一個(gè)WordCount,打包過程如下所示

Hadoop應(yīng)用引用第三方j(luò)ar的幾種方式(一)

    此時(shí)在Hadoop集群上面運(yùn)行WordCount_plib.jar,通過下面的命令運(yùn)行:

    hadoop jar WordCount_plib.jar com.hadoop.examples.WordCount input outputplib

    程序可以正常運(yùn)行,結(jié)果如下所示,

Hadoop應(yīng)用引用第三方j(luò)ar的幾種方式(一)

    為什么會(huì)這樣?就是因?yàn)閃ordCount_plib.jar內(nèi)部有其使用到的jar,它能夠自動(dòng)的加載它內(nèi)部的lib目錄下面的jar。

    名字如果存放jar的名字不是lib的話,雖然你也可以該目錄下的jar文件一起打進(jìn)入,但是它會(huì)報(bào)ClassNotFound的異常,我把lib的名稱改成了mylib重新打成WordCount_mylib.jar,進(jìn)行了測(cè)試運(yùn)行,運(yùn)行結(jié)果如下所示:

Hadoop應(yīng)用引用第三方j(luò)ar的幾種方式(一)    

    這就是我上面為什么強(qiáng)調(diào),工程的根目錄下,一定只能叫做lib才可以的原因。

    文章中所涉及到的四個(gè)jar文件,我會(huì)以附件的放上來的。附件中的文件列表說明:

引入的第三方j(luò)ar文件:OperateHDFS.jar

第一種方式引入jar包,打成的jar文件:WordCount_dlib.jar

第二種方式引入jar包,打成的jar文件:WordCount_plib.jar

第二種方式引入jar包,但是目錄名稱不叫做lib,叫做mylib,打成的jar文件WordCount_mylib.jar

    文章太長(zhǎng)了,剩下的部分再下一篇寫。。。。。

附件:http://down.51cto.com/data/2365539

文章名稱:Hadoop應(yīng)用引用第三方j(luò)ar的幾種方式(一)
網(wǎng)頁(yè)地址:http://www.2m8n56k.cn/article32/jphssc.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供搜索引擎優(yōu)化靜態(tài)網(wǎng)站商城網(wǎng)站網(wǎng)站制作Google自適應(yīng)網(wǎng)站

廣告

聲明:本網(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;郵箱:[email protected]。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

營(yíng)銷型網(wǎng)站建設(shè)
主站蜘蛛池模板: 国产精品综合一区二区三区 | 国产情侣无套精品视频 | 奇米网狠狠干 | 久久午夜精品视频 | 美女黄视频在线 | www.夜色.com| 亚洲国产欧美一区二区欧美 | 亚洲一区毛片 | 国产亚洲欧美一区二区三区 | 九草在线免费观看 | 亚洲天堂.com | 天码毛片一区二区三区入口 | 欧美精品久久天天躁 | 成年人免费网站在线观看 | 免费逼片| 国产人做人爱视频精品 | 亚洲国产亚洲片在线观看播放 | 免费国产成人高清无线看软件 | 欧美在线一区二区三区欧美 | 一级毛片免费在线播放 | 成人毛片在线 | 亚洲视频国产视频 | 中文字幕在线观看一区二区 | 国产精品免费看 | 色偷偷亚洲女人天堂观看欧 | 精品国产一区二区三区免费看 | 一级欧美在线的视频 | 男女在线免费视频 | 日韩美一区二区三区 | 伊人久久国产免费观看视频 | 狠狠色丁香婷婷综合 | 免费观看a毛片一区二区不卡 | 亚洲狠狠ady亚洲精品大秀 | 中文字幕有码在线观看 | 国产精品视频久久久久 | 久久国产精品久久久久久 | 国产一级性生活 | 在线视频观看免费视频18 | 国产亚洲精品久久久久久久 | 欧美成人高清免费大片观看 | 天天摸天天爽视频69视频 |