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