MapReduce实操
在linux环境中执行一个mapreduce的小Demo(使用安装时已存在的实例)
注意:mapreduce的测试数据和输出结果均来自hdfs文件系统
- 启动hadoop服务(当然要先启动zookeeper,不明白的宝子可以看看我之前有关环境搭建的介绍)
- 执行命令
hadoop jar <执行的jar包的路径> <选择操作实例> <所选操作需要的参数>
其中:- jar包:hadoop安装目录下share/hadoop/mapreduce我们选择hadoop-mapreduce-examples-2.7.3.jar这是一个实例jar包,里面有很多小Demo
- 操作实例:即jar包里面的小Demo(实质是一个java可执行文件)
- 参数:
(1)以wordcount为例参数为<测试所用的hdfs文件系统中的数据文件所在路径> <输出结果文件夹output路径>后两个是hdfs文件系统中的,路径建议同根
例:hadoop jar /usr/hadoop/hadoop-2.7.3/share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.3.jar wordcount /bigdata/109ma/a.txt /bigdata/109ma/output
运行结果:会创建出output目录(相反,若output目录已存在则会报错),并在此目录下生成_SUCCESS和part-r-00000两个文件,其中_SUCCESS文件中存放处理结果
(2)以pi为例参数为<map执行次数><每个map上执行操作次数>
例:hadoop jar /usr/hadoop/hadoop-2.7.3/share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.3.jar pi 30 1000
运行结果为3.1410000
自己写一个小Demo(Java程序)
- Windows环境下运行程序:
-
我们需要启用蓝色小象哦
-
在对应项目中导入commom,hdfs,yarn,mapreduce四类jar包
详细方法请见配置eclipse访问hadoop -
然后我们就可以写具体实例程序了(注意:代码中建立连接的机器ip和一些文件路径请根据自己实际情况作出正确变更)
点击查看代码
package mapreduceDemo; 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; public class MyWordCount{ public static class MyMapper 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.hasMoreElements()) { word.set(itr.nextToken()); context.write(word, one); } } } public static class MyReduce 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) { // TODO Auto-generated method stub try { Configuration conf= new Configuration(); conf.set("fs.defaultFS", "hdfs://192.168.13.101:9000"); Job job=Job.getInstance(conf,"MyWordCount"); job.setJarByClass(mapreduceDemo.MyWordCount.class); job.setMapperClass(MyMapper.class); job.setReducerClass(MyReduce.class); job.setOutputKeyClass(Text.class); job.setOutputValueClass(IntWritable.class); FileInputFormat.setInputPaths(job, new Path("/mapreducetest/test2/a.txt")); FileOutputFormat.setOutputPath(job, new Path("/mapreducetest/test2/output")); try { if(!job.waitForCompletion(true)) { return; } } catch (ClassNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } }
-
- linux环境下运行程序:
- 详细程序推荐林子雨老师的大数据技术原理与应用这本书,很详细!!!
- 运行就按第一种在linux下运行的方法即可

浙公网安备 33010602011771号