Mac+eclipse+hadoop2


此文主要介紹mac環(huán)境下泳姐,在eclipse中搭建hadoop2的開(kāi)發(fā)環(huán)境迷帜,以編寫mapreduce程序沈贝。

開(kāi)發(fā)環(huán)境:

  • mac os x 10.10
  • eclipse
  • hadoop2.6.0
  • hadoop2x-eclipse-plugin

主要流程是先搭建hadoop的偽分布集群袍暴,當(dāng)然也可以搭建真的集群環(huán)境倒源。然后編譯hadoop eclipse插件坊萝。最后配置eclipse并編寫map reduce.

  1. hadoop2安裝孵稽,這個(gè)網(wǎng)上資料挺多,分分鐘可以在本機(jī)上搭個(gè)standlone的偽分布集群十偶。
  2. 安裝eclipse,自己可以到官網(wǎng)下載最新版的eclipse. 然后解壓即安裝菩鲜。
  3. github上下載hadoop2x-eclipse-plugin. 并編譯,拷貝到eclipse下面。注意惦积,這里mac的eclipse home為.

/XXX/Eclipse.app/Contents/Eclipse.

mac下面app是一個(gè)文件夾接校。比如我的就是:

$ pwd
/Users/luke/dev/Eclipse.app/Contents/Eclipse

  1. 配置eclipse并編寫mapreduce程序。著重介紹下這個(gè)狮崩。
    完成上面三步蛛勉,裝好插件后,打開(kāi)eclipse. 現(xiàn)在你可以看到這個(gè)hadoop的console了睦柴。

現(xiàn)在诽凌,你需要?jiǎng)?chuàng)建一個(gè)location, 到時(shí)候你的程序就可以在上面跑了。點(diǎn)擊小象圖標(biāo)坦敌。

map/reduce(V2) Master得和你mapred-site.xml里的配置相同侣诵,一般默認(rèn)9001.
DFS Master得和你defaust fs配置相同,一般默認(rèn)9000.
其他可以隨意配置狱窘。

配置好后啟動(dòng)hadoop(start-all.sh)杜顺,即可在eclipse里面refresh看到如下內(nèi)容;

接下來(lái)創(chuàng)建一個(gè)mapreduce項(xiàng)目。并添加代碼训柴。

import java.io.IOException;
     
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.Path;
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;
     
public class FirstOne {

        //map將輸入中的value復(fù)制到輸出數(shù)據(jù)的key上哑舒,并直接輸出
        public static class Map extends Mapper<Object,Text,Text,Text>{
            private static Text line=new Text();//每行數(shù)據(jù)
           
            //實(shí)現(xiàn)map函數(shù)
            public void map(Object key,Text value,Context context)
                    throws IOException,InterruptedException{
                line=value;
                context.write(line, new Text(""));
            }
           
        }
       
        //reduce將輸入中的key復(fù)制到輸出數(shù)據(jù)的key上妇拯,并直接輸出
        public static class Reduce extends Reducer<Text,Text,Text,Text>{
            //實(shí)現(xiàn)reduce函數(shù)
            public void reduce(Text key,Iterable<Text> values,Context context)
                    throws IOException,InterruptedException{
                context.write(key, new Text(""));
            }
           
        }
       
        public static void main(String[] args) throws Exception{
            Configuration conf = new Configuration();
            //這句話很關(guān)鍵幻馁,hdfs設(shè)置不成功默認(rèn)用本地輸入洗鸵、輸出
            //conf.set("mapred.job.tracker", "localhost:9001");
            conf.set("fs.default.name", "hdfs://localhost:9000");
           
          String[] ioArgs=new String[]{"/input","/output"};
         String[] otherArgs = new GenericOptionsParser(conf, ioArgs).getRemainingArgs();
         if (otherArgs.length != 2) {
         System.err.println("Usage: Data Deduplication <in> <out>");
         System.exit(2);
         }
         
         Job job = new Job(conf, "Data Deduplication");
         job.setJarByClass(FirstOne.class);
         
         //設(shè)置Map、Combine和Reduce處理類
         job.setMapperClass(Map.class);
         job.setCombinerClass(Reduce.class);
         job.setReducerClass(Reduce.class);
         
         //設(shè)置輸出類型
         job.setOutputKeyClass(Text.class);
         job.setOutputValueClass(Text.class);
         
         //設(shè)置輸入和輸出目錄
         FileInputFormat.addInputPath(job, new Path(otherArgs[0]));
         FileOutputFormat.setOutputPath(job, new Path(otherArgs[1]));
         System.exit(job.waitForCompletion(true) ? 0 : 1);
         }
}

導(dǎo)入hadoop相關(guān)的jar文件仗嗦。


這里請(qǐng)注意膘滨,導(dǎo)入以下目錄下的所有庫(kù),不然可能程序里面沒(méi)錯(cuò)了稀拐,但run的時(shí)候一堆依賴包找不到火邓。

  • $HADOOP_HOME/share/hadoop/common
  • $HADOOP_HOME/share/hadoop/common/lib
  • $HADOOP_HOME/share/hadoop/hdfs
  • $HADOOP_HOME/share/hadoop/mapred
  • $HADOOP_HOME/share/hadoop/yarn

你可以發(fā)現(xiàn)除common外其他目錄下也有XX/lib,但他們都是從common/lib拷貝過(guò)去的,所以common/lib是必須的德撬。
比如這種類型的錯(cuò)誤就是庫(kù)沒(méi)導(dǎo)入完全造成的铲咨。

Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/commons/logging/LogFactory
at org.apache.hadoop.conf.Configuration.<clinit>(Configuration.java:173)
at FirstOne.main(FirstOne.java:40)
Caused by: java.lang.ClassNotFoundException: org.apache.commons.logging.LogFactory
at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331)
at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
... 2 more

