MapReduce

第2节 mapreduce深入学习:2、3

心已入冬 提交于 2020-02-03 00:50:29
第2节 mapreduce深入学习:2、MapReduce的分区;3、分区案例的补充完成运行实现 在MapReduce中,通过我们指定分区,会将同一个分区的数据发送到同一个reduce当中进行处理,例如我们为了数据的统计,我们可以把一批类似的数据发送到同一个reduce当中去,在同一个reduce当中统计相同类型的数据,就可以实现类似数据的分区,统计等 说白了就是相同类型的数据,送到一起去处理,在reduce当中默认分区只有1个。 MapReduce当中的分区类图: mapreduce的分区以及与reduceTask的个数,物以类聚,人以群分,相同的数据去到同一个reduce 分区主要就是把相同的一批数据,发送到同一个reduce里面去 相同key的数据发送到同一个reduce里面去 例子:需求:将以下数据进行分开处理 详细数据参见partition.csv 这个文本文件,其中第五个字段表示开奖结果数值,现在需求将15以上的结果以及15以下的结果进行分开成两个文件进行保存。 思路图解: 注意:分区的案例,只能打成jar包发布到集群上面去运行,本地模式已经不能正常运行了。 打成jar包提交到集群上面去运行: hadoop jar partition.jar cn.itcast.demo1.partition.PartitionerMain /partition_in

Mapreduce参数调节

不问归期 提交于 2020-02-03 00:10:53
http://blog.javachen.com/2014/06/24/tuning-in-mapreduce/ 本文主要记录Hadoop 2.x版本中MapReduce参数调优,不涉及Yarn的调优。 Hadoop的默认配置文件(以cdh5.0.1为例): core-default.xml hdfs-default.xml mapred-default.xml 说明: 在hadoop2中有些参数名称过时了,例如原来的 mapred.reduce.tasks 改名为 mapreduce.job.reduces 了,当然,这两个参数你都可以使用,只是第一个参数过时了。 1. 操作系统调优 增大打开文件数据和网络连接上限,调整内核参数 net.core.somaxconn ,提高读写速度和网络带宽使用率 适当调整 epoll的文件描述符 上限,提高Hadoop RPC并发 关闭swap 。如果进程内存不足,系统会将内存中的部分数据暂时写入磁盘,当需要时再将磁盘上的数据动态换置到内存中,这样会降低进程执行效率 增加 预读缓存区 大小。预读可以减少磁盘寻道次数和I/O等待时间 设置 openfile 2. Hdfs参数调优 2.1 core-default.xml: hadoop.tmp.dir : 默认值: /tmp 说明: 尽量手动配置这个选项,否则的话都默认存在了里系统的默认临时文件

MapReduce的输入输出和处理流程

巧了我就是萌 提交于 2020-02-02 20:42:29
MapReduce的输入和输出 MapReduce框架运转在 <key,value>键值对 上,也就是说,框架把作业的输入看成是一组<key,value>键值对,同样也产生一组<key,value>键值对作为作业的输出,这两组键值对可能是不同的。 一个MapReduce作业的输入和输出类型如下图所示:可以看出在整个标准的流程中,会有三组<key,value>键值对类型的存在。 MapReduce的处理流程解析 Mapper执行过程详解 第一阶段 是把输入目录下的文件按照一定的标准逐个进行逻辑切片,形成切片规划。默认情况下,Split size = Block size。每一个切片由一个MapTask处理。(getSplits) 第二阶段 是对切片中的数据按照一定的规则解析成<key,value>对。默认规则是把每一行文本内容解析成键值对。key是每一行的起始位置(行偏移量,单位是字节),value是本行的文本内容。(TextInputFormat) 第三阶段 是调用Mapper类中的map方法。上阶段中每解析出来一个<k,v>,就调用一次map方法。每次调用map方法会输出零个或多个键值对。 第四阶段 是按照一定的规则对第三阶段输出的键值对进行分区。默认是只有一个区。分区的数量就是Reducer任务运行的数量。默认只有一个Reducer任务。 第五阶段

大数据学习路线

