Mapreduce是一个分布式的运算编程框架,核心功能是将用户编写的核心逻辑代码分布式地运行在一个集群的很多服务器上.

Mapreduce的存在价值

(1)海量数据在单机上处理因为硬件资源限制,无法胜任,因为需要采用分布式集群的方式来处理。
(2)而一旦将单机版程序扩展到集群来分布式运行,将极大地增加程序的复杂度和开发难度
(3)引入mapreduce框架后,开发人员可以将绝大部分工作集中在业务逻辑的开发上,而将分布式计算中的复杂性交由框架来处理

hadoop与mapreduce的关系

Hadoop的发布包中内置了一个hadoop-mapreduce-example-2.4.1.jar,这个jar包中有各种MR示例程序,可以通过以下步骤运行:
启动hdfs,yarn
然后在集群中的任意一台服务器上执行,(比如运行wordcount):
hadoop jar hadoop-mapreduce-example-2.4.1.jar wordcount /wordcount/data /wordcount/out

mapreduce编程规范

(1)用户程序会分成三个部分:Mapper,Reducer,Driver
(2)Mapper的输入数据是KV对的形式,KV的类型可以设置
(3)Mapper的输出数据是KV对的形式,KV的类型可以设置
(4)Mapper中的业务逻辑写在map方法中
(5)map方法是每进来一个KV对调用一次
(6)Reducer的输入数据应该对应Mapper的输出数据,也是KV
(7)Reducer的业务逻辑写在reduce方法中
(8)reduce方法是对每一个<key,valueList>调用一次
(9)用户的Mapper和Reducer都要继承各自的父类
(10)整个程序需要一个Drvier来进行提交,提交的是一个描述了各种必要信息的job对象.

wordcount示例编写

  • (1)定义一个mapper类
//首先要定义四个泛型的类型
//keyin:  LongWritable    valuein: Text
//keyout: Text            valueout:IntWritablepublic class WordCountMapper extends Mapper<LongWritable, Text, Text, IntWritable>{//map方法的生命周期:  框架每传一行数据就被调用一次//key :  这一行的起始点在文件中的偏移量//value: 这一行的内容@Overrideprotected void map(LongWritable key, Text value, Context context) throws IOException, InterruptedException {//拿到一行数据转换为stringString line = value.toString();//将这一行切分出各个单词String[] words = line.split(" ");//遍历数组,输出<单词,1>for(String word:words){context.write(new Text(word), new IntWritable(1));}}
}
  • (2)定义一个reducer类
 //生命周期:框架每传递进来一个kv 组,reduce方法被调用一次@Overrideprotected void reduce(Text key, Iterable<IntWritable> values, Context context) throws IOException, InterruptedException {//定义一个计数器int count = 0;//遍历这一组kv的所有v,累加到count中for(IntWritable value:values){count += value.get();}context.write(key, new IntWritable(count));}
}
  • (3)定义一个主类,用来描述job并提交job
public class WordCountRunner {//把业务逻辑相关的信息(哪个是mapper,哪个是reducer,要处理的数据在哪里,输出的结果放哪里。。。。。。)描述成一个job对象//把这个描述好的job提交给集群去运行public static void main(String[] args) throws Exception {Configuration conf = new Configuration();Job wcjob = Job.getInstance(conf);//指定我这个job所在的jar包
//      wcjob.setJar("/home/hadoop/wordcount.jar");wcjob.setJarByClass(WordCountRunner.class);wcjob.setMapperClass(WordCountMapper.class);wcjob.setReducerClass(WordCountReducer.class);//设置我们的业务逻辑Mapper类的输出key和value的数据类型wcjob.setMapOutputKeyClass(Text.class);wcjob.setMapOutputValueClass(IntWritable.class);//设置我们的业务逻辑Reducer类的输出key和value的数据类型wcjob.setOutputKeyClass(Text.class);wcjob.setOutputValueClass(IntWritable.class);//指定要处理的数据所在的位置FileInputFormat.setInputPaths(wcjob, "hdfs://hdp-server01:9000/wordcount/data/big.txt");//指定处理完成之后的结果所保存的位置FileOutputFormat.setOutputPath(wcjob, new Path("hdfs://hdp-server01:9000/wordcount/output/"));//向yarn集群提交这个jobboolean res = wcjob.waitForCompletion(true);System.exit(res?0:1);}

Hadoop大数据--Mapreduce编程规范及入门示例相关推荐

