win10 hadoop eclipse环境配置

windows10上的环境配置是最不可思议的,稀里糊涂得照着教程来,也不知是什么原理,加之网上教程一堆,配置多种多样,每次配置环境都是一步步试出来的,不容易啊

1、下载eclipse:网上教程说下载“Eclipse IDE for Java EE Developers ”的版本,恰好,之前电脑上已经安装了这一版本,少了折腾这一步。现在发现,eclipse可以用来编写java,web项目,还能写些hadoop的工程,也是强大。


2、安装hadoop:根据配置的hadoop版本选择相应的压缩包下载后解压到电脑中就行啦。

3、安装hadoop-eclipse-plunge插件:根据版本选择,我配置的hadoop是2.6.0版本。不知道这玩意去哪个官网上下载,刚好在网上搜到资源。将这一插件解压后放在eclipse的plugins目录下。此时重启eclipse后,点击“Window”--> “Preferences”,来到“Data Management”处,便可以看到“Hadoop Map/Reduce”的选项出现了。双击该项,点击“Browse”,选择步骤2的hadoop的安装目录。


4、成功的话是有以下两个新的东西出现的。左边一开始是没有DFS的选项的,后来忘了怎么捣鼓的,就把这个选项调出来的。


5、配置hadoop集群文件:网上教程一大堆呀。主要是在“Map/Reduce Locations”处右键,选择“New Hadoop Location”,然后填写以下信息。具体可以参考hadoop中core-site.xml,hdfs-site.xml文件。


6、本着一切从简的原则,我取了网上大多的配置教程的交集来配置,到这一步就打算直接上例子跑跑了。首先是新建一个工程,这里也没什么讲究的。下面一个放可以跑的WordCount的例子。

package org.hadoop.demo;
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);  
  
        }  
  
    }  
  
    @SuppressWarnings("deprecation")  
    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);  
  
        }  
  
        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);  
  
    }  
}  

注意,建立工程的过程如下:

“New”-->"Other"-->"Map/Reduce Projetct"


在“src”文件夹处右键,“New”-->"Package",然后在该包下,添加WordCount.java文件,代码中第一行即为“Package”的名字。

7、初次跑动,出现以下提示,郁闷,不知道为什么一直会出现以下界面。


刚开始随便选了一个,发现程序没反应,后来网上搜了以下,在工程处右键来到“Run Configurations”选项,进入以下界面,新建一个“Java Application”,名字即为类的名字“WordCount”,注意,要加入输出参数,即输入和输出文件夹。


这样一来,出现“Java select application”时,可以选择“WordCount”。

8、有输出总是好事,虽然说还是没有成功跑起来,提示如下,有很多的,但是没保存下来,截取了一部分如下:

    log4j:WARN No appenders could be found for logger

其中,能看懂的一句是NullPointException,错位提示还定位到了最后一句码上。
    System.exit(job.waitForCompletion(true) ? 0 : 1);  

直接百度错误,得知在src目录下右键“New--others--file”新建log4.j.txt文件,添加一下内容,直接完事

log4j.rootLogger=INFO, stdout
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d %p [%c] - %m%n
log4j.appender.logfile=org.apache.log4j.FileAppender
log4j.appender.logfile.File=target/spring.log
log4j.appender.logfile.layout=org.apache.log4j.PatternLayout
log4j.appender.logfile.layout.ConversionPattern=%d %p [%c] - %m%n
此时工程结构如下:

 
 

8.再一次跑,少了WARN提示,但提示winutils.exe不能执行,添加hadoop.dll和winutils.exe文件,期间还去添加了HADOOP_HOME和PATH环境变量,其中HADOOP_HOME为hadoop安装目录下bin文件夹的路径,PATH就加上HADOOP_HOME环境变量。

9、跑一次,还是同样的错误,以为还是不行,直接重启eclipse,后再跑一次,居然可以了,程序提示正常。但刷新之后,没有新建的文件夹出现。再跑一次,提示文件夹已经存在,刷新一次,果然。

至此,O了。一些需要的文件后期会放在GitHub上,分享至上。

GitHub地址:https://github.com/LinKachuan/Share


猜你喜欢

转载自blog.csdn.net/Kachuan/article/details/80217528