java mapreduce程序_Hadoop(7)--java编写mapreduce程序

本文详细介绍了如何使用Java开发MapReduce程序,涵盖了从设置HADOOP_HOME环境变量,处理Windows下的库文件问题,到创建项目并引入Hadoop依赖,编写WordMapper和WordReducer代码,再到测试执行的全过程。文中还提到了本地运行和在远程服务器上执行MapReduce作业的方法,以及配置文件的处理和Maven-Hadoop项目的创建。
摘要由CSDN通过智能技术生成

1、java开发map_reduce程序

2、配置系统环境变量HADOOP_HOME,指向hadoop安装目录(如果你不想招惹不必要的麻烦,不要在目录中包含空格或者中文字符)

把HADOOP_HOME/bin加到PATH环境变量(非必要,只是为了方便)

3、如果是在windows下开发,需要添加windows的库文件

1.把盘中共享的bin目录覆盖HADOOP_HOME/bin

2.如果还是不行,把其中的hadoop.dll复制到c:\windows\system32目录下,可能需要重启机器

4、建立新项目,引入hadoop需要的jar文件

5、代码WordMapper:

importjava.io.IOException;importorg.apache.hadoop.io.IntWritable;importorg.apache.hadoop.io.LongWritable;importorg.apache.hadoop.io.Text;importorg.apache.hadoop.mapreduce.Mapper;public class WordMapper extends Mapper{

@Overrideprotected void map(LongWritable key, Text value, Mapper.Context context)throwsIOException, InterruptedException {

String line=value.toString();

String[] words= line.split(" ");for(String word : words) {

context.write(new Text(word), new IntWritable(1));

}

}

}

6、代码WordReducer:

importjava.io.IOException;importorg.apache.hadoop.io.IntWritable;importorg.apache.hadoop.io.LongWritable;importorg.apache.hadoop.io.Text;importorg.apache.hadoop.mapreduce.Reducer;public class WordReducer extends Reducer{

@Overrideprotected void reduce(Text key, Iterablevalues,

Reducer.Context context) throwsIOException, InterruptedException {long count = 0;for(IntWritable v : values) {

count+=v.get();

}

context.write(key,newLongWritable(count));

}

}

7、代码Test:

importorg.apache.hadoop.conf.Configuration;importorg.apache.hadoop.fs.Path;importorg.apache.hadoop.io.IntWritable;importorg.apache.hadoop.io.LongWritable;importorg.apache.hadoop.io.Text;importorg.apache.hadoop.mapreduce.Job;importorg.apache.hadoop.mapreduce.lib.input.FileInputFormat;importorg.apache.hadoop.mapreduce.lib.output.FileOutputFormat;public classTest {public static void main(String[] args) throwsException {

Configuration conf= newConfiguration();

Job job=Job.getInstance(conf);

job.setMapperClass(WordMapper.class);

job.setReducerClass(WordReducer.class);

job.setMapOutputKeyClass(Text.class);

job.setMapOutputValueClass(IntWritable.class);

job.setOutputKeyClass(Text.class);

job.setOutputValueClass(LongWritable.class);

FileInputFormat.setInputPaths(job,"c:/bigdata/hadoop/test/test.txt");

FileOutputFormat.setOutputPath(job,new Path("c:/bigdata/hadoop/test/out/"));

job.waitForCompletion(true);

}

}

8、把hdfs中的文件拉到本地来运行

FileInputFormat.setInputPaths(job, "hdfs://master:9000/wcinput/");

FileOutputFormat.setOutputPath(job,new Path("hdfs://master:9000/wcoutput2/"));

注意这里是把hdfs文件拉到本地来运行,如果观察输出的话会观察到jobID带有local字样

同时这样的运行方式是不需要yarn的(自己停掉yarn服务做实验)

9、在远程服务器执行

conf.set("fs.defaultFS", "hdfs://master:9000/");

conf.set("mapreduce.job.jar", "target/wc.jar");

conf.set("mapreduce.framework.name", "yarn");

conf.set("yarn.resourcemanager.hostname", "master");

conf.set("mapreduce.app-submission.cross-platform", "true");

FileInputFormat.setInputPaths(job, "/wcinput/");

FileOutputFormat.setOutputPath(job,new Path("/wcoutput3/"));

如果遇到权限问题,配置执行时的虚拟机参数-DHADOOP_USER_NAME=root

10、也可以将hadoop的四个配置文件拿下来放到src根目录下,就不需要进行手工配置了,默认到classpath目录寻找

11、或者将配置文件放到别的地方,使用conf.addResource(.class.getClassLoader.getResourceAsStream)方式添加,不推荐使用绝对路径的方式

12、建立maven-hadoop项目:

4.0.0

mashibing.com

maven

0.0.1-SNAPSHOT

wc

hello mp

UTF-8

2.7.3

junit

junit

4.12

org.apache.hadoop

hadoop-client

${hadoop.version}

org.apache.hadoop

hadoop-common

${hadoop.version}

org.apache.hadoop

hadoop-hdfs

${hadoop.version}

13、配置log4j.properties,放到src/main/resources目录下

log4j.rootCategory=INFO, stdout

log4j.appender.stdout=org.apache.log4j.ConsoleAppender

log4j.appender.stdout.layout=org.apache.log4j.PatternLayout

log4j.appender.stdout.layout.ConversionPattern=[QC] %p [%t] %C.%M(%L) | %m%n

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值