Hadoop案例实战
文章平均质量分 86
Hadoop相关算法实战,详细剖析相关算法。
lzm1340458776
这个作者很懒,什么都没留下…
展开
-
MapReduce排序
一:背景数据排序是许多实际任务执行时需要完成的第一项工作,比如给销售额进行排名、求top N等操作都需要用到排序,使用MapReduce对数据进行简单排序思路是非常简单的。因为MapReduce本身就是支持排序的,MapReduce默认是对Key进行排序,我们可以将要排序的数据作为key进行输出就自动完成排序咯。二:技术实现#需求:现有如下数据,按从小到大进行排列123原创 2015-04-10 13:34:29 · 2285 阅读 · 0 评论 -
MapReduce表连接操作之Reduce端join
一:背景Reduce端连接比Map端连接更为普遍,因为输入的数据不需要特定的结构,但是效率比较低,因为所有数据都必须经过Shuffle过程。二:技术实现基本思路(1):Map端读取所有的文件,并在输出的内容里加上标示,代表数据是从哪个文件里来的。(2):在reduce处理函数中,按照标识对数据进行处理。(3):然后根据Keyde的join来求出结果直接输出。转载 2015-01-21 17:58:22 · 6615 阅读 · 2 评论 -
MapReduce表连接之半连接SemiJoin
一:背景SemiJoin,一般称为半连接,其原理是在Map端过滤掉一些不需要join的数据,从而大大减少了reduce和Shuffle的时间,因为我们知道,如果仅仅使用Reduce端连接,那么如果一份数据,存在大量的无效数据,而这些数据在join中并不需要,但是因为没有做过预处理,所以这些数据直到真正执行reduce函数时,才被定义为无效数据,但是这个时候已经执行过了Shuffle、merge转载 2015-01-22 11:55:23 · 5472 阅读 · 1 评论 -
MapReduce二次排序
本文主要介绍下二次排序的实现方式我们知道MapReduce是按照key来进行排序的,那么如果有个需求就是先按照第一个字段排序,在第一个字段相等的情况下,按照第二个字段排序,这就是传说中的二次排序。下面就具体说一下二次排序的实现方式主要就是4点1.自定义一个Key为什么要自定义一个Key,我们知道MapReduce中排序就是按照Key来排序的,我们转载 2015-01-19 17:23:44 · 3239 阅读 · 0 评论 -
Hadoop多文件输出之MultipleOutputFormat和MultipleOutputs
直到目前,我们看到的所有MapReduce作业都输出一组文件。但是,在一些场合下,经常要求我们输出多组文件或者把一个数据集分为多个数据集更为方便;比如将一个log里面属于不同业务线的日志分开来输出,并且交给相关的业务线。用过旧API的人应该知道,旧API中有org.apache.hadoop.mapred.lib.MultipleOutputFormat和org.apache.hadoop.m转载 2015-01-26 12:24:49 · 2727 阅读 · 1 评论 -
链式MapReduce:ChainMapper和ChainReducer
一:背景Hadoop2.0开始MapReduce作业支持链式处理,类似于富士康生产苹果手机的流水线,每一个阶段都有特定的任务要处理,比如提供原配件——>组装——打印出厂日期,等等。通过这样进一步的分工,从而提高了生成效率,我们Hadoop中的链式MapReduce也是如此,这些Mapper可以像水流一样,一级一级向后处理,有点类似于Linux的管道。前一个Mapper的输出结果直接可以作为下一原创 2015-04-10 10:47:44 · 3096 阅读 · 1 评论 -
Hadoop小文件问题及解决方案
1.概述小文件是指文件size小于HDFS上block大小的文件。这样的文件会给hadoop的扩展性和性能带来严重问题。首先,在HDFS中,任何block,文件或者目录在内存中均以对象的形式存储,每个对象约占150byte,如果有1千万个小文件,每个文件占用一个block,则NameNode大约需要2G空间。如果存储一亿个文件,则NameNode需要20G空间。这样NameNode内存容量严重原创 2015-02-02 17:03:04 · 3436 阅读 · 0 评论 -
MapReduce求平均值
一:背景求平均数是MapReduce比较常见的算法,求平均数的算法也比较简单,一种思路是Map端读取数据,Reduce端汇总并且统计记录数,然后作商即可。二:技术实现#需求:现有成绩单如下,求出每个同学的平均成绩小民 语文 80小民 数学 98小民 英语 89小芳 语文 88小芳 数学 99小芳 英语 90实现代码:public class Averag原创 2015-01-28 11:36:24 · 10833 阅读 · 2 评论 -
MapReduce TopK问题实际应用
一:背景TopK问题应该是海量数据处理中应用最广泛的了,比如在海量日志数据处理中,对数据清洗完成之后统计某日访问网站次数最多的前K个IP。这个问题的实现方式并不难,我们完全可以利用MapReduce的Shuffle过程实现排序,然后在Reduce端进行简单的个数判断输出即可。这里还涉及到二次排序,不懂的同学可以参考我之前的文章。二:技术实现#我们先来看看一条Ngnix服务器的日原创 2015-01-28 11:51:04 · 4258 阅读 · 4 评论 -
MapReduce程序打成jar包在远程服务器运行
一:背景有时候,我们不想再程序中显示的指定输入路径和输出路径,因为那样不太灵活,不利于扩展,Hadoop提供了将程序打成jar包发到集群上通过命令行参数指定输入输出路径的方式运行程序。二:技术实现(1):主类继承Configured类还要实现Tool接口。(2):将我们以前写的设置各种参数的代码写在run()方法中(实现接口必须要实现run方法)。(3):还有一句很关键原创 2015-01-17 20:55:27 · 4588 阅读 · 0 评论 -
Hadoop自定义分区Partitioner
一:背景为了使得MapReduce计算后的结果显示更加人性化,Hadoop提供了分区的功能,可以使得MapReduce计算结果输出到不同的分区中,方便查看。Hadoop提供的Partitioner组件可以让Map对Key进行分区,从而可以根据不同key来分发到不同的reduce中去处理,我们可以自定义key的分发规则,如数据文件包含不同的省份,而输出的要求是每个省份对应一个文件。二原创 2015-01-17 22:03:17 · 3579 阅读 · 0 评论 -
MapReduce排序之 二次排序
一:背景Hadoop中虽然有自动排序和分组,由于自带的排序是按照Key进行排序的,有些时候,我们希望同时对Key和Value进行排序。自带的排序功能就无法满足我们了,还好Hadoop提供了一些组件可以让开发人员进行二次排序。二:技术实现我们先来看案例需求#需求1: 首先按照第一列数字升序排列,当第一列数字相同时,第二列数字也升序排列(列之间用制表符\t隔开)3 33原创 2015-01-18 20:25:54 · 1960 阅读 · 0 评论 -
MapReduce表连接操作之Map端join
一:背景MapReduce提供了表连接操作其中包括Map端join、Reduce端join还有半连接,现在我们要讨论的是Map端join,Map端join是指数据到达map处理函数之前进行合并的,效率要远远高于Reduce端join,因为Reduce端join是把所有的数据都经过Shuffle,非常消耗资源。二:技术实现基本思路:(1):需要join的两个文件,一个存储在H原创 2015-01-21 17:26:59 · 6807 阅读 · 3 评论 -
MapReduce自定义RecordReader
一:背景RecordReader表示以怎样的方式从分片中读取一条记录,每读取一条记录都会调用RecordReader类,系统默认的RecordReader是LineRecordReader,它是TextInputFormat对应的RecordReader;而SequenceFileInputFormat对应的RecordReader是SequenceFileRecordReader。LineR原创 2015-01-23 12:38:28 · 6700 阅读 · 0 评论 -
MapReduce多个作业协调处理
一:背景当数据来源不同的时候,比如用户表在MYSQL数据库中,而销售表在HDFS中,我们可以启动多个作业来依次处理这些数据源。二:技术实现#需求#用户表user在MYSQL数据库中,数据如下:1 liaozhongmin2 lavimer3 liaozemin#销售表user_data在HDFS中,数据如下:1 122 282 363 88#我们原创 2015-01-25 14:55:18 · 1504 阅读 · 0 评论 -
MapReduce求最大值
一:背景求最值是MapReduce的常见算法,应用也很广泛,比如说求出某大型销售网站各个站点销售量最大的商品,人口最多的城市等等,MapReduce求最大值的关键是要实现cleanUp()方法。二:技术实现#需求 有两个文件max和max2,现要求合并两个并找出最大值。#max文件数据如下:10295039889929100389#max2文件数据如原创 2015-01-28 11:22:50 · 11017 阅读 · 2 评论 -
MapReduce去重
一:背景很多数据源中的数据都是含有大量重复的,为此我们需要将重复的数据去掉,这也称为数据的清洗,MapReduce从Map端到Reduce端的Shuffle过程天生就有去重的功能,但是这是对输出的Key作为参照进行去重的。所以我们可以将Map端读入Value作为Key输出,就可以很方便的实现去重了。二:技术实现#需求 有两个文件file0和file1。将两个文件中的内容合并去重原创 2015-01-28 11:03:26 · 4960 阅读 · 2 评论 -
Hadoop自定义计数器Counter
一:背景Hadoop计数器的主要价值在于可以让开发人员以全局的视角来审查程序的运行情况,及时作出错误诊断并进行相应的处理,Hadoop内置了很多计数器,这些计数器大致可以分为三组:MapReduce相关的计数器、文件系统相关的计数器以及作业调度相关的计数器。我们可以通过Eclipse控制台的输出或者是web页面http://master:50030进行查看。二:技术实现除了原创 2015-01-16 14:19:07 · 7766 阅读 · 0 评论