IDEA+Maven运行调试MapReduce程序
IDEA+Maven運行調試MapReduce程序
文章目錄
- IDEA+Maven運行調試MapReduce程序
- 新建java類
- 配置輸入文件路徑
- 修改level參數
- 添加Application配置
- 運行
- 調試
- 常見報錯
- Error:java: 不支持發行版本 5
- 系統找不到指定的文件
- Windows下的權限問題
- 參考博客
新建java類
在項目的左側文件目錄中,選擇 srcsrcsrc -> mainmainmain -> javajavajava,鼠標右鍵點擊,選擇 NewNewNew -> JavaClassJava ClassJavaClass
在彈窗中輸入你想要建類的名字,回車即可。這里我們使用Hadoop官方給出的教程代碼 WordCount
在剛才建立的 WordCount類中添加代碼,WordCount對輸入文件字符進行計數,輸出計數的結果。
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);}}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);} }配置輸入文件路徑
在 bigdatabigdatabigdata 下新建一個 inputinputinput 文件夾,添加一個或者多個文件到 inputinputinput 中。注意 input 和 src 是同級目錄
鼠標右鍵點擊 bigdata,選擇 NewNewNew -> DirectoryDirectoryDirectory
在新彈窗的“NAME”中輸入名字“input”
這時候我們看到,input文件夾已經建立成功,我們在里面導入需要的輸入文件就可以了
修改level參數
在IDEA菜單欄中點擊 FileFileFile -> ProjectStructureProject StructureProjectStructure
在新窗口的左側 Project Setting 中選擇 Project ,查看moduls版本,這里可以看到我的版本是10
Project Setting 選擇 Modules,將 sources 選項卡下的 Language-level 改為對應版本,這里我們選擇10,點擊OK
添加Application配置
在IDEA的菜單欄中點擊 RunRunRun -> EditConfigurationsEdit ConfigurationsEditConfigurations
在新窗口中點擊左上方的加號,選擇 Application
配置步驟依次為:
運行
在input文件夾中先導入你需要用到的輸入文件。將文件復制一下,再進入 IDEA ,對著 input 文件夾點擊鼠標右鍵,點擊 Paste,彈窗點擊OK,就可以將文件粘貼進入 input 中。導入文件成功后,就可以開始運行程序了。
如果要刪除文件也很簡單,選中文件,右擊鼠標,選擇 Delete 刪除即可
運行程序有兩種常用方式,直接點擊右上角的綠色三角運行符號,或者在程序中右鍵空白處再點擊運行
點擊開始運行之后,IDEA 下方會顯示 Hadoop 的運行輸出。待程序運行完畢后,IDEA 的左側項目目錄會出現新的文件夾 output,里面存放的 part-r-00000 就是運行的結果了!
調試
調試的時候需要先加上斷點,我們在需要調試的代碼前單擊加上斷點,鼠標右擊空白處,選擇 Debug ‘WordCount’ 就可以開始調試,程序會在斷點處停下。
常見報錯
Error:java: 不支持發行版本 5
本地運行的是 JDK10,這個報錯的原因是項目編譯配置使用的 Java 版本不對
IDEA菜單欄中點擊 “File -> Project Structure”,查看“Project”和“Modules”中Java版本和本地Java版本是不是一致。如果不一致,改成本地使用的Java版本。
IDEA菜單欄中點擊 “File” -> “Setting”,選擇 “Bulid, Execution,Deployment” -> “Compiler” -> “Java Compiler”,把項目的 Target bytecode version 設置為本地版本,同時把
Project bytecode version 也改為本地版本。
這兩步修改完之后,這個錯誤就被解決了
系統找不到指定的文件
Exception in thread “main” java.io.IOException: Cannot run program “chmod”: CreateProcess error=2, 系統找不到指定的文件。
如果遇到這個錯誤,是因為 Windows 下需要安裝 x64 cygwin。
解決方法是,到 cygwin 官網下載 setup-x86_64.exe,安裝之后,把 bin 目錄配置到 Windows 的環境變量 path 中,重啟 IDEA 就可以了。
具體的 Cygwin 安裝過程請參考這篇博客 windows 安裝cygwin教程
Windows下的權限問題
Windows下的權限錯誤有兩種。第一種:
ERROR security.UserGroupInformation: PriviledgedActionException as …
第二種:
Exception in thread “main” java.io.IOException: Failed to set permissions of path: …
這都是因為當前用戶沒有權限來設置路徑權限(Linux就不會遇到這個問題)
解決方法有三種:
運行Hadoop,真心建議還是使用 Linux 或者 MacOS,Windows下錯誤太多了。
參考博客
參考博客 Hadoop: Intellij結合Maven本地運行和調試MapReduce程序 (無需搭載Hadoop和HDFS環境)
參考博客 Intellij idea 報錯:Error : java 不支持發行版本5
總結
以上是生活随笔為你收集整理的IDEA+Maven运行调试MapReduce程序的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Windows下使用IDEA+Maven
- 下一篇: Windows下配置单机Hadoop环境