在eclipse中用gradle搭建MapReduce项目
我用的系统是ubuntu14.04
新建一个Java Project。
这里用的是gradle打包,gradle默认找src/main/java下的类编译。src目录已经有了,手动在src下创建main/java(也可以配置gradle去找其他路径的下的文件)。
在项目跟录下创建build.gradle文件。
apply plugin: 'java'
apply plugin: 'eclipse' jar {
baseName = 'hadoop'
version = '0.0.1'
} sourceCompatibility = 1.8
targetCompatibility = 1.8 dependencies {
compile fileTree(dir: 'lib', include: ['*.jar'])
}
根目录下创建一个lib文件夹,将hadoop安装目录下share/hadoop下的 common, common/lib, mapreduce, yarn, yarn/lib目录下的jar包拷进项目的lib文件夹里。选中所有的jar包,右键Build Path-->add to build path。
项目基础环境搭好,把源码包中的WordCount测试类中的代码拷进项目里。
package fzk; 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 MR {
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();
String[] otherArgs = new GenericOptionsParser(conf, args).getRemainingArgs(); if (otherArgs.length < 2) {
System.err.println("Usage: wordcount <in> [<in>...] <out>");
System.exit(2);
}
Job job = Job.getInstance(conf, "word count");
job.setJarByClass(MR.class);
job.setMapperClass(TokenizerMapper.class);
job.setCombinerClass(IntSumReducer.class);
job.setReducerClass(IntSumReducer.class);
job.setOutputKeyClass(Text.class);
job.setOutputValueClass(IntWritable.class); for (int i = 0; i < otherArgs.length - 1; ++i) {
FileInputFormat.addInputPath(job, new Path(otherArgs[i]));
}
FileOutputFormat.setOutputPath(job, new Path(otherArgs[otherArgs.length - 1]));
System.exit(job.waitForCompletion(true) ? 0 : 1);
}
}
一切准备就绪后,想利用hadoop运行mapreduce项目,需要自己手动打包。利用gradle打包,打开一个终端,在build.gradle的目录下,执行
$ gradle build
等命令执行结束后,会发现项目中多出了一个build文件夹,我们打出来的jar包在build/lib目录下。确保jar下确实包含了我们自己编写的类可以用解压软件进入jar看一下(不用解压,只是查看一下)。里面有src目录下的文件就说明已经打包成功了。
我们在build.gradle中配置的打出来的jar包的名字叫hadoop-0.0.1.jar。随自己起什么名都可以。
接下来测试一下,测试需要的是一个已经存在的文件作文输入,名字随便(这里是input),为了方便把input放在和打出来的jar包放在一个目录下,在测试时还需要一个输出的目录(这里是output),指定的目录下不可以存在这个目录。进入到jar包的目录下执行下面命令测试程序
$ hadoop jar hadoop-0.0.1.jar fzk.MR input output
fzk.MR前面的是包名,在代码中已经把包名粘出来了,说明我就是在fzk包下创建的MR类。这个地方指定类的时候前面需要加上包名。input就是手动创建的一个测试文件,output在这个目录下不可以存在,程序运行后会创建出一个output文件夹,结果就在里边。
为了方便我们可以创建一个run.sh这样每次运行的时候就不用输入那么多的命令:
rm -fr output
hadoop jar build/libs/hadoop-0.0..jar fzk.MR input output
每次执行前先把output文件夹删掉,这行这条命令的目录是在项目根目录下,input应该放在根目录下,也会在根目录生成output结果。
到这里,我们就是完整的运行完一个WordCount程序了。但是这样太麻烦,我们已经用eclipse了为什么还需要打包才能运行。我们确实是不需要每次都去打包才可以测试的。如果向直接在eclipse里运行,jar必须确保把需要的全部导入了,如果程序运行时报什么ClassDefNotFound之类的错误就是哪个jar没有导,自己找找导进去就行了。下面看看怎么直接在eclipse运行程序。
这里只需要把main方法修改一下即可,我们这里需要args中的参数,但是ctrl + f11 运行的时候肯定是传不进去参数的,这里你可以在配置run configuration中添加启动参数,至少两个,从第一个到倒数第一个是input,最后一个是output。也可以偷懒一下我们只是测试,只需要在用到args的时候赋值就可以了,在main方法的第一行加上
args = new String[] {"input", "output/" + System.currentTimeMillis()};
output后面加上当前时间戳的目的是不用每次运行的时候都去手动删掉output目录。
这里只是对于初学的时候方便自己随便怎么修改。接下来就去探索了。
在eclipse中用gradle搭建MapReduce项目的更多相关文章
- ubuntu14.04 Hadoop单机开发环境搭建MapReduce项目
Hadoop官网:http://hadoop.apache.org/ 目前最新的版本是Hadoop 3.0.0-alpha1前提:java 1.6 版本以上 首先从官网下载压缩包(hadoop-3.0 ...
- maven -- 学习笔记(四)实现在Eclipse用maven搭建springmvc项目(附构建步骤和详细实现代码)
Learn from:http://www.cnblogs.com/fangjins/archive/2012/05/06/2485459.html,感谢楼主的分享,才有下面的这篇学习小结 一.环境准 ...
- 从0到1用eclipse用maven搭建web项目
1,默认已经搭建了JDK1.5以上,以及eclipseEE版本,和maven. 2,修改maven的本地仓库和镜像,修改本地仓库是为了方便我们管理,maven的默认仓库是在C盘的USER文件夹下,我一 ...
- eclipse中用maven创建web项目
上一节中完成了本地的maven环境搭建,在eclipse中怎么创建一个maven项目呢 一.eclipse中配置maven环境 eclipse版本4.3 1.打开菜单Help->Eclipse ...
- gradle学习系列之eclipse中简单构建android项目
看不到图片能够去訪问这个网址看看:http://pan.baidu.com/s/1o6FrFkA 一.什么是Gradle 官网www.gradle.org上介绍Gradle是升级版(evolved)的 ...
- eclipse 导入gradle引入多模块项目,引入eclipse后变成了好几个工程
1.eclipse 导入gradle 项目 ,选择项目文件夹. 2.导入完成后,文档结构变成 ,多个子项目并列了,而且互不依赖,没有层级结构了. 3.点击项目目录,右上角这个小箭头,选择projec ...
- Eclipse搭建maven项目的流程,聚合所有的子模块项目
Eclipse搭建maven项目的流程 2018年03月01日 15:47:03 阅读数:22 1:搭建parent工程,用来聚合所有的子模块项目 2:搭建公共使用的模块common 这里你要点击空白 ...
- eclipse上的git命令使用浅析,搭建Maven项目
eclipse上的git命令使用浅析 2016-03-31 14:44 关于eclipse上git的安装和建立代码仓库的文章比较多,但作为一个初识git的人更希望了解每个命令的作用. 当项目连接到 ...
- 解决Eclipse导入Gradle项目时在 Building gradle project info 一直卡住
问题描述 在使用 Eclipse 导入 Gradle 项目时一直卡住,不能导入项目 问题解决 解决办法主要有两种:一是直接下载 gradle 离线包,二是修改项目的 ..\gradle\wrapp ...
随机推荐
- 添加群组表AppGroup和群组详细表AppGroupDetails
添加群组表AppGroup和群组详细表AppGroupDetails CREATE TABLE [dbo].[AppGroup]( ) NOT NULL PRIMARY KEY, ) NOT NULL ...
- c#-快速排序-算法
快速排序使用分治法(Divide and conquer)策略来把一个串行(list)分为两个子串行(sub-lists). 步骤为: 1.从数列中挑出一个元素,称为 "基准"(p ...
- 利用git+hugo+markdown 搭建一个静态网站
利用git+hugo+markdown 搭建一个静态网站 一直想要有一个自己的文档管理系统: 可以很方便书写,而且相应的文档很容易被分享 很方便的存储.管理.历史记录 比较方面的浏览和查询 第一点用M ...
- Mountains(CVTE面试题)解题报告
题目大意: 用一个数组代表群山的高度.高度大的地方代表山峰,小的地方代表山谷.山谷可以容水.假设有一天下了大雨,求群山中总共可以容纳多少水? 如图所示情况,a代表该数组,总共可以容纳5个水. 解题思路 ...
- UNION和UNION ALL
UNION 用于合并两个或多个 SELECT 语句的结果集,并消去表中任何重复行.UNION 内部的 SELECT 语句必须拥有相同数量的列,列也必须拥有相似的数据类型.同时,每条 SELECT 语句 ...
- 4.Git的安装
最早Git是在Linux上开发的,很长一段时间内,Git也只能在Linux和Unix系统上跑.不过,慢慢地有人把它移植到了Windows上.现在,Git可以在Linux.Unix.Mac和Window ...
- JAVA中的异常及处理异常的方法
异常 这是我老师的喜好:就是说一上来就拿一张图给大家看看,过过瘾-_- 这是一张: 异常分类图 来,这里还有一张带中文的常见异常截图!!! 1:先来说说什么是异常吧: 其实就是"阻止当前方法 ...
- hadoop-2.6.0-src源码导入Eclipse 转载
转载地址:http://m.blog.csdn.net/blog/le119126/42009281 一.导入 先修改源码 参考 二.改错里面的第3条 1.cd到 hadoop-2.6.0-src/h ...
- C#:复杂条件判断类型(练习)
/// <summary> /// 文件类型 /// </summary> public enum FileType { Courseware, //"课件" ...
- T-sql 查询
------------------case---when-------的使用--------------------- select userAccount , eatingDate , c ...