Windows 下配置 Eclipse 连接 Hadoop 开发环境

来源:互联网 发布:淘宝无限刷软件 编辑:程序博客网 时间:2024/05/22 01:56

原文地址:http://www.cnblogs.com/shitouer/archive/2012/05/29/2522860.html

个人小站,正在持续整理中,欢迎访问:http://shitouer.cn

小站博文地址:Windows 下配置 Eclipse 连接  Hadoop 开发环境,欢迎原站访问~

 学习更多,请访问系列文章:

1. VMware Redhat网络配置

2. Hadoop 三台主机 集群搭建 详解

3. Windows 下配置 Eclipse 连接 Hadoop 开发环境

 

学习本篇之前,首先需要搭建Hadoop集群环境,具体请参见:Hadoop 三台主机 集群搭建 详解

在上一篇Hadoop 三台主机 集群搭建 详解,已经搭建起Hadoop集群,但是要开发调试MapReduce程序,还是在Windows下比较方便和舒服。成功配置这个环境,花费了我好几个晚上,先记录如下,方便后来学习的人:

环境及配置:

Eclipse选择

非常重要,至少我是在这花费了很多时间,几乎试遍了所有的eclipse版本,都不成功,最后选择了SpringSource Tool,真的很好用,下载地址:http://www.springsource.org/downloads/sts

Cygwin

hadoop是基于Linux平台的,如其启动,关闭 配置需要在Linux命令行中执行,cygwin是用来模拟Linux下的命令行工具。安装地址:http://cygwin.com/install.html

Hadoop Eclipse插件

不建议使用Hadoop自带的,不好用,如果使用SpringSource Tool的话,请使用hadoop-eclipse-plugin-0.20.3-SNAPSHOT,下载地址:https://issues.apache.org/jira/browse/MAPREDUCE-1280

预先配置

1. 安装Cygwin,这个只要一路确定就行了,不过中间千万别停顿。

2. 配置Windows Hosts文件,为了DNS解析寻址用

方法:进入C:\Windows\System32\drivers\etc,找到hosts文件,编辑添加hadoop集群配置的hosts文件相关信息如下:

192.168.40.5    master

192.168.40.6    slave1#非必须#

192.168.40.7    slave2#非必须#

安装配置:

① 解压下载的SpringSource Tool到D:\\STS,将hadoop-eclipse-plugin-0.20.3-SNAPSHOT放到:D:\STS\sts-2.9.1.RELEASE\plugins

② 点击STS.exe,启动SpringSource Tool(一下简称Eclipse),如果在Project Explorer中出现DFS Locations图标,则说明安装正确,如图:

③ 之后,点击Windows-->Preferrence-->hadoop map/reduce, Brower 选择下载的hadoop-0.20.2所在的路径:

④ 配置相关参数,点击 Windows-->Show View -->Other --> Map/Reduce Location,打开Hadoop的MapReduce View

点击Ok之后,出现如下图

⑤ 上一步你不应该看到hadoopLoc, 应该什么都没有,右键点击空白处-->New Hadoop Location, 你会看到一个填写MapReduce Location参数的一个界面:

其中:

Location Name:

这个不用在意,就是对这个MapReduce的标示,只要能帮你记忆即可

Map/Reduce Master 部分相关定义:

Host:上一节搭建的集群中JobTracker所在的机器的IP地址

port:JobTracker的端口

两个参数就是 mapred-site.xml中mapred.job.tracker的ip和端口

DFS Master部分:

Host:就是上一节集群搭建中Namenode所在机器IP

Port:就是namenode的端口

这两个参数是在 core-site.xml里fs.default.name里面的ip和端口

User Name:

就是搭建Hadoop集群是所用的用户名,我这里用的是root

⑥ 填写完以上信息以后,关闭Eclipse,然后重新启动。

为什么这么做呢?因为如果不重新启动,Advanced Parameters里,有些重要的选项不能显示,重启后,来配制Advanced Parameters信息:

可看到大部分选项都已经预设值好了,其中有一下几个选项,必须注意填写,其他的选项,要么默认,要么会根据我们填写的以下几个选项自动修改:

dfs.replication:

这个这里默认是3,但是要根据你的Datanode的个数来定,如果你仅有2个datanode,那么就写2,如果只有一个,就写1,大于或者等于3个,写3

hadoop.tmp.dir:

这个要跟上节建立的Hadoop集群配置中core-site.xml 中的hadoop.tmp.dir设置一样,上节填写的是/tmp/hadoop-root,这里也如是填写

hadoop.job.ugi:

填成root,Tardis,其中root是我们的用户名,后边的",Tardis"一定要这么写,不能改

这些都填写完了之后,点击保存,重新启动Eclipse,会发现,很多Advanced Parameters里的好多选项都根据hadoop.tmp.dir重新进行了设置。

(2012.10.26修改:现在又用hadoop1.0.3,此选项没有了)

⑦ 重新启动后,在Project Explorer中,会有如下显示:

 注意,第一次初始化打开,并不会有user, input, output 这些文件夹,之后红圈圈出的部分,也没有job_local_0001(1).如果是这样显示说明你已经连接成功,否则,展开所有tmp文件夹,会发现最后有错误信息提示。

