首先下载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
sudo yum install autoconf automake libtool ant
下载地址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安装成功。
需要将${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.repo的url:
在hadoop/src/hadoop-mapreduce1-project/ivy/ivysettings.xml文件中添加:
override="false"/>
注意,编译出来的hadoop-eclipse-plugin-2.0.0-mr1-cdh4.4.0.jar插入到eclipse里,虽然能显示DFSLocaltion,和Mapreduce.但是右击“NewHadoop Location”却没有反应。
这个是由于缺少jar包造成的。CDH4.2及以前的版本,只需要添加如下包即可:
<!--
而CDH4.3,CDH4.4则需要下面的包。
这个比较坑爹。浪费了很长时间。
将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 Location和Delete.鼠标左键单击NewHadoop Location 选项来添加新的Location.进入配置Location的界面
Location name:取个有意义的名字,没有限制
Map/Reduce Master:JobTracker的IP和端口,根据mapred-site.xml中配置的mapred.job.tracker来填写
DFS Master:Name Node的IP和端口,根据core-site.xml中配置的fs.default.name来填写
本文的CDH4.4是CDH HA配置,HDFS和Jobtracker都做了HA,所以配置参数跟非HA稍微有不同,但是依然是一台机器在工作,所以只要查询相应的端口号即可。
我的hadoop完全分布式cluster结构配置如上图所示,其中DFS端口号为8020,MapReduce端口号8021。点击Finish就OK了。
成功连接后,出现下图:
依照此例还可创建别的自己需要的Location,如pseudo。此时在Porject Explorer的DFS Locations下会出现刚刚配置好的Location,开启相应的hadoop集群进程就可以点击查看目录结构了,而且点击右键,可以进行新建文件夹、删除文件夹、上传文件、下载文件、删除文件等操作。
注意:每一次操作完在eclipse中不能马上显示变化,必须要点击鼠标右键并refresh一下才可以看到最新的数据。
3.新建wordcount例程
Window-> Preferences选择“Hadoop Map/Reduce”,点击“Browse...”选择Hadoop文件夹的路径(如:/usr/hadoop/)。这个步骤与运行环境无关,只是在新建工程的时候能将hadoop根目录和lib目录下的所有jar包自动导入。
注:本人使用的是CDH4.4源码,包含了MR1和MR2,所以解压后的根目录并不是MR1的jar文件目录。CDH4.4内的MR1jar文件目录为${HADOOP_HOME}/share/hadoop/mapreduce1目录
File ->New -> Project选择,然后输入项目名称WordCount,创建项目。插件会自动把hadoop根目录和lib目录下的所有jar包导入。
鼠标右击项目-->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
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
private IntWritable result = newIntWritable();
public void reduce(Text key,Iterable
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例程
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中不存在,否则运行时会报错,删除它就可以了。
参数配置完后,点击Run即可运行WordCount例程。不知为什么运行速度如此之快,在Console窗口出会输出警告信息,错误信息,详细的运行过程和结果等.....