mapreduce
Zj_hero_sword
这个作者很懒,什么都没留下…
展开
-
MapReduce实战案例6 自定义InputFormat
1.背景在企业开发中,hadoop框架自带的InputFormat不能满足所有的应用场景,需要自定义InputFormat来解决实际问题2.需求将多个小文件合并成一个SequenceFile文件(SequenceFile文件是Hadoop用来存储二进制形式的key-value对的文件格式),SequenceFile里面存储着多个文件,存储的形式为文件路径+名称为key,文件内容为value。3.代码实现1.FileInputFormat的实现类package com.zj.practice.ma原创 2020-11-14 17:35:40 · 215 阅读 · 0 评论 -
MapReduce实战案例5 自定义OutputFormat
1.背景为了可以自定义输出文件的路径和格式,可以自定义OutputFormat2.需求过滤输入的log日志,包含jinghang的网站输出到e:/jinghang.log,不包含jinghang的网站输出到e:/other.log。3.代码实现1.mapper端package com.zj.practice.mapreduce05.user_defined_OutputFormat;import org.apache.hadoop.io.LongWritable;import org.ap原创 2020-11-14 17:12:12 · 120 阅读 · 0 评论 -
MapReduce实战案例4 分区
1.背景在环形缓冲区向磁盘溢写到磁盘的过程中,是按照系统默认的分区计算公式进行计算,可以自定义指定的字段,按照一定的规则,将<key,value>键值对输出到分区中。2.默认计算公式(key.hashCode() & Integer.MAX_VALUE) % numReduceTasks3.需求将手机号输出到不同文件中4.实现步骤自定义类继承Partitioner,重写getPartitioner方法,返回的是分区号,符合条件的进入相同分区在driver类中,手动设置自原创 2020-11-14 16:59:26 · 372 阅读 · 0 评论 -
MapReduce实战案例3 分组
1.背景reduce处理的数据,是根据key值进行分组,有时候,需要根据对象的某个字段进行分组,他们同时进入reduce端进行处理2.自定义分组步骤自定义类继承WritableComparator重写compare()方法创建一个构造将比较对象的类传给父类protected OrderGroupingComparator() { super(OrderBean.class, true);}原因分析源码:protected WritableComparator(Class<原创 2020-11-14 16:22:32 · 314 阅读 · 0 评论 -
MapReduce实战案例2 mapjoin
1.使用场景 适用于一张表十分小、一张表很大的场景。2.优点 思考:在Reduce端处理过多的表,非常容易产生数据倾斜。怎么办? 在Map端缓存多张表,提前处理业务逻辑,这样增加Map端业务,减少Reduce端数据的压力,尽可能的减少数据倾斜。3.具体步骤在Mapper的setup阶段,将文件读取到缓存集合中。在驱动函数中加载缓存。4.需求表4-4 订单数据表t_orderidpidamount100101110020221003原创 2020-11-14 15:55:24 · 147 阅读 · 0 评论 -
MapReduce实战案例1
问题描述 班级,姓名,是否出勤(0:未出勤;1:出勤),是否迟到(0:未迟到,1:迟到),每月每人总的考勤统计为4天 现有class20、class21、class22、三个班级的月度考勤主要涵盖学生信息(学生的班级、姓名、是否旷课、是否迟到、考勤日期等) 1.统计出每个同学月度的出勤率(出勤总天数/(未出勤天数+出勤天数)),旷课总天数、出勤总天数、根据出勤率排序,倒叙排列(完成得85) 输出数据格式如下 班级 姓名 出勤率 出勤总天数 未出勤天数原创 2020-11-14 15:26:59 · 381 阅读 · 0 评论