zoukankan      html  css  js  c++  java
  • 在eclipse上跑hadoop的helloworld

    关于hadoop的用处什么我就不说了,在这里记录下在eclipse上第一次跑hadoop遇到的问题吧~

    hadoop的安装我就不说啦,网上教程一大堆~我直接用的公司的Linux上的hadoop。

    eclipse用的是mars,JDK1.8,win7,hadoop是公司的Linux上的hadoop 1.2.1,关联的JDK是1.7.

    首先下载hadoop关联eclipse的插件hadoop-eclipse-plugin-1.2.1。最好下载相同版本的,不然容易出问题(我就是典型)。把插件放到eclipse安装目录的plugins下(hadoop-eclipse-plugin-2.2.0放到dropins目录下是可以的,但是1.2.1是不行的),重启eclipse,在eclipse的页面上出现这个东东~

              

    接下来配置hadoop,点击图上的大象,在eclipse下面出现这个。点击右边蓝色小象,进入hadoop的配置页面。

         

    关于配置的详细信息在图上都标注出来了。Linux的命令这在这里就不说了,连Linux推荐用secureCRT。 

    点击finish,等待完成。完成后,在eclipse的左边,project explorer下面会出现DFS location。成功的话会把hadoop的文件加载出来,相当于hadoop fs -ls这个命令出现的结果。这里如果出现连接失败,检查一下是不是地址或端口写错了,可以在cmd中telnet端口看是不是可以连通,telnet 192.168.0.201 49000。如果出现提示“你的电脑一个软件阻止访问”,那么可能就是hadoop-eclipse的插件版本不对了~

                                                             

    都OK得那么就可以写helloworld了。

    package com.qldhlbs.hadoop.helloworld;
    
    
    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.LongWritable;
    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.input.TextInputFormat;
    import org.apache.hadoop.mapreduce.lib.output.FileOutputFormat;
    import org.apache.hadoop.mapreduce.lib.output.TextOutputFormat;
    
    public class WordCount {
    
    	public static class WordCountMap extends
    			Mapper<LongWritable, Text, Text, IntWritable> {
    
    		private final IntWritable one = new IntWritable(1);
    		private Text word = new Text();
    
    		public void map(LongWritable key, Text value, Context context)
    				throws IOException, InterruptedException {
    			String line = value.toString();
    			StringTokenizer token = new StringTokenizer(line);
    			while (token.hasMoreTokens()) {
    				word.set(token.nextToken());
    				context.write(word, one);
    			}
    		}
    	}
    
    	public static class WordCountReduce extends
    			Reducer<Text, IntWritable, Text, IntWritable> {
    
    		public void reduce(Text key, Iterable<IntWritable> values,
    				Context context) throws IOException, InterruptedException {
    			int sum = 0;
    			for (IntWritable val : values) {
    				sum += val.get();
    			}
    			context.write(key, new IntWritable(sum));
    		}
    	}
    
    	public static void main(String[] args) throws Exception {
    		Configuration conf = new Configuration();
    		Job job = new Job(conf);
    		job.setJarByClass(WordCount.class);
    		job.setJobName("wordcount");
    
    		job.setOutputKeyClass(Text.class);
    		job.setOutputValueClass(IntWritable.class);
    
    		job.setMapperClass(WordCountMap.class);
    		job.setReducerClass(WordCountReduce.class);
    
    		job.setInputFormatClass(TextInputFormat.class);
    		job.setOutputFormatClass(TextOutputFormat.class);
    
    		FileInputFormat.addInputPath(job, new Path(args[0]));
    		FileOutputFormat.setOutputPath(job, new Path(args[1]));
    
    		job.waitForCompletion(true);
    	}
    }
    

     主意要导入的包。其中hadoop包和Jackson包在下载的hadoop文件里面都有,几个commons包也要导入,不然会报错,其中commons-cli-1.3.1.jar是一个处理命令的工具。比如main方法输入的string[]需要解析。你可以预先定义好参数的规则,然后就可以调用CLI来解析。上面的代码不到这个包会报错。

                          

    接下来在hadoop中创建文件。命令hadoop fs -mkdir /user/qldhlbs/input创建文件夹。这些hadoop命令和Linux的差不多~后面的/user/qldhlbs/input是创建的文件夹目录。在eclipse上右键DFS location刷新或者重连,就会看到在user目录下出现qldhlbs/input目录。把要count的文件放到input中去,可以用简单的方法,就是右键创建的input,选择upload file to DFS。不出意外的话会提醒没有权限,那么就赋予权限。命令 hadoop fs -chmod 777 /user/qldhlbs/input。其中777是读写执行权限(因为它对应的二进制是4,2,1),/user/qldhlbs/input是给予权限的目录。在eclipse刷新一下就可以上传文件了~上传成功后再input目录下可以看到你上传的文件。

    接下来右键run configurations,配置参数。hdfs://192.168.0.201:49000/user/qldhlbs/input   hdfs://192.168.0.201:49000/user/qldhlbs/output,它会自动帮你建output目录,如果自己创建会报错,文件已存在。点击apply,run。参数地址不要写错了,原来我写错了找了半天错误没找到~zzZ。这里会提示qldhlbs这个目录没有权限,和前面一样赋予全县就行了。如果用1.2.1这个版本不出意外的话还会提示一个tmp/hadoop-Administrator/xxxx没有权限的错误,改一下hadoop-core-1.2.1.jar文件的源码就行了,反编译一下这个jar,在fs包下的fileUtil类中的checkReturnValue方法,把里面的内容注释掉就行了。

              

    把改了的文件重新打包成jar放到工程中,跑一下就可以了。运行成功会在output下面出现两个文件。

    到这儿hadoop的helloworld就完成了~当初做的时候没仔细看,出了一些不该出的小错误,浪费很多时间~

  • 相关阅读:
    迅为i.MX8M开发板Linux安卓9.0系统,四核CortexA53,单核CortexM4
    迅为龙芯2K1000开发板虚拟机ubuntu安装SSH服务
    迅为i.MX8MM开发板虚拟机Vmware的安装
    迅为龙芯2K1000开发板虚拟机ubuntu安装vscode
    归并排序XCoderLiu
    关于API中窗口子类化及超类化整理
    STL中最流行类模板vector
    andbook
    Navigation Failed: Cannot Find Application\HTML\1033\default.htm 错误解决办法
    html 播放音乐
  • 原文地址:https://www.cnblogs.com/qldhlbs/p/5127641.html
Copyright © 2011-2022 走看看