標籤:
注:本文為自用,隨時更新。
一.系統內容Windows7、Ecplise 4.4.0,Hadoop2.7.2Hadoop安裝教程請看:Hadoop2.7.2安裝教程
此處需要注意的是:你的hadoop運行在遠端虛擬機器上,但是你的windows上也需要有hadoop的運行環境,這樣eclipse才能進行遠端偵錯,所按照上面教程安裝完虛擬機器上的hadoop,還需要下載同樣版本的Hadoop加壓到windows上即可,還需要配置相應的環境變數,拷貝winutil.exe.hadoop.dll等檔案到hadoop安裝目錄bin檔案夾下,你可以在網上搜一下,或者可以參考一下這篇文章http://blog.csdn.net/fly_leopard/article/details/51250443。二.安裝步驟1.安裝hadoop外掛程式下載hadoop-eclipse-plugin-2.7.2.jar(點擊下載),並且拷貝到eclipse根目錄下/dropins下2.啟動myeclipse,開啟Perspective:【Window】->【Open Perspective】->【Other...】->【Map/Reduce】->【OK】
3、 開啟一個View:【Window】->【Show View】->【Other...】->【MapReduce Tools】->【Map/Reduce Locations】->【OK】
4.添加Hadoop Location:
點擊New Hadoop location
修改其中的內容:我的hadoop安裝在虛擬機器上,地址為192.168.48.129修改其中內容:Map/Reduce Master 這個框裡
Host:就是jobtracker 所在的叢集機器,這裡寫192.168.48.129
Hort:就是jobtracker 的port,這裡寫的是9001
Map/Reduce Master 這個框裡:這兩個參數就是mapred-site.xml裡面mapred.job.tracker裡面的ip和port
DFS Master 這個框裡
Host:就是namenode所在的叢集機器,這裡寫192.168.48.129
Port:就是namenode的port,這裡寫9000
DFS Master 這個框裡:這兩個參數就是core-site.xml裡面fs.defaultFS(或fs.default.name)裡面的ip和portuser name:這個是串連hadoop的使用者名稱因為我是用hadoop使用者安裝的hadoop,而且沒建立其他的使用者,所以用hadoop。下面的不用填寫。然後點擊finish按鈕,此時,這個視圖中就有多了一條記錄。
重啟eclipse並重新編輯剛才建立的那個串連記錄,現在我們編輯advance parameters tab頁(重啟編輯advance parameters tab頁原因:在建立串連的時候,這個advance paramters tab頁面的一些屬性會顯示不出來,顯示不出來也就沒法設定,所以必須重啟一下eclipse再進來編輯才能看到)
這裡大部分的屬性都已經自動填寫上了,其實就是把core-site.xml,hdfs-site.xml,mapred-site.xml裡面的一些配置屬性展示出來。因為在安裝hadoop的時候,其site系列設定檔裡有改動,所以這裡也要弄成一樣的設定。主要關注的有以下屬性:
fs.defualt.name(fs.defaultFS):這個在General tab頁已經設定了
mapred.job.tracker:這個在General tab頁也設定了
dfs.replication:這個這裡預設是3,因為我在hdfs-site.xml裡面設定成了1,所以這裡也要設定成1 hadoop.tmp.dir:這裡填寫你在core-site.xml中設定的hadoop.tmp.dir
需要修改的內容如
然後點擊finish,然後就串連上了(先要啟動sshd服務,啟動hadoop進程),串連上的標誌
注1:我在這裡遇到一個小問題,我在ubutun上安裝hadoop時,core-site.xml屬性fs.defaultFS設定的地址是localhost,由於許可權原因,我在windows上用eclipse進行串連hadoop,被hadoop拒絕了串連.如下所示:
出現這種情況只需要把fs.defaultFS屬性改為你的ip地址即可,如下所示:
注2:可以在檔案上右擊,選擇刪除試下,通常第一次是不成功的,會提示一堆東西,大意是許可權不足之類,原因是當前的win7登入使用者不是虛擬機器裡hadoop的運行使用者,解決辦法有很多,比如你可以在win7上建立一個hadoop的管理使用者,然後切換成hadoop登入win7,再使用eclipse開發,但是這樣太煩,最簡單的辦法:
hdfs-site.xml裡添加
1 <property>2 <name>dfs.permissions</name>3 <value>false</value>4 </property>
然後在虛擬機器裡,運行hadoop dfsadmin -safemode leave
保險起見,再來一個 hadoop fs -chmod 777 /
總而言之,就是徹底把hadoop的安全檢測關掉(學習階段不需要這些,正式生產上時,不要這麼幹),最後重啟hadoop,再到eclipse裡,重複剛才的刪除檔案操作試下,應該可以了。
5.跑一個wordcount例子
(1)建立Map/Reduce Project:【File】->【New】->【Project...】->【Map/Reduce】->【Map/Reduce Project】->【Project name: TestHadoop】->【Configure Hadoop install directory...】->【Hadoop installation directory: D:\hadoop\hadoop-2.7.2\hadoop-2.7.2】->【Apply】->【OK】->【Next】->【Allow output folders for source folders】->【Finish】
如所示:
(2)建立WordCount類,代碼是從Hadoop內建的例子中copy過來的,如下
代碼:
package com.wimang.test;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 TokenizerMapperextends 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 IntSumReducerextends 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);}}@SuppressWarnings("deprecation")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> <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);FileInputFormat.addInputPath(job, new Path(otherArgs[0]));FileOutputFormat.setOutputPath(job, new Path(otherArgs[1]));System.exit(job.waitForCompletion(true) ? 0 : 1);}}
(3)造一些類比資料 為了運行程式,需要一個輸入的檔案夾和輸出的檔案夾。輸出檔案夾,在程式運行完成後會自動產生。我們需要給程式一個輸入檔案夾。主要可以用兩種方法:
方法一:在eclipse上用滑鼠右鍵即可建立檔案夾(首先要把許可權解決了,上面有解決的方法),一個輸入檔案夾input(名字你任意命名),上傳一兩個帶有單詞的檔案到該檔案夾中即可。
方法二:在運行hadoop的虛擬機器上直接用命令搞掉,具體請參考Hadoop安裝教程_單機/偽分布式配置_Hadoop2.7.2/Ubuntu14.04(轉載,修改部分內容)的
運行Hadoop偽分布式執行個體部分內容即可。
(4)配置運行參數①在建立的項目WordCount,點擊WordCount.java,右鍵-->Run As-->Run Configurations
②在彈出的Run Configurations對話方塊中,點Java Application,右鍵-->New,這時會建立一個application名為WordCount
③配置運行參數,點Arguments,在Program arguments中輸入“你要傳給程式的輸入檔案夾和你要求程式將計算結果儲存的檔案夾”,如:
(5)點擊run,運行程式。
出現如,即為運行成功。
或者在hadoop啟動並執行虛擬機器上通過敲擊命令查看也可以,可以在終端中用命令如下,查看是否組建檔案夾output:
bin/hadoop fs -ls
用下面命令查看產生的檔案內容:
bin/hadoop fs -cat output1/*
(6)運行WordCount中出現的問題。情況1如:
如果雙擊運行windows安裝hadoop目錄下的bin檔案夾中的winutils.exe出現如所示:注:若你的bin下沒有這些檔案,請點擊hadoop_dll_winutil_2.7.2.zip進行下載,解壓到bin目錄下即可,注意hadoop.dll等檔案不要與hadoop衝突。為了不出現依賴性錯誤可以將hadoop.dll放到c:/windows/System32下一份。hadoop windows下環境配置可以參考http://blog.csdn.net/fly_leopard/article/details/51250443。
出現如上問題,只需要下載安裝vc+2013組件即可,為:http://www.microsoft.com/en-us/download/confirmation.aspx?id=40784
情況2
就是沒有沒有寫的許可權,這時候可以參考上面按照eclipse hadoop外掛程式時有提到過解決辦法。如果是安裝我的這個流程走,應該不會出現這個問題。
到此,就可以在windows上進行eclipse遠程開發調試ubutun上的Hadoop了。
注:本文為自用,隨時更新。
windows上eclipse搭建hadoop開發環境(自用,備忘)