心不动则不痛 提交于 2020-02-02 03:16:50
大数据处理从hadoop开始经过了几年的发展,生态越来越丰富,也越来越重要。就从目前的各个招聘网站来看也是薪资最高的。但是对于想进入大数据方面的开发人员从何处学习呢?我在网络收集了一些相关的资源,希望可以帮助到大家。 大数据处理流程与应用 一、Github上的学习资源BigData-Notes Github地址 : https://github.com/heibaiying/BigData-Notes 这个github上的资源是最为丰富的。该资源中详细的介绍了大数据学习的各个方面。从大数据收集、存储、分析、实时计算、还有其他相关的辅助技术。 1、数据收集:Flume 、Logstash、Kibana 2、数据存储:Hadoop HDFS 、KFS、GFS 3、数据分析:Hadoop MapReduce、Spark、Flink、Storm 4、实时计算:Spark、Flink、Storm 大数据学习路线图 二、Flink实时计算框架flink-learning Github地址 :https://github.com/zhisheng17/flink-learning 该资源介绍了flink相关的知识点,同时也包含与各种中间件集成的例子。是个不错的学习资源。 总之学习大数据要先学会相关的开发语言。目前大数据相关的开发语言Java、Scala。另外就是要知道相关的大数据收集相关的框架了

Hadoop集群大数据解决方案之IDE配Maven实现MapReduce 程序实战(五)

a 夏天 提交于 2020-02-01 23:26:58
准 备    关于mapreduce的原理,说的再天花乱坠,也还是原理,如图1,用程序练习一个简单的word count程序,采用IDE+Maven简单的撸一把,下一篇博客可以搞点有趣的,哎呀,不得不说Maven这个东西真是太好用了,想起以前手动导依赖的Jar包,简直苦不堪言。 图1 mapreduce wordcount 图谱 测试数据如下,在集群hdfs上/tmp/wcinput/wordcount.xt下文件: hello myname hadoop world lau hello map hdfs spark hive reduce map zookeeper world word log hdfs myname hive hi lau 编写项目 表1 Java数据类型和Writable类型对比 Java基本类型 Writable实现 序列化大小(字节) boolean BooleanWritable 1 byte ByteWritable 1 short ShortWritable 2 int IntWritable 4 int VintWritable(可变长) 1~5 float FloatWritable 4 long LongWritable 8 long VlongWritable(可变长) 1~9 double DoubleWritable 8 String

MapReduce异常:java.lang.ClassCastException: interface javax.xml.soap.Text

跟風遠走 提交于 2020-02-01 14:57:49
MapReduce异常:java.lang.ClassCastException: interface javax.xml.soap.Text java.lang.ClassCastException: interface javax.xml.soap.Text at java.lang.Class.asSubclass(Class.java:3396) at org.apache.hadoop.mapred.JobConf.getOutputKeyComparator(JobConf.java:887) at org.apache.hadoop.mapred.MapTask$MapOutputBuffer.init(MapTask.java:1004) at org.apache.hadoop.mapred.MapTask.createSortingCollector(MapTask.java:402) at org.apache.hadoop.mapred.MapTask.access$100(MapTask.java:81) at org.apache.hadoop.mapred.MapTask$NewOutputCollector.<init>(MapTask.java:698) at org.apache.hadoop.mapred.MapTask

「大数据干货」基于Hadoop的大数据平台实施——整体架构设计

女生的网名这么多〃 提交于 2020-01-31 15:40:31
大数据的热度在持续的升温,继云计算之后大数据成为又一大众所追捧的新星。我们暂不去讨论大数据到底是否适用于您的公司或组织,至少在互联网上已经被吹嘘成无所不能的超级战舰。好像一夜之间我们就从互联网时代跳跃进了大数据时代!关于到底什么是大数据,说真的,到目前为止就和云计算一样,让我总觉得像是在看电影《云图》——云里雾里的感觉。或许那些正在向你推销大数据产品的公司会对您描绘一幅乌托邦似的美丽画面,但是您至少要保持清醒的头脑,认真仔细的慎问一下自己,我们公司真的需要大数据吗? 做为一家第三方支付公司,数据的确是公司最最重要的核心资产。由于公司成立不久,随着业务的迅速发展,交易数据呈几何级增加,随之而来的是系统的不堪重负。业务部门、领导、甚至是集团老总整天嚷嚷的要报表、要分析、要提升竞争力。而研发部门能做的唯一事情就是执行一条一条复杂到自己都难以想象的SQL语句,紧接着系统开始罢工,内存溢出,宕机........简直就是噩梦。OMG!please release me!!! 其实数据部门的压力可以说是常人难以想象的,为了把所有离散的数据汇总成有价值的报告,可能会需要几个星期的时间或是更长。这显然和业务部门要求的快速响应理念是格格不入的。俗话说,工欲善其事,必先利其器。我们也该鸟枪换炮了......。 网上有一大堆文章描述着大数据的种种好处,也有一大群人不厌其烦的说着自己对大数据的种种体验

