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

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Hadoop集群_Eclipse开发环境设置

發(fā)布時間:2025/3/21 编程问答 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Hadoop集群_Eclipse开发环境设置 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

1、Hadoop開發(fā)環(huán)境簡介

1.1 Hadoop集群簡介

  Java版本:jdk-6u31-linux-i586.bin

  Linux系統(tǒng):CentOS6.0

  Hadoop版本:hadoop-1.0.0.tar.gz

1.2 Windows開發(fā)簡介

  Java版本:jdk-6u31-windows-i586.exe

  Win系統(tǒng):Windows 7 旗艦版

  Eclipse軟件:eclipse-jee-indigo-SR1-win32.zip | eclipse-jee-helios-SR2-win32.zip

  Hadoop軟件:hadoop-1.0.0.tar.gz

  Hadoop Eclipse 插件:hadoop-eclipse-plugin-1.0.0.jar

  下載地址:http://download.csdn.net/detail/xia520pi/4113746

  備注:下面是網(wǎng)上收集的收集的"hadoop-eclipse-plugin-1.0.0.jar",除"版本2.0"是根據(jù)"V1.0"按照"常見問題FAQ_1"改的之外,剩余的"V3.0"、"V4.0"和"V5.0"和"V2.0"一樣是別人已經(jīng)弄好的,而且我已經(jīng)都測試過,沒有任何問題,可以放心使用。我們這里選擇第"V5.0"使用。記得在使用時重新命名為"hadoop-eclipse-plugin-1.0.0.jar"。

?

2、Hadoop Eclipse簡介和使用

2.1 Eclipse插件介紹

  Hadoop是一個強大的并行框架,它允許任務(wù)在其分布式集群上并行處理。但是編寫、調(diào)試Hadoop程序都有很大難度。正因為如此,Hadoop的開發(fā)者開發(fā)出了Hadoop Eclipse插件,它在Hadoop的開發(fā)環(huán)境中嵌入了Eclipse,從而實現(xiàn)了開發(fā)環(huán)境的圖形化,降低了編程難度。在安裝插件,配置Hadoop的相關(guān)信息之后,如果用戶創(chuàng)建Hadoop程序,插件會自動導(dǎo)入Hadoop編程接口的JAR文件,這樣用戶就可以在Eclipse的圖形化界面中編寫、調(diào)試、運行Hadoop程序(包括單機程序和分布式程序),也可以在其中查看自己程序的實時狀態(tài)、錯誤信息和運行結(jié)果,還可以查看、管理HDFS以及文件。總地來說,Hadoop Eclipse插件安裝簡單,使用方便,功能強大,尤其是在Hadoop編程方面,是Hadoop入門和Hadoop編程必不可少的工具。

2.2 Hadoop工作目錄簡介

  為了以后方便開發(fā),我們按照下面把開發(fā)中用到的軟件安裝在此目錄中,JDK安裝除外,我這里把JDK安裝在C盤的默認安裝路徑下,下面是我的工作目錄:

?

??? 系統(tǒng)磁盤(E:)

??????? |---HadoopWorkPlat

??????????? |--- eclipse

??????????? |--- hadoop-1.0.0

??????????? |--- workplace

??????????? |---……

?

  按照上面目錄把Eclipse和Hadoop解壓到"E:\HadoopWorkPlat"下面,并創(chuàng)建"workplace"作為Eclipse的工作空間。

?

?

  備注:大家可以按照自己的情況,不一定按照我的結(jié)構(gòu)來設(shè)計。

2.3 修改系統(tǒng)管理員名字

  經(jīng)過兩天多次探索,為了使Eclipse能正常對Hadoop集群的HDFS上的文件能進行修改和刪除,所以修改你工作時所用的Win7系統(tǒng)管理員名字,默認一般為"Administrator",把它修改為"hadoop",此用戶名與Hadoop集群普通用戶一致,大家應(yīng)該記得我們Hadoop集群中所有的機器都有一個普通用戶——hadoop,而且Hadoop運行也是用這個用戶進行的。為了不至于為權(quán)限苦惱,我們可以修改Win7上系統(tǒng)管理員的姓名,這樣就避免出現(xiàn)該用戶在Hadoop集群上沒有權(quán)限等都疼問題,會導(dǎo)致在Eclipse中對Hadoop集群的HDFS創(chuàng)建和刪除文件受影響。

  你可以做一下實驗,查看Master.Hadoop機器上"/usr/hadoop/logs"下面的日志。發(fā)現(xiàn)權(quán)限不夠,不能進行"Write"操作,網(wǎng)上有幾種解決方案,但是對Hadoop1.0不起作用,詳情見"常見問題FAQ_2"。下面我們進行修改管理員名字。

  首先"右擊"桌面上圖標(biāo)"我的電腦",選擇"管理",彈出界面如下:

