在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 ...
随机推荐
- sqlserver中DATE类型的数据转化 CONVERT
主要描述的是SQL Server使用convert取得datetime日期数据的实际操作流程,在实际操作中用SQL Server数据库中用convert来获取datetime日期数据,以下实例包含各种 ...
- NSURLSessionTask使用dispatch_semaphore 完成同步机制
在NSURLSessionTask发起网路请求时,一般是异步操作,如果需要进行同步等待的话,可采用dispatch_semaphore_t信号量基于计数器的一种多线程同步机制.但是在多个线程访问共有资 ...
- Swift
1.Swift项目与OC项目的区别 - Swift的类文件是以 .swift 结尾 - main.m 不见了,程序入口以 `@UIApplicationMain` - Swift中,代码都是写到 `{ ...
- C# 自动Ping服务
using Newtonsoft.Json; using Newtonsoft.Json.Linq; using System; using System.Collections.Generic; u ...
- linux环境下学习使用pro*c/c++工具
1.proc是oracle用来预编译嵌入SQL语句的c程序. 2.如何使用proc工具 在Linux环境下,首先确保gcc编译器正常使用,安装oracle数据库或者客户端,一般就会默认安装pro*c/ ...
- 使用自定义签名的https的ssl安全问题解决和metro的webservice调用
最近一直在忙新的项目,每天加班到8点多,都没来写博客了.新的项目遇到了很多问题,现在趁着突然停电来记录下调用https的问题吧. 我们服务主要是,我们调用数据源数据,并且再提供接口供外部数据调用. 我 ...
- 捷波朗 jabra BT3030 蓝牙耳机
蓝牙版本V2.0 通话时间 8小时 按键说明:轻敲 快按轻敲两下 在1.5秒内快速按两下按 大约 1秒钟按住 大约 4秒钟 充电提示绿灯闪亮 正在充电持续绿灯 已完全充满电 检查电量按 音量上调(+) ...
- Windows7下的免费虚拟机(微软官方虚拟机)
前言: 不是说windows7自带的虚拟机最好用,而是他是正式版的,免费的,只要你是windows7用户,就可以免费使用: 其实我最推荐的还是Vmware: 微软为什么提供免费的虚拟机呢? 因为vis ...
- wex5 实战 登陆帐号更换与用户id一致性
一 前言 关于用户登陆,注册,页面跳转,我讲了很多,都是页面框架级别的.有人问到这个问题,索性总结一下,今天是收尾最后一篇. 以往初学时的设计是: 1 注册 2 登陆 3 进入页面. 这种很简单,没有 ...
- requirejs基础教程
一.初识requirejs 随着网站功能逐渐丰富,网页中的js也变得越来越复杂和臃肿,原有通过script标签来导入一个个的js文件这种方式已经不能满足现在互联网开发模式,我们需要团队协作.模块复用. ...