分区Partitioner 分区操作是shuffle操作中的一个重要过程,作用就是将map的结果按照规则分发到不同reduce中进行处理,从而按照分区得到多个输出结果。 Partitioner是partitioner的基类,如果需要定制partitioner也需要继承该类HashPartitioner是mapreduce的默认partitioner。 计算方法是:which reducer=(key.hashCode() & Integer.MAX_VALUE) % numReduceTasks 注:默认情况下,reduceTask数量为1 很多时候MR自带的分区规则并不能满足我们需求,为了实
2023-01-03 20:20:54 101KB c ce do
1
概念 MapReduce是hadoop分布式计算框架。 MapReduce意味着在计算过程中实际分为两大步,Map过程和Reduce过程。 下面以一个统计单词次数简单案例为例: 数据源 Map类 import java.io.IOException; import org.apache.hadoop.io.LongWritable; import org.apache.hadoop.io.Text; import org.apache.hadoop.mapreduce.Mapper; // 案例:统计每一个单词出现的次数 // KEYIN - 这一行的偏移量 --- // VALUEIN
2022-06-03 10:18:20 214KB c ce do
1
Combiner 就相当于map后多reduce几次。 排序 如果想将mapreduce结果排序,需将排序对象作为键值。 案例:将利润求和后按照顺序排序 数据源 profit.txt 编号 | 姓名 | 收入 | 支出 1 ls 2850 100 2 ls 3566 200 3 ls 4555 323 1 zs 19000 2000 2 zs 28599 3900 3 zs 34567 5000 1 ww 355 10 2 ww 555 222 3 ww 667 192 步骤:先算利润再求和最后排序 求和: 自定义类 实现WritableComparable接口,除了实现序列化/反序列化,还
2021-12-24 16:34:15 96KB c ce do
1
序列化/反序列化机制 当自定义一个类之后,如果想要产生的对象在hadoop中进行传输,那么需要 这个类实现Writable的接口进行序列化/反序列化 案例:统计每个人产生的总流量 数据源 自定义类序列化 import java.io.DataInput; import java.io.DataOutput; import java.io.IOException; import org.apache.hadoop.io.Writable; public class Flow implements Writable{ private String phone; private String
2021-12-22 13:36:04 39KB c ce do
1
前四节提供了几个小案例 下面详细介绍MapReduce中Map任务Reduce任务以及MapReduce的执行流程。 Map任务: 读取输入文件内容,解析成key,value对。对输入文件的每一行,解析成key,value对。每一个键值对调用一次map函数。 写自己的逻辑,对输入的key,value处理,转换成新的key,value输出。 对输出的key,value进行分区。 对相同分区的数据,按照key进行排序(默认按照字典排序)、分组。相同key的value放在一个集合中。 (可选)分组后对数据进行归约。 注意:MapReduce中,Mapper可以单独存在,但是Reducer不能存在。
2021-11-28 11:16:31 362KB c ce do
1
适合Hadoop中MapReduce的学习
2021-08-11 14:15:15 11.5MB Hadoop中MapReduce
1