?

?

  接著選擇"本地用戶和組",展開"用戶",找到系統(tǒng)管理員"Administrator",修改其為"hadoop",操作結(jié)果如下圖:

?

?

  最后,把電腦進行"注銷"或者"重啟電腦",這樣才能使管理員才能用這個名字。

2.4 Eclipse插件開發(fā)配置

  第一步:把我們的"hadoop-eclipse-plugin-1.0.0.jar"放到Eclipse的目錄的"plugins"中,然后重新Eclipse即可生效。

?

??? 系統(tǒng)磁盤(E:)

??????? |---HadoopWorkPlat

??????????? |--- eclipse

??????????????? |--- plugins

??????????????????? |--- hadoop-eclipse-plugin-1.0.0.jar

?

  上面是我的"hadoop-eclipse-plugin"插件放置的地方。重啟Eclipse如下圖:

?

?

  細心的你從上圖中左側(cè)"Project Explorer"下面發(fā)現(xiàn)"DFS Locations",說明Eclipse已經(jīng)識別剛才放入的Hadoop Eclipse插件了。

?

  第二步:選擇"Window"菜單下的"Preference",然后彈出一個窗體,在窗體的左側(cè),有一列選項,里面會多出"Hadoop Map/Reduce"選項,點擊此選項,選擇Hadoop的安裝目錄(如我的Hadoop目錄:E:\HadoopWorkPlat\hadoop-1.0.0)。結(jié)果如下圖:

?

?

  第三步:切換"Map/Reduce"工作目錄,有兩種方法:

  1)選擇"Window"菜單下選擇"Open Perspective",彈出一個窗體,從中選擇"Map/Reduce"選項即可進行切換。

?

?

  2)在Eclipse軟件的右上角,點擊圖標(biāo)""中的"",點擊"Other"選項,也可以彈出上圖,從中選擇"Map/Reduce",然后點擊"OK"即可確定。

  切換到"Map/Reduce"工作目錄下的界面如下圖所示。

?

?

  第四步:建立與Hadoop集群的連接,在Eclipse軟件下面的"Map/Reduce Locations"進行右擊,彈出一個選項,選擇"New Hadoop Location",然后彈出一個窗體。

?

?

?

  注意上圖中的紅色標(biāo)注的地方,是需要我們關(guān)注的地方。

  • Location Name:可以任意其,標(biāo)識一個"Map/Reduce Location"
  • Map/Reduce Master
    Host:192.168.1.2(Master.Hadoop的IP地址)
    Port:9001
  • DFS Master
    Use M/R Master host:前面的勾上。(因為我們的NameNode和JobTracker都在一個機器上。)
    Port:9000
  • User name:hadoop(默認為Win系統(tǒng)管理員名字,因為我們之前改了所以這里就變成了hadoop。)

?

?

  備注:這里面的Host、Port分別為你在mapred-site.xml、core-site.xml中配置的地址及端口。不清楚的可以參考"Hadoop集群_第5期_Hadoop安裝配置_V1.0"進行查看。

?  接著點擊"Advanced parameters"從中找見"hadoop.tmp.dir",修改成為我們Hadoop集群中設(shè)置的地址,我們的Hadoop集群是"/usr/hadoop/tmp",這個參數(shù)在"core-site.xml"進行了配置。

?

?

  點擊"finish"之后,會發(fā)現(xiàn)Eclipse軟件下面的"Map/Reduce Locations"出現(xiàn)一條信息,就是我們剛才建立的"Map/Reduce Location"。

?

????

  第五步:查看HDFS文件系統(tǒng),并嘗試建立文件夾和上傳文件。點擊Eclipse軟件左側(cè)的"DFS Locations"下面的"Win7ToHadoop",就會展示出HDFS上的文件結(jié)構(gòu)。

?

????

  右擊"Win7ToHadoopàuseràhadoop"可以嘗試建立一個"文件夾--xiapi",然后右擊刷新就能查看我們剛才建立的文件夾。

?

?

  創(chuàng)建完之后,并刷新,顯示結(jié)果如下:

?

?

  用SecureCRT遠程登錄"Master.Hadoop"服務(wù)器,用下面命令查看是否已經(jīng)建立一個"xiapi"的文件夾。

?

hadoop fs -ls

?

????

  到此為止,我們的Hadoop Eclipse開發(fā)環(huán)境已經(jīng)配置完畢,不盡興的同學(xué)可以上傳點本地文件到HDFS分布式文件上,可以互相對比意見文件是否已經(jīng)上傳成功。

3、Eclipse運行WordCount程序

