Hadoop 踩坑記(三)java
Eclipse配置hadoop開發環境node
windows 10git
java 1.8github
namenode(hadoop1-ali) 阿里雲(CentOS 7.3) 120.26.173.104apache
hadoop 版本 2.8.5
windows
須要安裝 Enterprise 版本,因爲網絡緣由,建議使用離線安裝包網絡
https://www.eclipse.org/downl...app
固然在此以前先要安裝 java 在此不作贅述eclipse
把下載好的 Hadoop 解壓到本地目錄。添加系統環境變量:新建變量名 HADOOP_HOME
,值爲Hadoop 的解壓路徑,如 D:\Program Files\hadoop-2.7.5
ide
添加到 path
中:%HADOOP_HOME%\bin
把 hadoop-eclipse-plugin-2.8.5.jar
包複製到 Eclipse 目錄下的 plugins
目錄中。重啓Eclipse。
打開 Window->Prefences
能夠看到左側多出了 Hadoop Map/Reduce
項
點擊多出的 Hadoop Map/Reduce
項,在右側添加 Hadoop 解壓路徑 如 D:\Program Files\hadoop-2.7.5
解壓 hadoop-common-2.8.5-bin-master
包(本人是直接從 github 上找的,要尋找對應版本的文件),把解壓獲得的 bin
目錄下的 hadoop.dll、hadoop.exp、hadoop.lib、winutils.exe
這四個文件複製到 hadoop-2.8.5
的 bin
目錄下。
再把 hadoop.dll
和 winutils.exe
複製到 C:\Windows\System32
目錄下
Eclipse 中依次點擊:Window->Open Perspective->Map/Reduce
,項目左側中出現 DFS Locations
結構。
若是沒有,直接新建一個 map/reduce
項目便可
Eclipse 中依次點擊:Window->Show View ->Other->MapReduce Tools->Map/Reduce Locations
點擊肯定(open)
控制檯多出了 Map/Reduce Locations
視圖。
右鍵 Map/Reduce Locations
視圖的空白處,選擇新建,定義 Hadoop 集羣的連接。
其中 location name 和 user name 隨意
Map/Reduce(V2) Master
配置要與 hadoop 配置中 mapred-site.xml
內容保持一致
DFS Master
配置要與 core-site.xml
內容保持一致
點擊 Finish 後 DFS Locations
下就會出現相關的鏈接信息
在配置正確的狀況下,點開就能看到 hdfs 文件系統中的文件內容,即鏈接成功
項目 src
下建立 Package(本文名爲 wit),Package 下建立 WordCount.java
類
粘貼以下 java 代碼
package wit; 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> <out>"); System.exit(2); } @SuppressWarnings("deprecation") 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); } }
右鍵項目,依次 Run as ->Run Configurations...->Java Application
選 Java Application
後點擊左上角的 New launch application
,配置 Main 標籤參數。
填寫Name(任起),Search...往下拉,找到 WordCount,肯定。
配置 Arguements
(此部分圖來自https://blog.csdn.net/u010185...)
右鍵 WordCount 類,選擇 Build Path -> configure build path
添加 jar 包
點擊 Add External JARs
將 hadoop 解壓文件夾中相關的 jar 包所有添加進來
配置完成,便可點擊 Run 來運行 WordCount 類
運行結果會生成在前面配置的 hdfs 文件系統的指定目錄中,能夠直接在 Eclipse 中查看
原文來自 陳十一的博客