![](https://img-blog.csdnimg.cn/20201014180756918.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Hadoop
文章平均质量分 57
秋名山车神不开车
这个作者很懒,什么都没留下…
展开
-
MapReduce之Map Join
如果在Reduce 端处理过多的表,容易出现数据倾斜,通常我们会在Map端缓存起来,提前把处理业务逻辑,减少Reduce端数据的压力,减少数据倾斜。Map Join 适用于一张表十分小、一张表很大的场景。Mapper的setup(初始化)的时候缓存到集合中,job.addCacheFile(new URI("file:///D:/input/tablecache/pd.txt"));代码如下:public class MapJoinMapper extends Mapper.原创 2021-04-03 17:24:32 · 232 阅读 · 0 评论 -
MapReduce之FileInputFormat切片机制
1.切片机制(1)简单地按照文件的内容长度进行切片(2)切片大小,默认等于Block(128M)大小(3)切片时不考虑数据集整体,而是逐个针对每一个文件单独切片默认切片大小等于块大小源码中有计算公式computeSplitSize(Math.max(minSize,Math.min(maxSize,blocksize)))=blocksize=128Mmapreduce.input.fileinputformat.split.minsize=1 默认值为1mapre..原创 2021-04-03 15:43:12 · 532 阅读 · 1 评论 -
Mapreduce之WritableComparable实例
MapTask和ReductTask都会按照key进行排序,该操作属于Hadoop默认的行为。任何应用程序中的数据都会被排序,强制的,而不管逻辑上是否需要。默认排序是按照字典顺序排序,方法的是快速排序1.创建FlowBean 实现WritableComparable,重写compareTo接口import org.apache.hadoop.io.WritableComparable;import java.io.DataInput;import java.io.DataOu.原创 2021-03-30 11:25:54 · 236 阅读 · 0 评论 -
MapReduce的常见输入格式之CombineTextInputFormat
CombineTextInputFormat作用: 改变了传统的切片方式,将多个小文件,划分到一个切片中,适合小文件过多的场景。假设有4个文件a.text,b.text,c.text,d.text .需求:将上面4个文件合并成一个切片统一处理创建WordCountMapper/** * KEYIN, map阶段输入的key的类型:LongWritable * VALUEIN,map阶段输入value类型:Text * KEYOUT,map阶段输出的Key类型:Tex..原创 2021-03-30 10:44:00 · 579 阅读 · 0 评论 -
使用MapReduce运行自定义bean案例
文件内容如下手机号、IP、访问网站、上行流量、下行流量、状态码需求:需要统计每个手机号访问网站的上行流量、下行流量以及它们的总和依赖包<dependency> <groupId>org.apache.hadoop</groupId> <artifactId>hadoop-client</artifactId> <version>3.1.3</version></depe原创 2021-03-29 18:58:11 · 238 阅读 · 0 评论 -
Hadoop之Partitioner分区
1、HashPartitioner(Hadoop自带的默认分区)HashPartitioner源码如下:public class HashPartitioner<K2, V2> implements Partitioner<K2, V2> { public void configure(JobConf job) {} /** Use {@link Object#hashCode()} to partition. */ public int getPartit...原创 2021-03-30 08:52:24 · 537 阅读 · 2 评论 -
MapReduce的常见输入格式之NlineInputFormat
有两个文件log ,log副本切片策略: 读取配置文件中的参数mapreduce.input.lineinputformat.linespermap,默认为1,以文件为单位,切片每此参数行作为1片! 既然有参数,那就可以修改,设置为每N行切为一片: Configuration conf = new Configuration();conf.set("mapreduce.input.lineinputformat.linespermap", "2") RecordReader:L.原创 2021-03-29 19:15:30 · 261 阅读 · 0 评论 -
HDFS块(block)、副本数(replication)的概念
HDFS的文件在物理上是分块储存(Block)默认大小是128M,老版本64M。不论对磁盘的文件进行读还是写,都需要先进行寻址!最佳传输损耗理论: 寻址时间占总传输时间的1%时,本次传输的损耗最小,为最佳性价比传输!目前硬件的发展条件,普通磁盘写的速率大概为100M/S, 寻址时间一般为10ms!10ms / 1% = 1s1s * 100M/S=100M块在传输时,每64K还需要校验一次,因此块大小,必须为2的n次方,最接近100M的就是128M!如果公司使用的是固态硬盘.原创 2021-03-29 15:35:14 · 1475 阅读 · 0 评论 -
MapReduce – Mapper
//// Source code recreated from a .class file by IntelliJ IDEA// (powered by FernFlower decompiler)//package org.apache.hadoop.mapreduce;import java.io.IOException;import org.apache.hadoop.classification.InterfaceAudience.Public;import org.apach..原创 2021-03-29 15:07:56 · 421 阅读 · 0 评论 -
使用MapReduce运行单词统计案例
1.Map阶段的核心处理逻辑需要编写在Mapper中2.Reduce阶段的核心处理逻辑需要编写在Reducer中3.将编写的Mapper和Reducer进行组合,组合成一个Job4.对Job进行设置,设置后运行准备数据文件需求:统计文件中单词出现的次数1.创建WordCountMapper类,继承Mapper,重写map 方法Mapper<LongWritable, Text, Text, IntWritable> 两两一组,输入,输出 LongWritab...原创 2021-03-29 16:24:45 · 582 阅读 · 0 评论