3.1 配置Eclipse的JDK

  如果電腦上不僅僅安裝的JDK6.0,那么要確定一下Eclipse的平臺的默認JDK是否6.0。從"Window"菜單下選擇"Preference",彈出一個窗體,從窗體的左側(cè)找見"Java",選擇"Installed JREs",然后添加JDK6.0。下面是我的默認選擇JRE。

?

?

  下面是沒有添加之前的設(shè)置如下:

?

?

  下面是添加完JDK6.0之后結(jié)果如下:

?

?

  接著設(shè)置Complier。

?

?

3.2 設(shè)置Eclipse的編碼為UTF-8

?

?

3.3 創(chuàng)建MapReduce項目

?  從"File"菜單,選擇"Other",找到"Map/Reduce Project",然后選擇它。

?

????

  接著,填寫MapReduce工程的名字為"WordCountProject",點擊"finish"完成。

?

?

  目前為止我們已經(jīng)成功創(chuàng)建了MapReduce項目,我們發(fā)現(xiàn)在Eclipse軟件的左側(cè)多了我們的剛才建立的項目。

?

?

3.4 創(chuàng)建WordCount類

  選擇"WordCountProject"工程,右擊彈出菜單,然后選擇"New",接著選擇"Class",然后填寫如下信息:

?

?

  因為我們直接用Hadoop1.0.0自帶的WordCount程序,所以報名需要和代碼中的一致為"org.apache.hadoop.examples",類名也必須一致為"WordCount"。這個代碼放在如下的結(jié)構(gòu)中。

?

??? hadoop-1.0.0

??????? |---src

??????????? |---examples

??????????????? |---org

??????????????????? |---apache

??????????????????????? |---hadoop

??????????????????????????? |---examples

?

  從上面目錄中找見"WordCount.java"文件,用記事本打開,然后把代碼復(fù)制到剛才建立的java文件中。當(dāng)然源碼有些變動,變動的紅色已經(jīng)標(biāo)記出。

?

?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 package org.apache.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; ?? 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 { ??????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 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(); ????conf.set("mapred.job.tracker", "192.168.1.2:9001"); ????String[] ars=new String[]{"input","newout"}; ????String[] otherArgs = new GenericOptionsParser(conf, ars).getRemainingArgs(); ????if (otherArgs.length != 2) { ??????System.err.println("Usage: wordcount? "); ??????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); ????FileInputFormat.addInputPath(job, new Path(otherArgs[0])); ????FileOutputFormat.setOutputPath(job, new Path(otherArgs[1])); ????System.exit(job.waitForCompletion(true) ? 0 : 1); ??} }

?

  備注:如果不加"conf.set("mapred.job.tracker", "192.168.1.2:9001");",將提示你的權(quán)限不夠,其實照成這樣的原因是剛才設(shè)置的"Map/Reduce Location"其中的配置不是完全起作用,而是在本地的磁盤上建立了文件,并嘗試運行,顯然是不行的。我們要讓Eclipse提交作業(yè)到Hadoop集群上,所以我們這里手動添加Job運行地址。詳細參考"常見問題FAQ_3"。

3.5 運行WordCount程序

  選擇"Wordcount.java"程序,右擊一次按照"Run ASàRun on Hadoop"運行。然后會彈出如下圖,按照下圖進行操作。

?

?

  運行結(jié)果如下:

?

?

  從上圖中我們得知我們的程序已經(jīng)運行成功了。

3.6 查看WordCount運行結(jié)果

  查看Eclipse軟件左側(cè),右擊"DFS LocationsàWin7ToHadoopàuseràhadoop",點擊刷新按鈕"Refresh",我們剛才出現(xiàn)的文件夾"newoutput"會出現(xiàn)。記得"newoutput"文件夾是運行程序時自動創(chuàng)建的,如果已經(jīng)存在相同的的文件夾,要么程序換個新的輸出文件夾,要么刪除HDFS上的那個重名文件夾,不然會出錯。

?

?

  打開"newoutput"文件夾,打開"part-r-00000"文件,可以看見執(zhí)行后的結(jié)果。

?

?

  到此為止,Eclipse開發(fā)環(huán)境設(shè)置已經(jīng)完畢,并且成功運行Wordcount程序,下一步我們真正開始Hadoop之旅。

4、常見問題FAQ