2012.10.26修改:

hadoop1.0.3此时还会出错,是plugin中jar包不够,可做如下修改:

1.打开Eclipse Plugins中的hadoop-eclipse-plugin-1.0.0.jar,发现只有发现只有commons-cli-1.2.jar和hadoop-core.jar两个包,将%HADOOP_HOME%/lib下的 commons-configuration-1.6.jar , commons-httpclient-3.0.1.jar , commons-lang-2.4.jar , jackson-core-asl-1.8.8.jar 和 jackson-mapper-asl-1.0.8.jar五个jar包打入hadoop-eclipse-plugin-1.0.0.jar中。

2.修改hadoop-eclipse-plugin-1.0.0.jar中META-INF目录下的MANIFEST.MF,将classpath修改为以下内容:Bundle-ClassPath: classes/,lib/hadoop-core.jar,lib/commons-cli-1.2.jar,lib/commons-httpclient-3.0.1.jar,lib/jackson-core-asl-1.0.1.jar,lib/jackson-mapper-asl-1.0.1.jar,lib/commons-configuration-1.6.jar,lib/commons-lang-2.4.jar

3.重启Eclipse即可。

⑧ 在Eclipse中编写调试第一个Hadoop的HelloWorld程序:wordcount

建立Map/Reduce 工程

定义WordCount.Java类

这里,我下载了Hadoop源码,直接拷贝了其WordCount.java文件,代码如下:

复制代码
package org.apache.hadoop.examples;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 {            String line = value.toString();            StringTokenizer itr = new StringTokenizer(line);            while (itr.hasMoreTokens()) {                word.set(itr.nextToken().toLowerCase());                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, new IntWritable(sum));        }    }    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);    }}
复制代码

为了使程序成功运行,我们需要做一下工作

设置输入:

在命令行中,像hadoop中添加一个文本文件:

hadoop fs -mkdir /input  #在HDFS用户根目录下建立input文件夹

hadoop fs -put test.txt /input/ #向input文件夹里放入所在路径的test.txt文件

该步骤也可以在Eclipse中建立,首先右键点击Project Explorer中大象图标下第一个没有名字的文件夹,点击 Create New Directory,创建input文件夹,后再右键该文件夹,上传test.txt文件。此时到hadoop DFS中查看,也会发现创建成功。

Eclipse中设置输入参数

设置WordCount.java的执行参数如图

在Eclipse中执行

如图,点击 Run on Hadoop

在控制台,会有以下输出

OK,至此,Congratulations,你已经建立起自己在Windows中Eclipse下进行Hadoop MapReduce开发的基本环境设置工作,并且输出了一个属于自己的HelloWorld程序,并且稍微了解了一些hadoop日志分析的信息,你已经开始进入Hadoop的世界,剩下的,就是要不断地深入学习了。

接下来,本来打算将Hive,HBase,Fuse等Hadoop工程相关的配置过程都详细的记录,但是现在都还用不到,所以就打算先搁下,开始读Hadoop源码,本身以前也没有读源码的经验(以前做Salesforce CRM云计算,是不开源的),也会将一步一步学习的过程记录并分享。从Configuration类读起,依旧立此存照,必须说到做到。

转载注明出处,博客园 石头儿 尤其说给 Linux 公社 听,没见过你们这么无耻的人!转载之后,不仅原转载文章被变成你们的,连引用的自己的文章,也都一并给你们摘抄过去变成你们的了。

原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 上体育课时脚不慎扭伤怎么办 孩子受伤没有参加考试怎么办 如果我想离婚对方不愿意怎么办 金龙自切尾怎么办 微信无法正常打开怎么办 大三下体育挂了怎么办 大二体育挂科了怎么办 大四体育老师不给成绩怎么办 大四必修挂科了怎么办 大学挂了20科怎么办 大专重修都没过怎么办 如果孩子一年级就考不及格怎么办 后滚翻做不过去怎么办 练习颠球时脚面总网上翘怎么办 踢完足球腿疼怎么办 针对初中不听话的学生怎么办 初中一年级成绩太差怎么办 新牙长出来乳牙没掉怎么办 小孩乳牙没掉就长出新牙怎么办 复读一年还考大专怎么办 宝贝刚上幼儿园哭怎么办 新入幼儿园宝贝老是哭怎么办 孩子不太会说话幼儿园不要怎么办 幼儿上台表演害羞胆怯怎么办 小学转学学校不接收怎么办 在校读书的留守儿童怎么办 足球比赛中裁判碰到球怎么办 花盆的土变硬板结怎么办 lol皮肤不想要了怎么办 泉州小黄人自行车被偷怎么办 小学数学没学好上初中怎么办 50天的宝宝缺钙怎么办 5个月的宝宝缺钙怎么办 空调接电后指示灯不亮怎么办 欧普led灯坏了怎么办 led灯条芯片坏了怎么办 太阳能板只有电压没有电流怎么办 农村按空调房屋不保温怎么办 自己一个人想去足疗店不敢去怎么办 吊灯led灯坏了怎么办 办健身卡老板携款跑路了怎么办