MapReduce
黑猴子的家
拥有技术,便拥有自由
B站 Up主专注于技术 https://space.bilibili.com/398602910
展开
-
黑猴子的家: WritableComparable排序
排序是MapReduce框架中最重要的操作之一。Map Task和Reduce Task均会对数据(按照key)进行排序。该操作属于Hadoop的默认行为。任何应用程序中的数据均会被排序,而不管逻辑上是否需要。对于Map Task,它会将处理的结果暂时放到一个缓冲区中,当缓冲区使用率达到一定阈值后,再对缓冲区中的数据进行一次排序,并将这些有序数据写到磁盘上,而当数据处理完毕后,它会对磁盘上所有...原创 2018-09-26 09:10:00 · 188 阅读 · 0 评论 -
黑猴子的家:MapReduce 与 Yarn
1、Yarn概述Yarn是一个资源调度平台,负责为运算程序提供服务器运算资源,相当于一个分布式的操作系统平台,而mapreduce等运算程序则相当于运行于操作系统之上的应用程序2、Yarn的重要概念1)Yarn并不清楚用户提交的程序的运行机制2)Yarn只提供运算资源的调度(用户程序向Yarn申请资源,Yarn就负责分配资源)3)Yarn中的主管角色叫ResourceManag...原创 2018-09-26 10:37:00 · 135 阅读 · 0 评论 -
黑猴子的家:MapReduce数据清洗
1、概述在运行核心业务Mapreduce程序之前,往往要先对数据进行清洗,清理掉不符合用户要求的数据。清理的过程往往只需要运行mapper程序,不需要运行reduce程序。2、实操案例续写... ......原创 2018-09-26 10:29:00 · 348 阅读 · 0 评论 -
黑猴子的家:MapReduce计数器应用
Hadoop为每个作业维护若干内置计数器,以描述多项指标。例如,某些计数器记录已处理的字节数和记录数,使用户可监控已处理的输入数据量和已产生的输出数据量。1、API(1)采用枚举的方式统计计数enum MyCounter{MALFORORMED,NORMAL}//对枚举定义的自定义计数器加1context.getCounter(MyCounter.MALFORORMED).inc...原创 2018-09-26 10:27:00 · 105 阅读 · 0 评论 -
黑猴子的家:MapReduce数据压缩
1、概述压缩技术能够有效减少底层存储系统(HDFS)读写字节数。压缩提高了网络带宽和磁盘空间的效率。在Hadood下,尤其是数据规模很大和工作负载密集的情况下,使用数据压缩显得非常重要。在这种情况下,I/O操作和网络数据传输要花大量的时间。还有,Shuffle与Merge过程同样也面临着巨大的I/O压力。鉴于磁盘I/O和网络带宽是Hadoop的宝贵资源,数据压缩对于节省资源、最小化磁盘I/...原创 2018-09-26 10:24:00 · 196 阅读 · 0 评论 -
黑猴子的家:MapReduce InputFormat数据切片机制
1、FileInputFormat切片机制2、CombineTextInputFormat切片机制3、自定义InputFormat切片机制原创 2018-09-25 16:49:00 · 136 阅读 · 0 评论 -
黑猴子的家:MapReduce编程之Writable序列化
1、序列化序列化就是把内存中的对象,转换成字节序列(或其他数据传输协议)以便于存储(持久化)和网络传输。反序列化就是将收到字节序列(或其他数据传输协议)或者是硬盘的持久化数据,转换成内存中的对象。Java的序列化是一个重量级序列化框架(Serializable),一个对象被序列化后,会附带很多额外的信息(各种校验信息,header,继承体系等),不便于在网络中高效传输。所以,hadoo...原创 2018-09-25 16:40:00 · 242 阅读 · 0 评论 -
黑猴子的家:MapReduce工作流程
1、流程示意图2、流程详解上面的流程是整个mapreduce最全工作流程,但是shuffle过程只是从第7步开始到第16步结束,具体shuffle过程详解,如下:1)maptask收集我们的map()方法输出的kv对,放到内存缓冲区中2)从内存缓冲区不断溢出本地磁盘文件,可能会溢出多个文件3)多个溢出文件会被合并成大的溢出文件4)在溢出过程中,及合并的过程中,...原创 2018-09-25 16:20:00 · 139 阅读 · 0 评论 -
黑猴子的家:MapReduce 程序运行流程分析
1)在MapReduce程序读取文件的输入目录上存放相应的文件。2)客户端程序在submit()方法执行前,获取待处理的数据信息,然后根据集群中参数的配置形成一个任务,分配规划。3)客户端提交job.split、jar包、job.xml等文件给yarn,yarn中的resourcemanager启动MRAppMaster。4)MRAppMaster启动后根据本次job的描述信息,计...原创 2018-09-25 16:13:00 · 181 阅读 · 0 评论 -
黑猴子的家:MapReduce 编程规范(八股文)
用户编写的程序分成三个部分:Mapper,Reducer,Driver(提交运行mr程序的客户端)1、Mapper阶段(1)用户自定义的Mapper要继承自己的父类(2)Mapper的输入数据是KV对的形式(KV的类型可自定义)(3)Mapper中的业务逻辑写在map()方法中(4)Mapper的输出数据是KV对的形式(KV的类型可自定义)(5)map()方法(maptask进程...原创 2018-09-25 16:06:00 · 382 阅读 · 0 评论 -
黑猴子的家:MapReduce 进程
一个完整的mapreduce程序在分布式运行时有三类实例进程MrAppMaster负责整个程序的过程调度及状态协调MapTask负责map阶段的整个数据处理流程ReduceTask负责reduce阶段的整个数据处理流程...原创 2018-09-25 16:02:00 · 178 阅读 · 0 评论 -
黑猴子的家:MapReduce 开发总结
在编写mapreduce程序时,需要考虑的几个方面1)输入数据接口:InputFormat默认使用的实现类是:TextInputFormatTextInputFormat的功能逻辑是:一次读一行文本,然后将该行的起始偏移量作为key,行内容作为value返回CombineTextInputFormat可以把多个小文件合并成一个切片处理,提高处理效率。用户还可以自定义InputFor...原创 2018-09-26 10:48:00 · 125 阅读 · 0 评论 -
黑猴子的家:MapReduce作业提交全过程
1、作业提交过程之YARN2、作业提交过程之MapReduce3、作业提交过程之读数据4、作业提交过程之写数据原创 2018-09-26 10:44:00 · 162 阅读 · 0 评论 -
黑猴子的家:自定义OutputFormat
1、概述(1)要在一个mapreduce程序中根据数据的不同输出两类结果到不同目录,这类灵活的输出需求可以通过自定义outputformat来实现。(1)自定义outputformat(2)改写recordwriter,具体改写输出数据的方法write()2、实操案例续写... ......原创 2018-09-26 09:35:00 · 188 阅读 · 0 评论 -
黑猴子的家:partition分区
将统计结果按照条件输出到不同文件中(分区)。比如:将统计结果按照手机归属地不同省份输出到不同文件中(分区)1、默认partition分区public class HashPartitioner<K, V> extends Partitioner<K, V> { /** Use {@link Object#hashCode()} to partition. */...原创 2018-09-26 09:06:00 · 278 阅读 · 0 评论 -
黑猴子的家:Shuffle机制
Mapreduce确保每个reducer的输入都是按键排序的。系统执行排序的过程(即将map输出作为输入传给reducer)称为shuffle。Shuffle的正常意思是洗牌或弄乱,可能大家更熟悉的是Java API里的Collections.shuffle(List)方法,它会随机地打乱参数list里的元素顺序。...原创 2018-09-26 09:01:00 · 127 阅读 · 0 评论 -
黑猴子的家:MapTask工作机制
1、并行度决定机制(1)问题引出maptask的并行度决定map阶段的任务处理并发度,进而影响到整个job的处理速度。那么,mapTask并行任务是否越多越好呢?(2)MapTask并行度决定机制一个job的map阶段MapTask并行度(个数),由客户端提交job时的切片个数决定。2、MapTask工作机制(1)Read阶段Map Task通过用户编写的Record...原创 2018-09-25 17:28:00 · 213 阅读 · 0 评论 -
黑猴子的家:自定义InputFormat切片机制
(1)自定义一个类继承FileInputFormat(2)改写RecordReader,实现一次读取一个完整文件封装为KV(3)在输出时使用SequenceFileOutPutFormat输出合并文件后续会写相关案列...原创 2018-09-25 17:16:00 · 174 阅读 · 0 评论 -
黑猴子的家:CombineTextInputFormat 切片机制
关于大量小文件的优化策略1、默认情况默认情况下TextInputformat对任务的切片机制是按文件规划切片,不管文件多小,都会是一个单独的切片,都会交给一个maptask,这样如果有大量小文件,就会产生大量的maptask,处理效率极其低下。2、优化策略(1)最好的办法,在数据处理系统的最前端(预处理/采集),将小文件先合并成大文件,再上传到HDFS做后续分析。(2...原创 2018-09-25 17:13:00 · 252 阅读 · 0 评论 -
黑猴子的家:FileInputFormat切片机制
1、job提交流程源码详解waitForCompletion()submit();// 1、建立连接connect(); // 1)创建提交job的代理 new Cluster(getConfiguration()); // 2)判断是本地yarn还是远程 initialize(jobTrackAddr, conf); // 2、提交...原创 2018-09-25 17:01:00 · 238 阅读 · 0 评论 -
黑猴子的家:ReduceTask工作机制
1、设置ReduceTaskreducetask的并行度同样影响整个job的执行并发度和执行效率,但与maptask的并发数由切片数决定不同,Reducetask数量的决定是可以直接手动设置//默认值是1,手动设置为4job.setNumReduceTasks(4);2、注意(1)如果数据分布不均匀,就有可能在reduce阶段产生数据倾斜(2)reducetask数量并不...原创 2018-09-26 09:34:00 · 156 阅读 · 0 评论 -
黑猴子的家:数据倾斜&Distributedcache
1、数据倾斜原因如果是多张表的操作都是在reduce阶段完成,reduce端的处理压力太大,map节点的运算负载则很低,资源利用率不高,且在reduce阶段极易产生数据倾斜。2、实操案例:数据倾斜案例续写3、解决方案在map端缓存多张表,提前处理业务逻辑,这样增加map端业务,减少reduce端数据的压力,尽可能的减少数据倾斜。4、具体办法:采用distributedcac...原创 2018-09-26 09:22:00 · 135 阅读 · 0 评论 -
黑猴子的家:Combiner合并
1、combiner是MR程序中Mapper和Reducer之外的一种组件2、combiner组件的父类就是Reducer3、combiner和reducer的区别在于运行的位置Combiner是在每一个maptask所在的节点运行Reducer是接收全局所有Mapper的输出结果;4、combiner的意义就是对每一个maptask的输出进行局部汇总,以减小网络传输量5...原创 2018-09-26 09:19:00 · 181 阅读 · 0 评论 -
黑猴子的家: GroupingComparator分组(辅助排序)
对reduce阶段的数据根据某一个或几个字段进行分组。案例续写... ...原创 2018-09-26 09:13:00 · 166 阅读 · 0 评论 -
黑猴子的家:MapReduce核心思想
1)分布式的运算程序往往需要分成至少2个阶段2)第一个阶段的maptask并发实例,完全并行运行,互不相干3)第二个阶段的reduce task并发实例互不相干,但是他们的数据依赖于上一个阶段的所有maptask并发实例的输出4)MapReduce编程模型只能包含一个map阶段和一个reduce阶段,如果用户的业务逻辑非常复杂,那就只能多个mapreduce程序,串行运行...原创 2018-09-25 16:00:00 · 168 阅读 · 0 评论 -
黑猴子的家:为什么要用MapReduce
1)海量数据在单机上处理因为硬件资源限制,无法胜任2)而一旦将单机版程序扩展到集群来分布式运行,将极大增加程序的复杂度和开发难度3)引入mapreduce框架后,开发人员可以将绝大部分工作集中在业务逻辑的开发上,而将分布式计算中的复杂性交由框架来处理。4)mapreduce分布式方案考虑的问题(1)运算逻辑要不要先分后合?(2)程序如何分配运算任务(切片)?(3)两阶段的程序...原创 2018-09-25 15:48:00 · 319 阅读 · 0 评论 -
黑猴子的家:MapReduce 求每个订单中最贵的商品(GroupingComparator)(辅助排序和二次排序)...
1、需求有如下订单数据订单id 商品id 成交金额 0000001 Pdt_01 222.8 0000001 Pdt_05 25.8 0000002 Pdt_03 522.8 0000002 Pdt_04 122.4 0000002 Pdt_05 722.4 0000003 Pdt_01...原创 2018-09-26 16:04:00 · 818 阅读 · 1 评论 -
黑猴子的家:MapReduce流量汇总程序案例四
要求每个省份手机号输出的文件中按照总流量内部排序。1、分析基于MapReduce流量汇总程序案例三,增加自定义分区类即可。2、案例实操(1)增加自定义分区类import org.apache.hadoop.io.Text;import org.apache.hadoop.mapreduce.Partitioner;public class FlowSortPartiti...原创 2018-09-26 15:49:00 · 153 阅读 · 0 评论 -
黑猴子的家:MapReduce流量汇总程序案例三
将统计结果按照总流量倒序排序(全排序)1、数据https://www.jianshu.com/p/bbebc7b959a82、分析(1)把程序分两步走,第一步正常统计总流量,第二步再把结果进行排序(2)context.write(总流量,手机号)(3)FlowBean实现WritableComparable接口重写compareTo方法@Overridepublic i...原创 2018-09-26 15:30:00 · 168 阅读 · 0 评论 -
黑猴子的家:MapReduce流量汇总程序案例二
将统计结果按照手机归属地不同省份输出到不同文件中(Partitioner)1、分析(1)Mapreduce中会将map输出的kv对,按照相同key分组,然后分发给不同的reducetask。默认的分发规则为:根据key的hashcode%reducetask数来分发(2)如果要按照我们自己的需求进行分组,则需要改写数据分发(分组)组件Partitioner自定义一个CustomPar...原创 2018-09-26 15:24:00 · 182 阅读 · 0 评论 -
黑猴子的家:MapReduce流量汇总程序案例一
统计手机号耗费的总上行流量、下行流量、总流量(序列化)1、数据https://www.jianshu.com/p/bbebc7b959a8输入数据格式1363157993055 13560436666 C4-17-FE-BA-DE-D9:CMCC 120.196.100.99 18 15 1116 954 200 ...原创 2018-09-26 14:25:00 · 166 阅读 · 0 评论 -
黑猴子的家:MapReduce WordCount大量小文件的切片优化(CombineTextInputFormat)
将输入的大量小文件合并成一个切片统一处理1、输入数据:准备5个小文件2、实现过程(1)不做任何处理,运行需求1中的wordcount程序,观察切片个数为5(2)在WordcountDriver中增加如下代码,运行程序,并观察运行的切片个数为1// 如果不设置InputFormat,它默认用的是TextInputFormat.classjob.setInputForma...原创 2018-09-26 14:10:00 · 171 阅读 · 0 评论 -
黑猴子的家:MapReduce WordCount 局部汇总(Combiner)
统计过程中对每一个maptask的输出进行局部汇总,以减小网络传输量即采用Combiner功能1、分析2、方案一1)增加一个WordcountCombiner类继承Reducerimport java.io.IOException;import org.apache.hadoop.io.IntWritable;import org.apache.hadoop.io.Tex...原创 2018-09-26 14:03:00 · 214 阅读 · 0 评论 -
黑猴子的家:MapReduce WordCount奇偶分区(Partitioner)
把单词按照ASCII码奇偶分区(Partitioner)1、分析2、自定义分区import org.apache.hadoop.io.IntWritable;import org.apache.hadoop.io.Text;import org.apache.hadoop.mapreduce.Partitioner;public class WordCountPartit...原创 2018-09-26 13:57:00 · 380 阅读 · 0 评论 -
黑猴子的家:MapReduce-WordCount案例
在一堆给定的文本文件中统计输出每一个单词出现的总次数Code -> GitHubhttps://github.com/liufengji/hadoop_mapreduce.git1、数据https://www.jianshu.com/p/4221178f7cee2、分析按照mapreduce编程规范,分别编写Mapper,Reducer,Driver。3...原创 2018-09-26 11:07:00 · 227 阅读 · 0 评论 -
黑猴子的家:MapReduce 参数与优化
1、资源相关参数1)以下参数是在用户自己的mr应用程序中配置就可以生效(mapred-default.xml)配置参数 参数说明 mapreduce.map.memory.mb 一个Map Task可使用的资源上限(单位:MB),默认为1024。如果MapTask实际使用的资源量超过该值,则会被强制杀死。 mapreduce.reduce.memory.mb 一个...原创 2018-09-26 10:57:00 · 156 阅读 · 0 评论 -
黑猴子的家:MapReduce Reduce端-表合并(数据倾斜)案例一
数据https://www.jianshu.com/p/cb1914c1aaf5通过将关联条件作为map输出的key,将两表满足join条件的数据并携带数据所来源的文件信息,发往同一个reduce task,在reduce中进行数据的串联。1、创建商品和订合并后的bean类import java.io.DataInput;import java.io.DataOutput;i...原创 2018-09-26 16:22:00 · 174 阅读 · 0 评论 -
黑猴子的家:MapReduce Map端表合并(Distributedcache)案例二
1、分析适用于关联表中有小表的情形;可以将小表分发到所有的map节点,这样,map节点就可以在本地对自己所读到的大表数据进行合并并输出最终结果,可以大大提高合并操作的并发度,加快处理速度。2、先在驱动模块中添加缓存文件import java.net.URI;import org.apache.hadoop.conf.Configuration;import org.a...原创 2018-09-26 16:33:00 · 140 阅读 · 0 评论 -
黑猴子的家:MapReduce 小文件处理(自定义InputFormat)
1、需求无论hdfs还是mapreduce,对于小文件都有损效率,实践中,又难免面临处理大量小文件的场景,此时,就需要有相应解决方案。将多个小文件合并成一个文件SequenceFile,SequenceFile里面存储着多个文件,存储的形式为文件路径+名称为key,文件内容为value。2、输入数据https://www.jianshu.com/p/2b9e106147243、分析...原创 2018-09-26 16:56:00 · 118 阅读 · 0 评论 -
黑猴子的家:MapReduce是什么??
MapReduce概念Mapreduce是一个分布式运算程序的编程框架,是用户开发“基于hadoop的数据分析应用”的核心框架,是Google提出的,主要用于搜索领域,解决海量数据的计算问题。Mapreduce核心功能是将用户编写的业务逻辑代码和自带默认组件整合成一个完整的分布式运算程序,并发运行在一个hadoop集群上。...原创 2018-09-25 15:46:00 · 124 阅读 · 0 评论