4.1 "error: failure to login"問題

  下面以網(wǎng)上找的"hadoop-0.20.203.0"為例,我在使用"V1.0"時也出現(xiàn)這樣的情況,原因就是那個"hadoop-eclipse-plugin-1.0.0_V1.0.jar",是直接把源碼編譯而成,故而缺少相應(yīng)的Jar包。具體情況如下

  詳細地址:http://blog.csdn.net/chengfei112233/article/details/7252404

  在我實踐嘗試中,發(fā)現(xiàn)hadoop-0.20.203.0版本的該包如果直接復(fù)制到eclipse的插件目錄中,在連接DFS時會出現(xiàn)錯誤,提示信息為: "error: failure to login"。

  彈出的錯誤提示框內(nèi)容為"An internal error occurred during: "Connecting to DFS hadoop".org/apache/commons/configuration/Configuration". 經(jīng)過察看Eclipse的log,發(fā)現(xiàn)是缺少jar包導(dǎo)致的。進一步查找資料后,發(fā)現(xiàn)直接復(fù)制hadoop-eclipse-plugin-0.20.203.0.jar,該包中l(wèi)ib目錄下缺少了jar包。

  經(jīng)過網(wǎng)上資料搜集,此處給出正確的安裝方法:

  首先要對hadoop-eclipse-plugin-0.20.203.0.jar進行修改。用歸檔管理器打開該包,發(fā)現(xiàn)只有commons-cli-1.2.jar 和hadoop-core.jar兩個包。將hadoop/lib目錄下的:

  • commons-configuration-1.6.jar ,
  • commons-httpclient-3.0.1.jar ,
  • commons-lang-2.4.jar ,
  • jackson-core-asl-1.0.1.jar
  • jackson-mapper-asl-1.0.1.jar

一共5個包復(fù)制到hadoop-eclipse-plugin-0.20.203.0.jar的lib目錄下,如下圖:

?

?

  然后,修改該包META-INF目錄下的MANIFEST.MF,將classpath修改為一下內(nèi)容:

?

Bundle-ClassPath:classes/,lib/hadoop-core.jar,lib/commons-cli-1.2.jar,lib/commons-httpclient-3.0.1.jar,lib/jackson-core-asl-1.0.1.jar,lib/jackson-mapper-asl-1.0.1.jar,lib/commons-configuration-1.6.jar,lib/commons-lang-2.4.jar

?

?

  這樣就完成了對hadoop-eclipse-plugin-0.20.203.0.jar的修改。

  最后,將hadoop-eclipse-plugin-0.20.203.0.jar復(fù)制到Eclipse的plugins目錄下。

  備注:上面的操作對"hadoop-1.0.0"一樣適用。

4.2 "Permission denied"問題

  網(wǎng)上試了很多,有提到"hadoop fs -chmod 777 /user/hadoop ",有提到"dfs.permissions 的配置項,將value值改為 false",有提到"hadoop.job.ugi",但是通通沒有效果。

  參考文獻:

??????? 地址1:http://www.cnblogs.com/acmy/archive/2011/10/28/2227901.html

??????? 地址2:http://sunjun041640.blog.163.com/blog/static/25626832201061751825292/

  ??錯誤類型:org.apache.hadoop.security.AccessControlException: org.apache.hadoop.security .AccessControlException: Permission denied: user=*********, access=WRITE, inode="hadoop": hadoop:supergroup:rwxr-xr-x

  ? 解決方案:

    我的解決方案直接把系統(tǒng)管理員的名字改成你的Hadoop集群運行hadoop的那個用戶。

4.3 "Failed to set permissions of path"問題

   參考文獻:https://issues.apache.org/jira/browse/HADOOP-8089

   錯誤信息如下:

    ERROR security.UserGroupInformation: PriviledgedActionException as: hadoop cause:java.io.IOException Failed to set permissions of path:\usr\hadoop\tmp\mapred\staging\hadoop753422487\.staging to 0700 Exception in thread "main" java.io.IOException: Failed to set permissions of path: \usr\hadoop\tmp \mapred\staging\hadoop753422487\.staging to 0700

   解決方法:

?

Configuration conf = new Configuration();

conf.set("mapred.job.tracker", "[server]:9001");

?

  ?"[server]:9001"中的"[server]"為Hadoop集群Master的IP地址。

4.4 "hadoop mapred執(zhí)行目錄文件權(quán)"限問題

   參考文獻:http://blog.csdn.net/azhao_dn/article/details/6921398

   錯誤信息如下:

   job Submission failed with exception 'java.io.IOException(The ownership/permissions on the staging directory /tmp/hadoop-hadoop-user1/mapred/staging/hadoop-user1/.staging is not as expected. It is owned by hadoop-user1 and permissions are rwxrwxrwx. The directory must be owned by the submitter hadoop-user1 or by hadoop-user1 and permissions must be rwx------)

   修改權(quán)限:

?

?

  這樣就能解決問題。

?

轉(zhuǎn)載于:https://www.cnblogs.com/codework/p/3997944.html

總結(jié)

以上是生活随笔為你收集整理的Hadoop集群_Eclipse开发环境设置的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。