大数据学习之MapReduce核心(Shuffle洗牌)12

我们两清 提交于 2020-01-31 04:49:05
先来个原理图压压惊: 温馨提示:如果看不清这个图,可以下载下来,在自己电脑上可以放大。      或者直接放大浏览器。快捷键Ctrl+鼠标滑轮上即可放大。想恢复原来浏览器的默认大小,快键键:Ctrl+数字0 一:概述shuffle   Shuffle是mapreduce的核心,链接map与reduce的中间过程。   Mapp负责过滤分发,而reduce则是归并整理,从mapp输出到reduce的输入的这个过程称为shuffle过程。 二:map端的shuffle  1.map结果的输出   map的处理结果首先存放在一个环形的缓冲区。   这个缓冲区的内存是100M,是map存放结果的地方。如果数据量较大,超过了一定的量(默认80M),将会发生溢写过程。   在mapred-site.xml中设置内存的大小     <property>       <name>mapreduce.task.io.sort.mb</name>       <value>100</value>     </property>   在mapred-site.xml中设置内存溢写的阈值       <property>       <name>mapreduce.task.io.sort.spill.percent</name>       <value>0.8</value>     <

mapreduce shuffle 和sort 详解

拈花ヽ惹草 提交于 2020-01-31 03:58:51
MapReduce 框架的核心步骤主要分两部分:Map 和Reduce。当你向 MapReduce 框架提交一个计算作业时,它会首先把计算作业拆分成若干个Map 任务,然后分配到不同的节点上去执行,每一个Map 任务处理输入数据中的一部分,当Map 任务完成后,它会生成一些中间文件,这些中间文件将会作为Reduce 任务的输入数据。Reduce 任务的主要目标就是把前面若干个Map 的输出汇总到一起并输出。 本文的重点是剖析 MapReduce 的核心过程—— Shuffle 和 Sort 。在本文中, Shuffle 是指从Map 产生输出开始,包括系统执行排序以及传送Map 输出到Reducer 作为输入的过程。在这里我们将去探究 Shuffle 是如何工作的,因为对基础的理解有助于对 MapReduce 程序进行调优。 首先从Map 端开始分析。 当Map 开始产生输出时,它并不是简单的把数据写到磁盘,因为频繁的磁盘操作会导致性能严重下降。它的处理过程更复杂,数据首先是写到内存中的一个缓冲区,并做了一些预排序,以提升效率。 每个Map 任务都有一个用来写入输出数据的循环内存缓冲区。这个缓冲区默认大小是100MB,可以通过 io.sort.mb 属性来设置具体大小。当缓冲区中的数据量达到一个特定阀值( io.sort.mb * io.sort.spill.percent ,其中

【MapReduce】二、MapReduce编程模型

隐身守侯 提交于 2020-01-30 17:59:03
  通过前面的实例,可以基本了解MapReduce对于少量输入数据是如何工作的,但是MapReduce主要用于面向大规模数据集的并行计算。所以,还需要重点了解MapReduce的并行编程模型和运行机制。   我们知道, MapReduce计算模型主要由三个阶段构成:Map、shuffle、Reduce 。Map和Reduce操作需要我们自己定义相应Map类和Reduce类。而 shuffle则是系统自动帮我们实现的,是MapReduce的“心脏”,是奇迹发生的地方。 是其主要流程基本如下图所示: 1、数据的输入   首先,对于MapReduce所要处理的数据,应当存储在分布式文件系统(如HDFS)中,通过使用Hadoop资源管理系统YARN,将MapReduce计算转移到存储有部分数据的机器上。   对于输入数据,首先要对其进行输入分片,Hadoop为 每个输入分片构建一个map任务 ,在该任务中调用map函数对分片中的每条数据记录进行处理。处理每个分片的时间小于处理整个数据所花的时间,因此, 只要合理分片,整个处理过程就能获得很好的负载均衡 。   而关于合理分片,我们不难想到:如果分片数据太大,那么处理所花的时间比较长,整体性能提升不多;反之,如果分片数据切分的太小,那么管理分片的时间和构建map任务的时间又会加大。因此分片要合理,一般情况下,