CDH4.4 MR1编译eclipse插件

本文写的比较乱。都是编译时,临时写上去的,没时间整理。博客里上传图片费事。如果有问题,可以联系我,我可以发个word文档,里面有截图。


1、安装Maven

首先下载Maven软件包,下载地址为:http://apache.fayea.com/apache-mirror/maven/maven-3/3.1.1/binaries/apache-maven-3.1.1-bin.tar.gz

下载后解压,设置MAVEN_HOME和PATH变量。设置好后,可以使用mvn -version检查是否安装成功。

解压命令

#

tar -zvxf apache-maven-3.1.1-bin.tar.gz

移至/usr/local

#mvapache-maven-3.1.1 /usr/local/maven

maven装在/usr/local目录下。

#vi /etc/profile

在最后一行加入:

export MAVEN_HOME=/usr/local/ maven

export PATH=$PATH:$MAVEN_HOME/bin

保存后退出,执行:

source /etc/profile

查看是否安装成功。

#mvn –version

 

2、安装autotool和ant

sudo yum install autoconf automake libtool ant

 

3、安装protobuf.

下载地址http://protobuf.googlecode.com/files/protobuf-2.4.1.tar.bz2

解压: tar jxvf protobuf-2.4.1.tar.bz2

次执行:./configure,   make,   sudo make install,这三个命令安装ProtoBuffer

使用protoc --version检查ProtoBuffer是否安装成功

如果出现:

protoc: error while loading sharedlibraries: libprotobuf.so.7: cannot open shared object file: No such file ordirectory错误

 

这是因为系统找不到lib库

编辑/etc/ld.so.conf 文件

#Vim /etc/ld.so.conf