好了,接下來(lái)你可以run on hadoop了蜓洪。選擇你項(xiàng)目的那個(gè)application.

這里附上測(cè)試文件內(nèi)容纤勒。

file1.txt
2012-3-1 a
2012-3-2 b
2012-3-3 c
2012-3-4 d
2012-3-5 a
2012-3-6 b
2012-3-7 c
2012-3-3 c

file2
2012-3-1 b
2012-3-2 a
2012-3-3 b
2012-3-4 d
2012-3-5 a
2012-3-6 c
2012-3-7 d
2012-3-3 c
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市隆檀,隨后出現(xiàn)的幾起案子摇天,更是在濱河造成了極大的恐慌,老刑警劉巖恐仑,帶你破解...
    沈念sama閱讀 222,590評(píng)論 6 517
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件泉坐,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡裳仆,警方通過(guò)查閱死者的電腦和手機(jī)腕让,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,157評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)鉴逞,“玉大人记某,你說(shuō)我怎么就攤上這事」辜瘢” “怎么了液南?”我有些...
    開(kāi)封第一講書(shū)人閱讀 169,301評(píng)論 0 362
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)勾徽。 經(jīng)常有香客問(wèn)我滑凉,道長(zhǎng),這世上最難降的妖魔是什么喘帚? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 60,078評(píng)論 1 300
  • 正文 為了忘掉前任畅姊,我火速辦了婚禮,結(jié)果婚禮上吹由,老公的妹妹穿的比我還像新娘若未。我一直安慰自己,他們只是感情好倾鲫,可當(dāng)我...
    茶點(diǎn)故事閱讀 69,082評(píng)論 6 398
  • 文/花漫 我一把揭開(kāi)白布粗合。 她就那樣靜靜地躺著萍嬉,像睡著了一般。 火紅的嫁衣襯著肌膚如雪隙疚。 梳的紋絲不亂的頭發(fā)上壤追,一...
    開(kāi)封第一講書(shū)人閱讀 52,682評(píng)論 1 312
  • 那天,我揣著相機(jī)與錄音供屉,去河邊找鬼行冰。 笑死,一個(gè)胖子當(dāng)著我的面吹牛伶丐,可吹牛的內(nèi)容都是我干的悼做。 我是一名探鬼主播,決...
    沈念sama閱讀 41,155評(píng)論 3 422
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼哗魂,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼贿堰!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起啡彬,我...
    開(kāi)封第一講書(shū)人閱讀 40,098評(píng)論 0 277
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤羹与,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后庶灿,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體纵搁,經(jīng)...
    沈念sama閱讀 46,638評(píng)論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,701評(píng)論 3 342
  • 正文 我和宋清朗相戀三年往踢,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了腾誉。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,852評(píng)論 1 353
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡峻呕,死狀恐怖利职,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情瘦癌,我是刑警寧澤猪贪,帶...
    沈念sama閱讀 36,520評(píng)論 5 351
  • 正文 年R本政府宣布,位于F島的核電站讯私,受9級(jí)特大地震影響热押,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜斤寇,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,181評(píng)論 3 335
  • 文/蒙蒙 一桶癣、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧娘锁,春花似錦牙寞、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 32,674評(píng)論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)尤慰。三九已至,卻和暖如春雷蹂,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背杯道。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,788評(píng)論 1 274
  • 我被黑心中介騙來(lái)泰國(guó)打工匪煌, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人党巾。 一個(gè)月前我還...
    沈念sama閱讀 49,279評(píng)論 3 379
  • 正文 我出身青樓萎庭,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親齿拂。 傳聞我的和親對(duì)象是個(gè)殘疾皇子驳规,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,851評(píng)論 2 361

推薦閱讀更多精彩內(nèi)容

  • 1、運(yùn)行環(huán)境 主機(jī)IP 主機(jī)名 2署海、配置主機(jī)名(分別在五臺(tái)機(jī)器上執(zhí)行) hostname +主機(jī)名例如: h...
    獻(xiàn)給記性不好的自己閱讀 3,560評(píng)論 0 6
  • 介紹 Hive是運(yùn)行在Hadoop之上的數(shù)據(jù)倉(cāng)庫(kù)吗购,將結(jié)構(gòu)化的數(shù)據(jù)文件映射為一張數(shù)據(jù)庫(kù)表,提供簡(jiǎn)單類SQL查詢語(yǔ)言砸狞,...
    syncwt閱讀 4,729評(píng)論 0 7
  • ClassLoader翻譯過(guò)來(lái)就是類加載器捻勉,普通的java開(kāi)發(fā)者其實(shí)用到的不多,但對(duì)于某些框架開(kāi)發(fā)者來(lái)說(shuō)卻非常常見(jiàn)...
    時(shí)待吾閱讀 1,079評(píng)論 0 1
  • /Library/Java/JavaVirtualMachines/jdk-9.jdk/Contents/Home...
    光劍書(shū)架上的書(shū)閱讀 3,893評(píng)論 2 8
  • HIVE是一個(gè)基于Hadoop的數(shù)據(jù)倉(cāng)庫(kù)刀森,適用于一些高延遲性的應(yīng)用踱启。如果對(duì)延遲性要求比較高,則可以選擇Hbase研底。...
    夏無(wú)憂陽(yáng)閱讀 5,054評(píng)論 0 12