  1. 大数据 - MapReduce编程案例 -BH3

    MapReduce编程案例 用mapreduce解决问题的关键是确定key,只有key相同的结果才会到同一个reduce中进行处理 默认分区使用HashPartitoner,hashCode%redu ...

  2. Hadoop大数据--Mapreduce程序运行并发度

    reduce task数量的决定机制 1.业务逻辑需要 2.数据量大小 设置方法: job.setNumReduceTasks(5) map task数量的决定机制 由于map task之间没有协作关 ...

  3. Hadoop大数据——mapreduce的排序机制之total排序

    mapreduce的排序机制之total排序 (1)设置一个reduce task ,全局有序,但是并发度太低,单节点负载太大 (2)设置分区段partitioner,设置相应数量的reduce ta ...

  4. Hadoop大数据——mapreduce的secondary排序机制

    secondary排序机制 ----就是让mapreduce帮我们根据value排序 考虑一个场景,需要取按key分组的最大value条目: 通常,shuffle只是对key进行排序 如果需要对val ...

  5. Hadoop大数据——mapreduce中的Combiner/序列化/排序初步

    mapreduce中的Combiner (1)combiner是MR程序中Mapper和Reducer之外的一种组件 (2)combiner组件的父类就是Reducer (3)Combiner和red ...

  6. hadoop大数据——mapreduce程序提交运行模式及debug方法

    本地运行模式 (1)mapreduce程序是被提交给LocalJobRunner在本地运行 (2)而处理的数据及输出结果可以在本地文件系统,也可以在hdfs上 怎样实现本地运行?:写一个程序,不要带集 ...

  7. 大数据||MapReduce编程模板

    标准模板代码 package com.lizh.hadoop.mapreduce;import java.io.IOException;import org.apache.hadoop.conf.Co ...

  8. 大数据Mapreduce编程——矩阵乘法

    编程要求 完成矩阵乘法的 Map 函数和 Reduce 函数 1.设计两个矩阵(3050,50100),在每个单元格中填入一个 0-99 的随机数,并写入 两个文件中,作为 Map 函数的输入 2.测 ...

  9. Hadoop大数据——mapreduce的join算法

    (1)Reduce side join 示例: 订单数据 商品信息 实现机制: 通过将关联的条件作为map输出的key,将两表满足join条件的数据并携带数据所来源的文件信息,发往同一个reduce ...

最新文章

  1. Leangoo敏捷开发项目管理软件-工作日志
  2. 用leangoo怎么添加泳道,拖拽移动泳道?
  3. 如何为python程序设置使用次数_提升Python程序性能的7个习惯
  4. boost::hof::apply_eval用法的测试程序
  5. zigbee 协议栈的时钟和定时器分频
  6. 全面剖析 Knative Eventing 0.6 版本新特性
  7. 如何让你的手机比别人最先升级到 Android L
  8. 一款不错的SpringCloud 脚手架项目
  9. spring-data-redis和jedis版本对应问题
  10. Android设计模式系列-组合模式
  11. 干货分享:MySQL之化险为夷的【钻石】抢购风暴【转载】
  12. 电工/模电/数电/电气控制/PLC/单片机综合实验装置
  13. 每日一道leetcode(python)347. 前 K 个高频元素
  14. TAPD 完整项目工作流
  15. 如何用QGIS 3.22将遥感影像切割成小矩形图片(机器学习数据)
  16. linux全局搜索是什么,linux之文本搜索工具(grep、egrep)用法
  17. C++ 视频播放开源库
  18. MATLAB数据导入
  19. 修改VirtualBox中mac的分辨率
  20. 多级放大电路的一般问题(耦合方式+动态分析)详解

热门文章

  1. 当人工智能遇见农业,农民伯伯不再「粒粒皆辛苦」
  2. 机器学习入门的百科全书-2018年“机器学习初学者”公众号文章汇总
  3. VALSE 视觉资源汇总(视频+PPT+文章解读,持续更新)
  4. 互联网1分钟 |1226
  5. 百度地图-矩形编辑的模拟实现
  6. Office资源汇 | Office 365 微助理功能介绍 4
  7. nyoj473 A^B Problem (高速幂)
  8. 推荐一个SAM文件中flag含义解释工具--转载
  9. java Memcache使用详解
  10. android/IOS SDK怎么判断用户是否安装了微信/QQ