windows 32位eclipse遠程hadoop開發(fā)環(huán)境搭建
本文假設(shè)hadoop環(huán)境在遠程機器(如linux服務(wù)器上),hadoop版本為2.5.2
注:本文eclipse/intellij idea 遠程調(diào)試hadoop 2.6.0主要參考了并在其基礎(chǔ)上有所調(diào)整
由于我喜歡在win7 64位上安裝32位的軟件,比如32位jdk,32位eclipse,所以雖然本文中的操作系統(tǒng)是win7 64位,但是所有的軟件都是32位的。
軟件版本:
操作系統(tǒng):win7 64位
eclipse: eclipse-jee-mars-2-win32
java: 1.8.0_77 32位
hadoop:2.5.2
一、安裝hadoop
1、在win7中隨便找一個目錄解壓hadoop-2.5.2.tar.gz,比如D:\app\hadoop-2.5.2\
2、配置環(huán)境變量
HADOOP_HOME = D:\app\hadoop-2.5.2\
二、安裝hadoop eclipse插件
1、下載hadoop-eclipse-plugin
hadoop-eclipse-plugin是一個專門用于eclipse的hadoop插件,可以直接在IDE環(huán)境中查看hdfs的目錄和文件內(nèi)容。其源代碼托管于github上,官網(wǎng)地址是https://github.com/winghc/hadoop2x-eclipse-plugin 下載release文件夾中的hadoop-eclipse-plugin-2.6.0.jar即可
2、下載windows 32位平臺的hadoop插件包(hadoop.dll,winutils.exe)
由于我們的軟件環(huán)境是32位的,所以需要下載32位的hadoop.dll和winutils.exe,下載地址大家可以百度 hadoop.dll 32
比如下載這個:http://xiazai.jb51.net/201607/yuanma/eclipse-hadoop(jb51.net).rar
將winutils.exe復(fù)制到$HADOOP_HOME\bin目錄,將hadoop.dll復(fù)制到C:\Windows\SysWOW64目錄下(注:由于我們的操作系統(tǒng)是64位,而軟件是32位,所以我們是拷到這個目錄下,另外,如果你的操作系統(tǒng)就是32位,那么就直接拷到c:\windwos\system32目錄下)
3、配置hadoop-eclipse-plugin插件
啟動eclipse,window->preferences->hadoop map/reduce 指定win7上的hadoop根目錄(即:$HADOOP_HOME)
切換Map/reduce視圖
windows->show view->other Map/Reduce Locations
然后在下面的Map/Reduce Locations 面板中添加新的Location
按照如下配置
Location name 這里就是起個名字,隨便起
Map/Reduce(V2) Master Host 這里就是虛擬機里hadoop master對應(yīng)的IP地址,下面的端口對應(yīng) hdfs-site.xml里dfs.datanode.ipc.address屬性所指定的端口
DFS Master Port這里的端口,對應(yīng)core-site.xml里fs.defaultFS所指定的端口
最后的user name要跟虛擬機里運行hadoop的用戶名一致,我是用hadoop身份安裝運行hadoop 2.6.0的,所以這里填寫hadoop,如果你是用root安裝的,相應(yīng)的改成root
這些參數(shù)指定好以后,點擊Finish,eclipse就知道如何去連接hadoop了,一切順利的話,在Project Explorer面板中,就能看到hdfs里的目錄和文件了
可以在文件上右擊,選擇刪除試下,通常第一次是不成功的,會提示一堆東西,大意是權(quán)限不足之類,原因是當(dāng)前的win7登錄用戶不是虛擬機里hadoop的運行用戶,解決辦法有很多,比如你可以在win7上新建一個hadoop的管理員用戶,然后切換成hadoop登錄win7,再使用eclipse開發(fā),但是這樣太煩,最簡單的辦法:
hdfs-site.xml里添加
<property> <name>dfs.permissions.enabled</name> <value>false</value> </property>
總而言之,就是徹底把hadoop的安全檢測關(guān)掉(學(xué)習(xí)階段不需要這些,正式生產(chǎn)上時,不要這么干),最后重啟hadoop,再到eclipse里,重復(fù)剛才的刪除文件操作試下,應(yīng)該可以了。
注:如果無法連接,請先嘗試telnet 192.168.1.6 9000 (請將ip和端口換成自己的hadoop server ip和端口)確保端口可以訪問。
如果telnet不成功,可能是core-site.xml里fs.defaultFS的值有問題,比如配置的是localhost:9000,可以考慮把localhost換成主機名
三、編寫wordcount示例
1、新建一個項目,選擇Map/Reduce Project
后面的Next就行了,然后新建一個類WodCount.java 代碼如下:
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<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 = Job.getInstance(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); } }
然后再src目錄下創(chuàng)建一個log4j.properties,內(nèi)容如下:(為了方便運行起來后,查看各種輸出)
log4j.rootLogger=INFO, stdout #log4j.logger.org.springframework=INFO #log4j.logger.org.apache.activemq=INFO #log4j.logger.org.apache.activemq.spring=WARN #log4j.logger.org.apache.activemq.store.journal=INFO #log4j.logger.org.activeio.journal=INFO log4j.appender.stdout=org.apache.log4j.ConsoleAppender log4j.appender.stdout.layout=org.apache.log4j.PatternLayout log4j.appender.stdout.layout.ConversionPattern=%d{ABSOLUTE} | %-5.5p | %-16.16t | %-32.32c{1} | %-32.32C %4L | %m%n
最終目錄結(jié)構(gòu)如下:
2、配置運行參數(shù)
因為WordCount是輸入一個文件用于統(tǒng)計單詞字,然后輸出到另一個文件夾下,所以給二個參數(shù),參考上圖,在Program arguments里,輸入
hdfs://192.168.1.6:9000/user/nub1.txt
hdfs://192.168.1.6:9000/user/output
注意的是,如果user/nub1.txt文件沒有,請先手動上傳(使用eclipse中DFS Location工具的右鍵),然后/output/ 必須是不存在的,否則程序運行到最后,發(fā)現(xiàn)目標(biāo)目錄存在,也會報錯。
好了,運行即可
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
如何使用Java redis實現(xiàn)發(fā)送手機驗證碼功能
這篇文章主要介紹了如何使用Java redis實現(xiàn)發(fā)送手機驗證碼功能,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下2020-05-05BufferedInputStream(緩沖輸入流)詳解_動力節(jié)點Java學(xué)院整理
這篇文章主要為大家詳細介紹了BufferedInputStream緩沖輸入流的相關(guān)資料,具有一定的參考價值,感興趣的小伙伴們可以參考一下2017-05-05Java 替換字符串右側(cè)出現(xiàn)的第一個子串方式
這篇文章主要介紹了Java 替換字符串右側(cè)出現(xiàn)的第一個子串方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-08-08Spring學(xué)習(xí)筆記2之表單數(shù)據(jù)驗證、文件上傳實例代碼
這篇文章主要介紹了Spring學(xué)習(xí)筆記2之表單數(shù)據(jù)驗證、文件上傳 的相關(guān)資料,非常不錯,具有參考借鑒價值,需要的朋友可以參考下2016-07-07SpringBoot快速搭建web項目詳細步驟總結(jié)
這篇文章主要介紹了SpringBoot快速搭建web項目詳細步驟總結(jié) ,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2018-12-12Java8之lambda最佳實踐_動力節(jié)點Java學(xué)院整理
在8 里面Lambda是最火的主題,不僅僅是因為語法的改變,更重要的是帶來了函數(shù)式編程的思想,我覺得優(yōu)秀的程序員,有必要學(xué)習(xí)一下函數(shù)式編程的思想以開闊思路2017-06-06