编写MapReduce程序,实现WordCount
发布日期:2021-07-26 07:20:50
浏览次数:6
分类:技术文章
本文共 3529 字,大约阅读时间需要 11 分钟。
一、在集群创好文件夹,并上传好相应的文件
输入hdfs dfs直接回车即可出现操作提示
(1)创建目录
hdfs dfs -mkdir /wordcount
(2)创建文件input和output目录
hdfs dfs mkdir /wordcount/inputhdfs dfs mkdir /wordcount/output
(3)上传本地TXT文件到集群
hdfs dfs -put text1.txt /wordcount/input
二、打开eclipse编写MR程序代码
不知道如何接入集群的同学可以参照博客,将eclipse接入hadoop:
(1)新建map工程
(2)编写Mapper类型
package demo;import java.io.IOException;import java.util.StringTokenizer;import org.apache.hadoop.io.IntWritable;import org.apache.hadoop.io.LongWritable;import org.apache.hadoop.io.Text;import org.apache.hadoop.mapreduce.Mapper;/** * map阶段---> * 分析:text1.txt * hello world --> =<0,"hello world">--> ==<"hello",1>,<"world",1> * hello hadoop --> =<11,"hello hadoop">--> ==<"hello",1>,<"hadoop",1> */public class WordMapper extends Mapper { Text word = new Text(); IntWritable one = new IntWritable(1); /** * map函数:处理行,有几行就处理几行,上述案例会调用两次 */ @Override protected void map(LongWritable 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); } }}
(3)编写Reduce类型
package demo;import java.io.IOException;import org.apache.hadoop.io.IntWritable;import org.apache.hadoop.io.Text;import org.apache.hadoop.mapreduce.Reducer;/** * reduce阶段:== == * 分析:reduce接收来自map阶段输出数据 =<"hello",1>,进到reduce函数后,数据变成如下内容: * <"hello",[1,1]>,<"world",[1]>....(shuffle阶段)重点知识 * */public class WordReduce extends Reducer { IntWritable result = new IntWritable(); @Override protected void reduce(Text k2, Iterable v2,Context context) throws IOException, InterruptedException { int sum = 0; for (IntWritable v : v2) { sum = sum + v.get(); } result.set(sum); context.write(k2, result); } }
(4)编写Driver类型
package demo;import java.io.IOException;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.lib.input.FileInputFormat;import org.apache.hadoop.mapreduce.lib.output.FileOutputFormat;/** * Driver 驱动类 * * */public class WordCount { public static void main(String[] args) { try { Configuration conf = new Configuration(); System.setProperty("HADOOP_USER_NAME", "dodo"); Job job = Job.getInstance(conf); job.setJobName("max air"); //创建job作业,需要conf,给作业命名"word count" //设置通过一个类的全路径,加载寻找相应的jar包 job.setJarByClass(WordCount.class); //设置job所需的mapper类 job.setMapperClass(WordMapper.class); //job.setCombinerClass(cls); //设置job所需的reducer类 job.setReducerClass(WordReduce.class); //设置job作业的输出类型 job.setOutputKeyClass(Text.class); job.setOutputValueClass(IntWritable.class); //为MR的job添加数据输入路径 FileInputFormat.addInputPath(job, new Path("hdfs://192.168.81.128:9000/wordcount/input/text*.txt")); //为MR的job设置数据输出路径 FileOutputFormat.setOutputPath(job, new Path("hdfs://192.168.81.128:9000/wordcount/output/out")); //提交job到集群,并且等待完成 try { System.exit(job.waitForCompletion(true)?1:0); } catch (ClassNotFoundException e) { e.printStackTrace(); } catch (InterruptedException e) { e.printStackTrace(); } } catch (IOException e) { e.printStackTrace(); } }}
如果想从window本地读取文件,同时跑完MR程序,文件落到window可以如下设置
(5)运行,执行成功出现下图
未成功执行的同学可以参照博客,将eclipse接入hadoop,并解决并且避免一些excption:
转载地址:https://blog.csdn.net/qq_38741971/article/details/88877620 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!
发表评论
最新留言
能坚持,总会有不一样的收获!
[***.219.124.196]2024年04月18日 04时12分47秒
关于作者
喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
Unity使用RenderTexture实现裁切3D模型
2019-04-27
美术和程序吵架,原来是资源序列化格式设置不统一
2019-04-27
Unity iOS接SDK,定制UnityAppController
2019-04-27
Unity iOS接SDK前先要了解的知识(Objective-C)
2019-04-27
记一次iOS闪退问题的定位:NSLog闪退
2019-04-27
Unity打开照相机与打开本地相册然后在Unity中显示照片(Android与iOS)
2019-04-27
无需接入SDK即可在Unity中获取经纬度(Android/iOS),告诉我你的坐标
2019-04-27
Unity获取系统信息SystemInfo(CPU、显卡、操作系统等信息)
2019-04-27
Unity中获取物体的尺寸(size)的三种方法
2019-04-27
Unity中的关节组件和绳子效果的实现
2019-04-27
Unity可视化编程插件: Bolt,可以像UE4的蓝图那样啦
2019-04-27
Android的.dex、.odex与.oat文件扫盲
2019-04-27
Unity移动应用如何在Bugly上查看崩溃堆栈
2019-04-27
Unity3D 序列帧
2019-04-27
unity3D 在屏幕边框创建碰撞框
2019-04-27
xml中常用的转义符
2019-04-27
关于MSDK的几个难点
2019-04-27
使用UnityEditor做工具
2019-04-27