W10下,基于myeclipse的hadoop开发环境的配置

起因:

在搭建过程中,出现Myeclipse和HDFS无法连接的问题,因为,网络上的博客都说单击finish按钮,关闭窗口,如果左侧的project explore DFS Locations下会展现hdfs集群中的文件表示连接成功。现实相当骨干残忍,我倒腾了好几遍,project explore下都没有出现DFS Locations。

这里写图片描述
有问题百度啊!百度后,发现网络上只要带myeclipse+hadoop插件关键词的文章,对我的问题都不适用。google了stackoverflow,也看得迷迷糊糊,说什么是因为全局代理balbalbla之类的问题。出不来DFS Locations就得尝试啊,我在centos里把百度和google到的解法都一一实现了一遍,然而,,,然而并没有什么进展。ps(哪位大神可以教教我怎么看apache的hadoop2.2.0的官方文档)

解决:
现实很浪漫跟我开了个玩笑,只需在myeclipse点击 ,windows->open perspective->other->map/reduce(蓝色大象图标)。DFS Locations就出现了,并且在其中出现了hdfs集群中的文件。激动~ ~原来我的各种配置都没有问题,调不出DFS Locations是因为对Myeclipse不熟悉。
这里写图片描述

啰嗦了一大堆,下面上干货,搭建基于Myeclipse的hadoop开发环境。

1.在windows下安装对应的java jdk。32位的安装32位的jdk,64位的安装64位的jdk。具体怎么安装java jdk,请移步百度,1.)搜索安装java jdk。这里需要注意2.)环境变量的设置,具体可以在安装完,jdk后百度java环境变量的设置。jdk安装和环境变量设置完成后,win+r 然后cmd回车,在控制台输入java -version。jdk如果ok,会出现下图结果。
这里写图片描述
2.安装myeclipse。点我下载Myeclipse
1).下载hadoop插件:hadoop-eclipse-plugin-2.2.0 (自行百度下载)。插件放在MyEclipse 10\dropins目录下

这里写图片描述

2).关闭,并重新启动Myeclipse。配置Hadoop installation directory。

这里写图片描述选择windows下的hadoop安装目录,即在w10上解压hadoop2.2.0的路径。(下载hadoop2.2.0点我
3).点击show view -> other… ,在mapreduce tools下选择Map/ReduceLocations这里写图片描述,在myeclipse右下侧,点击蓝色大象这里写图片描述。添加一个新的HadoopLocation,并配置。
这里写图片描述
locationname:随意写
Map/Reduce Master
host:sunchen2
port:50070
DFS Master
Use M/R Master host:(打勾,因为我们是单机模式)
User name:Administrator(因为我的w10默认的用户是 Administrator)
Port:9000
Ps:这里的Host和Port在Centos中搭建Hadoop环境时已经设置了。在core-site.xml和mapred-site.xml中查看。
然后,再点击Advanced parameters,(1).查找hadoop.tmp.dir,修改成在hadoop环境搭建时设置的地址,这个参数在core-site.xml中已经设置过了。(2).查找dfs.replication,myeclipse里面默认设置是3,而我们在配置时设置的是1,所以把3改成1。(3).点击finish。(4).windows->open perspective->other->map/reduce(蓝色大象图标)。DFS Locations就出现了,并且在其中出现了hdfs集群中的文件。
至此w10下hadoop开发环境搭建完成。

跑一下hadoop自带的wordcount案例,步骤自行百度。(环境搭好了,跑起来很容易的,copy wordcount源码,past就可以搞定的。)
这里注意下,输出文件路径,和输入路径文件,还有在src下添加一个log4j.properties日志文件,否则控制台会报错(点我下载)。如果重复运行wordcount,请先把输出文件删除,再运行,否则会报错,日志文件如下。
`// 输入文件路径
FileInputFormat.addInputPath(job, new Path(
“hdfs://sunchen2:9000/sunchen2/sunchen2.txt”));
// 输出文件路径
FileOutputFormat.setOutputPath(job, new Path(
“hdfs://sunchen2:9000/sunchen2/wordcount-out”));

2017-02-21 11:50:24,395 INFO [org.apache.hadoop.conf.Configuration.deprecation] - session.id is deprecated. Instead, use dfs.metrics.session-id
2017-02-21 11:50:24,398 INFO [org.apache.hadoop.metrics.jvm.JvmMetrics] - Initializing JVM Metrics with processName=JobTracker, sessionId=
2017-02-21 11:50:24,575 ERROR [org.apache.hadoop.security.UserGroupInformation] - PriviledgedActionException as:hadoop (auth:SIMPLE) cause:org.apache.hadoop.mapred.FileAlreadyExistsException: Output directory hdfs://sunchen2:9000/sunchen2/wordcount-out already exists
Exception in thread "main" org.apache.hadoop.mapred.FileAlreadyExistsException: Output directory hdfs://sunchen2:9000/sunchen2/wordcount-out already exists
    at org.apache.hadoop.mapreduce.lib.output.FileOutputFormat.checkOutputSpecs(FileOutputFormat.java:146)
    at org.apache.hadoop.mapreduce.JobSubmitter.checkSpecs(JobSubmitter.java:456)
    at org.apache.hadoop.mapreduce.JobSubmitter.submitJobInternal(JobSubmitter.java:342)
    at org.apache.hadoop.mapreduce.Job$10.run(Job.java:1268)
    at org.apache.hadoop.mapreduce.Job$10.run(Job.java:1265)
    at java.security.AccessController.doPrivileged(Native Method)
    at javax.security.auth.Subject.doAs(Subject.java:396)
    at org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1491)
    at org.apache.hadoop.mapreduce.Job.submit(Job.java:1265)
    at org.apache.hadoop.mapreduce.Job.waitForCompletion(Job.java:1286)
    at com.hadoop.test.WordCount.main(WordCount.java:72)

刚才编辑的都没了,,,web编辑器总是这么不靠谱吗?

懒癌,再爬上来,把跑wordcount的实例步骤写写,顺道思考人生。

1.打开Myeclipse,File -> New -> Other -> MapReduce project。
这里写图片描述
名字随便起,我这里写的name是1.
然后点finish
2.在1这个工程下,右键new -> class,创建一个WordCount类WordCount。
然后把如下的apache的wordcount源代码拷贝到我新建的这个WordCount类中。
ps。此处注意,输出输入路径,都要写你的hdfs里的路径,而不是copy我的。


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.input.NLineInputFormat;
import org.apache.hadoop.mapreduce.lib.output.FileOutputFormat;

/**
 * 第一个MapReduce程序
 * 
 * @author sunchen
 * 
 */
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();
        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);
        job.setInputFormatClass(NLineInputFormat.class);
        // 输入文件路径
        FileInputFormat.addInputPath(job, new Path(
                "hdfs://sunchen2:9000/sunchen2/sunchen3.txt"));
        // 输出文件路径
        FileOutputFormat.setOutputPath(job, new Path(
                "hdfs://sunchen2:9000/sunchen2/wordcount-out43"));
        System.exit(job.waitForCompletion(true) ? 0 : 1);
    }
}

3.run一下,发现报错了。好尴尬。
看了下console,原来是缺少一个叫log4j的东西。
解决办法:下载一个log4j放到src的根目录下。(点我下载log4j)
这里写图片描述

添加log4j后,把hdfs里的wordcount-out43这个输出文件删掉。再run一下。发现WordCount成功的跑起来了。
这里写图片描述

这里写图片描述

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值