- 博客(23)
- 收藏
- 关注
原创 Hadoop MapReduce工作流程图示与详解
1)Map阶段图示:2)Reduce阶段图示:3)Shuffle过程:Shuffle过程只是从map第7步开始到reduce第16步结束,具体Shuffle过程详解,如下:(1)MapTask收集我们的map()方法输出的kv对,放到内存缓冲区中(2)从内存缓冲区不断溢出本地磁盘文件,可能会溢出多个文件(3)多个溢出文件会被合并成大的溢出文件(4)在溢出过程及合并的过程中,都要调用Partitioner进行分区和针对key进行排序(5)ReduceTask根据自..
2020-10-14 02:10:00
1097
原创 Hadoop Mapreduce CombineTextInputFormat切片机制
CombineTextInputFormat切片机制1)TextInputFormat切片弊端:框架默认的TextInputFormat切片机制是对任务按文件规划切片,不管文件多小,都会是一个单独的切片,都会交给一个MapTask,这样如果有大量小文件,就会产生大量的MapTask,处理效率极其低下。2)CombineTextInputFormat应用场景:CombineTextInputFormat用于小文件过多的场景,它可以将多个小文件从逻辑上规划到一个切片中,这样,多个小文件就.
2020-10-13 22:44:02
166
原创 Hadoop HDFS DataNode 工作机制
图示:文字:(1)一个数据块在DataNode上以文件形式存储在磁盘上,包括两个文件,一个是数据本身,一个是元数据包括数据块的长度,块数据的校验和,以及时间戳。(2)DataNode启动后向NameNode注册,通过后,周期性(1小时)的向NameNode上报所有的块信息。(3)心跳是每3秒一次,心跳返回结果带有NameNode给该DataNode的命令如复制块数据到另一台机器,或删除某个数据块。如果超过10分钟没有收到某个DataNode的心跳,则认为该节点不可用。(4)集群..
2020-10-13 22:17:47
156
原创 Mapreduce Job提交流程源码和切片源码详解
1)Job提交流程源码详解:图示:代码:waitForCompletion()submit();// 1建立连接 connect(); // 1)创建提交Job的代理 new Cluster(getConfiguration()); // (1)判断是本地yarn还是远程 initialize(jobTrackAddr, conf); // 2 提交jobsubmitter.submitJobInternal(Job.this, cluster) .
2020-10-13 22:17:19
156
原创 HDFS SecondaryNameNode CheckPoint流程示意图
为什么需要CheckPoint?NN和2NN工作机制:思考:NameNode中的元数据是存储在哪里的?首先,我们做个假设,如果存储在NameNode节点的磁盘中,因为经常需要进行随机访问,还有响应客户请求,必然是效率过低。因此,元数据需要存放在内存中。但如果只存在内存中,一旦断电,元数据丢失,整个集群就无法工作了。因此产生在磁盘中备份元数据的FsImage。这样又会带来新的问题,当在内存中的元数据更新时,如果同时更新FsImage,就会导致效率过低,但如果不更新,就会发生一致性问题,一旦N
2020-10-13 20:38:20
258
原创 Hadoop HDFS 读数据详细流程图示
图示:文字:(1)客户端通过Distributed FileSystem向NameNode请求下载文件,NameNode通过查询元数据,找到文件块所在的DataNode地址。(2)挑选一台DataNode(就近原则,然后随机)服务器,请求读取数据。(3)DataNode开始传输数据给客户端(从磁盘里面读取数据输入流,以Packet为单位来做校验)。(4)客户端以Packet为单位接收,先在本地缓存,然后写入目标文件。...
2020-10-13 19:44:40
168
原创 Hadoop HDFS 写数据详细流程图示
图示:文字:(1)客户端通过Distributed FileSystem模块向NameNode请求上传文件,NameNode检查目标文件是否已存在,父目录是否存在。(2)NameNode返回是否可以上传。(3)客户端请求第一个 Block上传到哪几个DataNode服务器上。(4)NameNode返回3个DataNode节点,分别为dn1、dn2、dn3。(5)客户端通过FSDataOutputStream模块请求dn1上传数据,dn1收到请求会继续调用dn2,然后dn2调..
2020-10-13 19:31:22
306
原创 Hadoop HDFS小文件优化方法
HDFS小文件弊端:HDFS上每个文件都要在NameNode上建立一个索引,这个索引的大小约为150byte,这样当小文件比较多的时候,就会产生很多的索引文件,一方面会大量占用NameNode的内存空间,另一方面就是索引文件过大使得索引速度变慢。优化方式概览:在数据采集的时候,就将小文件或小批数据合成大文件再上传HDFS。 在业务处理之前,在HDFS上使用MapReduce程序对小文件进行合并。 在MapReduce处理时,可采用CombineTextInputFormat提高效率。
2020-10-11 16:26:20
149
原创 Hadoop MapReduce在实际场景中的优化
一、MapReduce跑的慢的原因MapReduce程序效率瓶颈:1. 计算机性能cpu、内存、磁盘健康、网络2. I/O操作优化数据倾斜 Map和Reduce数设置不合理 Map运行时间太长,导致Reduce等待太久 小文件过多 大量的不可分块的超大文件 Spill次数过多 Merge次数过多二、MapReduce优化方法MapReduce优化方法主要从六个方面考虑:数据输入 Map阶段 Reduce阶段 IO传输 数据倾斜问题 常用的调优参
2020-10-11 15:52:59
215
原创 Mac VMware Fusion(12.0)中设置NAT模式并配置静态IP(CentOS7.5为例)
背景介绍:MacOS版本:10.15VMWare版本:专业版 12.0.01. 为VMware Fusion新建NAT网络:VMware Fusion>偏好设置>网络>➕>☑️允许该网络上的虚拟机连接到外部网络(NAT)》手动配置子网ip,如:192.168.8.0子网掩码不变255.255.255.02. mac主机上检查vnet配置cat /Library/Preferences/VMware\ Fusion/networking会...
2020-10-10 21:30:17
2138
5
原创 hadoop mapreduce Shuffle 过程详解
map 阶段处理的数据如何传递给 reduce 阶段,是 MapReduce 框架中最关键的一个流程,这个流程就叫 shuffleshuffle: 洗牌、发牌 ——(核心机制:数据分区,排序,分组,规约,合并等过程)shuffle 是 Mapreduce 的核心,它分布在 Mapreduce 的 map 阶段和 reduce 阶段。一般把从 Map 产生输出开始到 Reduce 取得数据作为输入之前的过程称作 shuffle。Collect阶段:将MapTask的结果输出到默认大小为1...
2020-09-25 16:01:05
385
原创 ReduceTask 工作机制和 ReduceTask 并行度
Reduce 大致分为 copy、sort、reduce 三个阶段,重点在前两个阶段。copy 阶段包含一 个 eventFetcher 来获取已完成的 map 列表,由 Fetcher 线程去 copy 数据,在此过程中 会启动两个 merge 线程,分别为 inMemoryMerger 和 onDiskMerger,分别将内存中的 数据 merge 到磁盘和将磁盘中的数据进行 merge。待数据 copy 完成之后,copy 阶段就 完成了,开始进行 sort 阶段,sort 阶段主要是执行 fin..
2020-09-25 15:46:35
140
原创 MapTask运行过程与原理详解
整个Map阶段流程大体如上图所示。简单概述:inputFile通过split被逻辑切分为多个split文件,通过Record按行读取内容给 map(用户自己实现的)进行处理,数据被map处理结束之后交给OutputCollector收集 器,对其结果key进行分区(默认使用hash分区),然后写入buffer,每个map task都有 一个内存缓冲区,存储着map的输出结果,当缓冲区快满的时候需要将缓冲区的数据以一 个临时文件的方式存放到磁盘,当整个map task结束后再对磁盘中这个map tas
2020-09-25 15:08:07
896
原创 HADOOP浅析
Hadoop 核心介绍1. HDFSHDFS(Hadoop Distributed File System) 是一个 Apache Software Foundation 项目, 是 Apache Hadoop 项目的一个子项目. Hadoop 非常适于存储大型数据 (比如 TB 和 PB), 其就是使用 HDFS 作为存储系统. HDFS 使用多台计算机存储文件, 并且提供统一的访问接口, 像是访问一个普通文件系统一样使用分布式文件系统. HDFS 对数据文件的访问通过流的方式进行处理, 这意味.
2020-09-19 19:49:42
149
原创 CentOS7使用yum安装mysql5.7
1 yum -y install wget2wget -i -c http://dev.mysql.com/get/mysql57-community-release-el7-10.noarch.rpm3yum -y install mysql57-community-release-el7-10.noarch.rpm4 yum -y install mysql-community-server5 service mysqld start6 netstat -nltp | gre...
2020-09-16 18:13:31
84
原创 一个Java数据处理题目,并将结果使用JDBC输出到MySQL数据库
题目:这里有几天的数据,求 白天 9:00 - 18:00的top10 将每天的有效数据排序后存入数据库数据预览(下载链接在文末): time value 2020-08-01T20:16:33+08:00 126 2020-08-01T20:18:33+08:00 766 2020-08-01T20:20:33+08:00 95
2020-09-01 22:21:57
238
原创 并发修改异常(ConcurrentModificationException)的源码分析
引论:当我们对一个List集合用迭代器或增强for循环遍历同时对集合内容进行修改,并导致集合长度改变(add,remove),则会出现 ConcurrentModificationException异常,普通for循环时修改却不会报错,为什么?错误信息:Exception in thread "main" java.util.ConcurrentModificationException at java.util.ArrayList$Itr.checkForComodification...
2020-08-30 18:35:34
235
原创 HashCode集合保证元素唯一性的源码分析
相关源码://创建集合对象HashSet<String> hs = new HashSet<>();//添加元素hs.add("hello");hs.add("world");hs.add("java");//跟进add方法,其中调用了put方法public boolean add(E e) { return map.put(e, PRESENT)==null;}//跟进put方法,其中调用了hash方法和putVal方法public V pu
2020-08-11 19:43:22
230
原创 对JAVA中内部类(匿名内部类)访问的局部变量为何要用final修饰的讨论
前言:因为使用内部类而出现需要使用 final 修饰符主要的有两个地方:在内部类的方法使用到方法中定义的局部变量,则该局部变量需要添加 final 修饰符 在内部类的方法形参使用到外部传过来的变量,则形参需要添加 final 修饰符其实这两种情况本质是一样的,即内部类方法若想使用外部方法中的变量,此变量必须被final修饰,如下图所示错误信息对于此种现象,网上的主流解释:当我们创建匿名内部类的那个方法调用运行完毕之后,因为局部变量的生命周期和方法的生命周期是一样的,当方法弹栈.
2020-08-08 18:38:21
597
原创 Java中关于if语句后不加大括号时条件作用域和无法声明问题的探讨
前言:if语句如果不加花括号只会执行if语句下方的第一条语句,在此做三点探讨:不加花括号时if条件作用域是第一条语句,这个一条指的是一行还是第一个分号? 不加花括号时if条件后为何规定不能写声明语句? 第一个问题探讨:观察以下代码:int a = 0;int b = 0;if(false) a = 1;b=1;System.out.println("a:"+a);System.out.println("b:"+b);//输出为a:0b:1结论:不..
2020-08-07 20:04:45
3906
原创 对i = i ++ 语句执行过程中 i 值变化的尝试性解答
对i = i ++执行过程中 i 值变化的尝试性解答引题:观察以下代码以及运行结果:int i = 1;i = i ++;System.out.println(i);//输出为1这个过程中运算的执行顺序是怎样的?i 经过了几个状态的变化?分别是什么?我们借助 Java bytecode 来观察代码执行过程中底层的运算过程.辅助工具:Java bytecode(Java字节码_维基百科)(Java_bytecode_instruc...
2020-07-27 20:33:37
395
原创 由位移运算符所想到的三个有趣结论
此文章试图解决三个问题:对int类型数据运用位移运算符时,位移距离有何关系时会得到同一结果 对int类型数据类型运用位移运算符位移与乘以2除以2位移的区别 对int类型数据乘以因子含有「2」的数字多少次会归零化的问题第一个问题:对int类型数据运用位移运算符时,位移距离有何关系时会得到同一结果?引题://位移部分int a = 8;int b = 8;a = a << 7;b = b << 39; int c = 1;int d = 1
2020-07-26 23:44:25
192
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人