修改如下: include /etc/ld.so.conf.d/*.conf /usr/local/lib

然后ldconfig

再次执行protoc –version

libprotoc 2.4.1

 

标明protobuf安装成功。


4、然后编译eclipse-plugin插件

需要将${HADOOP_HOME}/share/hadoop/mapreduce1下面的所有jar包拷贝到

${HADOOP_HOME}/src/hadoop-mapreduce1-project 目录下面

${HADOOP_HOME}/share/hadoop/mapreduce1/lib下面的所有内容拷贝到

${HADOOP_HOME}/src/hadoop-mapreduce1-project /lib目录下面

然后在${HADOOP_HOME}/src/hadoop-mapreduce1-project/src/contrib/eclipse-plugin目录下面执行ant命令


执行该命令前需要配置:然后在${HADOOP_HOME}/src/hadoop-mapreduce1-project/src/contrib/eclipse-plugin 目录下的build.xml文件。这个网上有很多。根据你的hadoop目录和eclipse目录修改相应的属性,以及添加相应的jar包等。

编译成功后会在

${HADOOP_HOME}/src/hadoop-mapreduce1-project/build/contrib/eclipse-plugin/目录下生成

hadoop-eclipse-plugin-2.0.0-mr1-cdh4.4.0.jar文件。这个就是对应的eclipse包。

 

如果编译时出现卡顿,可以ant clean 然后再重新编译.遇到hadoop2.0.0.配置文件中的问题:

build.xml 30:The following error occurred while executing this line;

build-contrib.xml:140 impossible to resolve dependencies;

resolve failed - see output for details


  

解决办法: 

  需要定义reactor.repourl

 hadoop/src/hadoop-mapreduce1-project/ivy/ivysettings.xml文件中添加:

 <propertyname="reactor.repo"
           value="http://repo1.maven.org/maven2/"
  override="false"/>

 

注意,编译出来的hadoop-eclipse-plugin-2.0.0-mr1-cdh4.4.0.jar插入到eclipse里,虽然能显示DFSLocaltion,Mapreduce.但是右击“NewHadoop Location”却没有反应。

这个是由于缺少jar包造成的。CDH4.2及以前的版本,只需要添加如下包即可:

<copyfile="${hadoop.root}/hadoop-core-${version}.jar"tofile="${build.dir}/lib/hadoop-core.jar"verbose="true"/>

   <copyfile="${hadoop.root}/lib/commons-cli-${commons-cli.version}.jar"  todir="${build.dir}/lib"verbose="true"/>

   <copyfile="${hadoop.root}/lib/commons-configuration-1.6.jar"  todir="${build.dir}/lib"verbose="true"/>

   <copy file="${hadoop.root}/lib/commons-httpclient-3.1.jar"  todir ="${build.dir}/lib"verbose="true"/>

   <copy file="${hadoop.root}/lib/commons-lang-2.5.jar"  todir ="${build.dir}/lib"verbose="true"/>

   <copyfile="${hadoop.root}/lib/jackson-core-asl-1.8.8.jar"  todir ="${build.dir}/lib"verbose="true"/>

   <copyfile="${hadoop.root}/lib/jackson-mapper-asl-1.8.8.jar"  todir ="${build.dir}/lib"verbose="true"/>

    <!--

  <copyfile="${hadoop.root}/lib/hadoop-common-2.0.0-cdh4.2.0.jar"  todir="${build.dir}/lib"verbose="true"/>

    <copyfile="${hadoop.root}/lib/hadoop-auth-2.0.0-cdh4.2.0.jar"  todir="${build.dir}/lib"verbose="true"/>

<copyfile="${hadoop.root}/lib/hadoop-hdfs-2.0.0-cdh4.2.0.jar"  todir="${build.dir}/lib"verbose="true"/>

 

CDH4.3CDH4.4则需要下面的包。

<copyfile="${hadoop.root}/hadoop-core-${version}.jar"tofile="${build.dir}/lib/hadoop-core.jar"verbose="true"/>

    <copyfile="${hadoop.root}/lib/commons-cli-${commons-cli.version}.jar"  todir="${build.dir}/lib"verbose="true"/>

    <copyfile="${hadoop.root}/lib/commons-configuration-1.6.jar"  todir="${build.dir}/lib"verbose="true"/>

    <copyfile="${hadoop.root}/lib/commons-httpclient-3.1.jar"  todir="${build.dir}/lib"verbose="true"/>

    <copyfile="${hadoop.root}/lib/commons-lang-2.5.jar"  todir="${build.dir}/lib" verbose="true"/>

    <copyfile="${hadoop.root}/lib/jackson-core-asl-1.8.8.jar"  todir="${build.dir}/lib"verbose="true"/>

    <copyfile="${hadoop.root}/lib/jackson-mapper-asl-1.8.8.jar"  todir="${build.dir}/lib"verbose="true"/>

    <copy file="${hadoop.root}/lib/hadoop-common-2.0.0-cdh4.4.0.jar"  todir="${build.dir}/lib"verbose="true"/>

    <copyfile="${hadoop.root}/lib/hadoop-auth-2.0.0-cdh4.4.0.jar"  todir="${build.dir}/lib"verbose="true"/>

    <copyfile="${hadoop.root}/lib/hadoop-hdfs-2.0.0-cdh4.4.0.jar"  todir="${build.dir}/lib"verbose="true"/>

    <copyfile="${hadoop.root}/lib/slf4j-log4j12-1.6.1.jar"  todir="${build.dir}/lib"verbose="true"/>

    <copyfile="${hadoop.root}/lib/slf4j-api-1.6.1.jar"  todir="${build.dir}/lib"verbose="true"/>

    <copyfile="${hadoop.root}/lib/log4j-1.2.17.jar"  todir="${build.dir}/lib"verbose="true"/>

    <copyfile="${hadoop.root}/lib/protobuf-java-2.4.0a.jar"  todir="${build.dir}/lib"verbose="true"/>

    <copyfile="${hadoop.root}/lib/hadoop-annotations-2.0.0-cdh4.4.0.jar"  todir="${build.dir}/lib"verbose="true"/>

    <copyfile="${hadoop.root}/hadoop-tools-2.0.0-mr1-cdh4.4.0.jar"  todir="${build.dir}/lib"verbose="true"/>

    <copy file="${hadoop.root}/lib/guava-11.0.2.jar"  todir="${build.dir}/lib"verbose="true"/>

 

这个比较坑爹。浪费了很长时间。

 

 

hadoop-eclipse-plugin-2.0.0-mr1-cdh4.4.0.jar拷贝到eclipse/plugin目录下,重启eclipse。则会出现如下界面:

会发现,上图中左侧"ProjectExplorer"下面发现"DFS Locations",说明Eclipse已经识别刚才放入的HadoopEclipse插件了。

 

选择"Window"菜单下的"Preference",然后弹出一个窗体,在窗体的左侧,有一列选项,里面会多出"Hadoop Map/Reduce"选项

然后打开MapReduce视图Window -> Open Perspective-> Other选择Map/Reduce,图标是个蓝色的象

 

 

 

在console窗口那块会多一个黄色的大象Map/ReduceLocation的图标,选中它在其下面空白处右击鼠标,会出现三个选择项NewHadoop Location , Edit Hadoop LocationDelete.鼠标左键单击NewHadoop Location 选项来添加新的Location.进入配置Location的界面

Location name:取个有意义的名字,没有限制
Map/Reduce Master:JobTrackerIP和端口,根据mapred-site.xml中配置的mapred.job.tracker来填写
DFS Master:Name NodeIP和端口,根据core-site.xml中配置的fs.default.name来填写

本文的CDH4.4CDH HA配置,HDFSJobtracker都做了HA,所以配置参数跟非HA稍微有不同,但是依然是一台机器在工作,所以只要查询相应的端口号即可。
我的hadoop完全分布式cluster结构配置如上图所示,其中DFS端口号为8020,MapReduce端口号8021。点击FinishOK了。

 

成功连接后,出现下图:

 

 

依照此例还可创建别的自己需要的Locationpseudo。此时在Porject ExplorerDFS Locations下会出现刚刚配置好的Location开启相应的hadoop集群进程就可以点击查看目录结构了,而且点击右键,可以进行新建文件夹、删除文件夹、上传文件、下载文件、删除文件等操作。

注意:每一次操作完在eclipse中不能马上显示变化,必须要点击鼠标右键并refresh一下才可以看到最新的数据。

 

 

3.新建wordcount例程

1)配置Hadoop路径

Window-> Preferences选择“Hadoop Map/Reduce”,点击“Browse...”选择Hadoop文件夹的路径(如:/usr/hadoop/)。这个步骤与运行环境无关,只是在新建工程的时候能将hadoop根目录和lib目录下的所有jar包自动导入。

注:本人使用的是CDH4.4源码,包含了MR1MR2,所以解压后的根目录并不是MR1jar文件目录。CDH4.4内的MR1jar文件目录为${HADOOP_HOME}/share/hadoop/mapreduce1目录

2)创建工程

File ->New -> Project选择,然后输入项目名称WordCount,创建项目。插件会自动把hadoop根目录和lib目录下的所有jar包导入。

3)添加WordCount类和它的实现代码

鼠标右击项目-->New-->class创建一个类,名为WordCount,并在类中添加代码如下:


 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.output.FileOutputFormat;
 
 public class WordCount {
     
publicstatic class TokenizerMapper extends Mapper<LongWritable, Text, Text,IntWritable>{
 
         private final static IntWritable one =new IntWritable(1);
         private Text word = new Text();
 
         public void map(LongWritable key, Textvalue, Context context)
                 throws IOException,InterruptedException {
             StringTokenizer itr = newStringTokenizer(value.toString());
             while (itr.hasMoreTokens()) {
                 word.set(itr.nextToken());
                 context.write(word, one);
             }
         }
     }
 
     publicstatic class IntSumReducer extends Reducer<Text, IntWritable, Text,IntWritable> {
         private IntWritable result = newIntWritable();
 
         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);
         }
     }
 
     publicstatic void main(String[] args) throws Exception {
         Configuration conf = newConfiguration();
         if (args.length != 2) {
             System.err.println("Usage:wordcount  ");
             System.exit(2);
         }
 
         Job job = new Job(conf, "wordcount");
         job.setJarByClass(WordCount.class);
         job.setMapperClass(TokenizerMapper.class);
         job.setReducerClass(IntSumReducer.class);
         job.setMapOutputKeyClass(Text.class);
         job.setMapOutputValueClass(IntWritable.class);
         job.setOutputKeyClass(Text.class);
         job.setOutputValueClass(IntWritable.class);
 
         FileInputFormat.addInputPath(job, newPath(args[0]));
         FileOutputFormat.setOutputPath(job,new Path(args[1]));
 
         System.exit(job.waitForCompletion(true)? 0 : 1);
     }
 }

 

4.运行wordcount例程

1)例程运行参数

Run-->RunConfigurations打开配置窗口,左侧栏中选择JavaApplication-->WordCount,中间栏中选择Arguments,填写WordCount的运行参数,输入文件/夹路径和输出文件/夹路径,如:hdfs://192.168.200.21:8020/user/root/input    hdfs://192.168.200.21:8020/user/root/output

VMarguments:

-Djava.library.path=/home/hadoop/src/hadoop-mapreduce1-project/lib/native/

 这个是加载hadooplib

注意参数的路径写法,并且保证输出目录在Location中不存在,否则运行时会报错,删除它就可以了。

2run

参数配置完后,点击Run即可运行WordCount例程。不知为什么运行速度如此之快,在Console窗口出会输出警告信息,错误信息,详细的运行过程和结果等.....

 


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值