段智华
智华专注于GenAI/LLM大模型技术的研究,参与了7本书籍的写作,拥有3项专利,10多项软著,以及4篇IEEE国际会议论文。参与Gavin大咖主编,北京航空航天大学出版社2024年5月最新出版的2本图书著作:《Transformer&ChatGpt解密:原理、源码及案例》、《Transformer& Rasa 解密 原理、 源码及案例》,共撰写1948篇原创博客文章,涵盖Transformer、GPT-4、ChatGPT、Llama2/3、Langchain、Mistral、Mixtral、Rasa、AI机器学习、Spark大数据等主题。博客文章的总阅读量为310万次。
展开
-
Master启动的源码详解
5.1.2 Master启动的源码详解 Spark中各个组件是通过脚本来启动部署的,下面以脚本为入口点开始分析Master的部署。每个组件对应提供了启动的脚本,同时也会提供停止的脚本,停止脚本比较简单,在此仅分析启动脚本。1. Master部署的启动脚本解析首先看下Master的启动脚本./sbin/start-master.sh,内容如下: 1. # 在脚本的执原创 2017-06-17 11:30:33 · 1363 阅读 · 0 评论 -
SparkShuffle调优原理和最佳实践
第10章 SparkShuffle调优原理和最佳实践1.1 Shuffle对性能消耗的原理详解 在分布式系统中,数据分布在不同的节点上,每一个节点计算一部份数据,如果不对各个节点上独立的部份进行汇聚的话,我们计算不到最终的结果。我们需要利用分布式来发挥Spark本身并行计算的能力,而后续又需要计算各节点上最终的结果,所以需要把数据汇聚集中,这就会导致Shuffle,这也是说为什么Sh原创 2017-06-08 05:27:50 · 1961 阅读 · 0 评论 -
第39课:Spark中的Broadcast和Accumulator机制解密
第39课:Spark中的Broadcast和Accumulator机制解密Spark的Broadcast和Accumulator很重要,在实际的企业级开发环境中一般会使用Broadcast和Accumulator。Broadcast和Accumulator和RDD是Spark中并列的三大基础数据结构。大家谈Spark的时候首先谈RDD,RDD是一个并行的数据,关注在jvm中怎么处理数据。很多时候可原创 2017-06-04 13:46:05 · 2893 阅读 · 0 评论 -
第39课:BlockManager解密进阶:BlockManager初始化和注册解密、BlockManagerMaster工作解密、BlockTransferService解密、本地数据读写解密、远程
第39课:BlockManager解密进阶:BlockManager初始化和注册解密、BlockManagerMaster工作解密、BlockTransferService解密、本地数据读写解密、远程数据读写解密BlockManager既可运行在Driver上,也可以运行在Executor上。在Driver上的BlockManager管理集群中Executor的所有的BlockManager,Bl翻译 2017-06-07 07:26:30 · 1282 阅读 · 0 评论 -
Spark 2.1.0新一代Tungsten 内存管理的模型及其实现类的解析
9.2.2内存管理的模型及其实现类的解析在2016年1月4号发布的 Spark 1.6中,提出了一个新的内存管理模型,即统一内存管理管理模型,对应在Spark 1.5 及之前的版本则使用静态的内存管理模型。关于新的统一内存管理模型,可以参考https://issues.apache.org/jira/secure/attachment/12765646/unified-memory-manage...原创 2017-06-30 07:32:23 · 1971 阅读 · 2 评论 -
第139课: Spark面试经典系列之数据倾斜解决之对于两个RDD数据量都很大且倾斜的Key特别多如何解决?
第139课: Spark面试经典系列之数据倾斜解决之对于两个RDD数据量都很大且倾斜的Key特别多如何解决?如果两个RDD的数据量都特别大而且倾斜的Key特别多如何解决:数据量特别大就无法把其中的一个RDD广播出去;如果倾斜的Key值特别多,就无法采用分而治之等方法。例如微信上有海量的数据、淘宝上有海量的数据,如果进行全网扫描就可能遇到这种情况,因为热点特别多,有成千上万个热点。原创 2017-07-10 21:22:47 · 1374 阅读 · 0 评论 -
Shuffle 与 Storage 模块间的交互
7.6 Shuffle 与 Storage 模块间的交互 在Spark中存储模块被抽象成Storage,顾名思义,Storage是存储的意思,代表着Spark中的数据存储系统,负责管理和实现数据块(Block)的存放。其中存取数据的最小单元是Block,数据由不同的Block组成,所有操作都是以Block为单位进行的。本质上讲RDD中的Partition和Storage中的Block是等价的原创 2017-06-22 06:22:45 · 787 阅读 · 0 评论 -
第43课: Spark 1.6 RPC内幕解密:运行机制、源码详解、Netty与Akka等
第43课: Spark 1.6 RPC内幕解密:运行机制、源码详解、Netty与Akka等Spark 1.6推出了以RpcEnv、RPCEndpoint、RPCEndpointRef为核心的新型架构下的RPC通信方式,就目前的实现而言,其底层依旧是Akka;Akka是基于Actor的分布式消息通信系统,而在Spark 1.6中封装了Akka,提供更高层的Rpc实现,目的是移除对Akka的依赖,为扩原创 2017-06-09 07:19:52 · 1705 阅读 · 0 评论 -
Spark面试经典系列之数据倾斜解决方案的“银弹”是什么? 本节我们对Spark数据倾斜解决方案进行回顾和总结
Spark面试经典系列之数据倾斜解决方案的“银弹”是什么? 本节我们对Spark数据倾斜解决方案进行回顾和总结:1、 数据倾斜运行的症状和危害。如果发行数据倾斜,往往发现作业任务运行特别缓慢,出现OOM内存溢出等现象。2、 如果两个RDD进行操作,其中1个RDD数据不是那么多,我们把这个RDD的数据以广播变量的形式包裹起来,广播给整个Cluster集群。这样就可以和另外一个RDD进行map原创 2017-07-11 21:19:18 · 890 阅读 · 0 评论 -
第42课: Spark Broadcast内幕解密:Broadcast运行机制彻底解密、Broadcast源码解析、Broadcast最佳实践
第42课: Spark Broadcast内幕解密:Broadcast运行机制彻底解密、Broadcast源码解析、Broadcast最佳实践Broadcast在机器学习、图计算、构建日常的各种算法中到处可见。 Broadcast就是将数据从一个节点发送到其它的节点上;例如Driver上有一张表,而Executor中的每个并行执行的Task(100万个Task)都要查询这张表,那我们通过Broa原创 2017-06-04 10:39:03 · 937 阅读 · 0 评论 -
第37课 : Task执行内幕与结果处理解密
第37课 : Task执行内幕与结果处理解密Task执行及结果处理原理流程图和源码解密: 在Standalone模式中,Driver中的CoarseGrainedSchedulerBackend给CoarseGrainedExecutorBackend发送launchTasks消息,CoarseGrainedExecutorBackend收到launchTasks消息以后会调用executor.原创 2017-06-03 07:21:18 · 782 阅读 · 0 评论 -
第9章 Spark 2.1.0新一代Tungsten优化引擎彻底解析
第9章 Spark 2.1.0新一代Tungsten优化引擎彻底解析 1.1 概述Spark作为一个一体化多元化的大数据处理通用平台,性能一直是其根本性的追求之一,Spark基于内存迭代(部分基于磁盘迭代)的模型极大的满足了人们对分布式系统处理性能的渴望,Spark是采用Scala+ Java语言编写的,所以运行在JVM平台。当然JVM是一个绝对伟大的平台,因为JVM让整个离散的主机原创 2017-06-29 06:06:34 · 2709 阅读 · 0 评论 -
第25课 Spark Hash Shuffle源码解读与剖析
第25课:14 Spark Hash Shuffle源码解读与剖析Spark 2.1x 现在的版本已经没有Hash Shuffle的方式,那为什么我们还要讲解HashShuffle源码的内容呢?原因有3点:1,在现在的实际生产环境下,很多人在用Spark1.5.x,实际在使用Hash Shuffle的方式。2,Hash Shuffle的方式是后续Sort Shuffle的基础。3,在实际生产环境下原创 2017-05-21 07:49:27 · 1314 阅读 · 0 评论 -
ExecutorBackend的异常处理
5.3.4 ExecutorBackend的异常处理 CoarseGrainedExecutorBackend在运行中出现异常,将调用exitExecutor方法进行处理,处理以后系统退出。exitExecutor这个函数可以由其他子类重载来处理,executor执行的退出方式不同。例如:当executor挂掉了,后台程序可能不会让父进程也挂掉。如果需通知Driver,Driver将清理原创 2017-06-17 20:40:14 · 2720 阅读 · 0 评论 -
第1章 对运行在YARN上的Spark进行性能调优
第1章 对运行在YARN上的Spark进行性能调优1.1 运行环境Jar包管理及数据本地性原理调优实践1.1.1运行环境Jar包管理及和数据本地性原理在YARN上运行Spark需要在Spark-env.sh或环境变量中配置HADOOP_CONF_DIR或YARN_CONF_DIR目录指向Hadoop的配置文件。Spark-default.conf中配置Spark.YARN.jars指向原创 2017-06-06 16:14:58 · 2032 阅读 · 0 评论 -
第38课: BlockManager架构原理、运行流程图和源码解密
第38课: BlockManager架构原理、运行流程图和源码解密BlockManager是管理整个Spark运行时数据的读写,包含数据存储本身,在数据存储的基础之上进行数据读写。由于Spark是分布式的,所有BlockManager也是分布式的,BlockManager本身相对而言是一个比较大的模块,Spark中有非常多的模块:调度模块、资源管理模块等等。BlockManager是另外一个非常原创 2017-06-06 07:32:50 · 1336 阅读 · 0 评论 -
第36课: TaskScheduler内幕天机解密:Spark shell案例运行日志详解、TaskScheduler和SchedulerBackend、FIFO与FAIR、Task运行时本地性算法
第36课: TaskScheduler内幕天机解密:Spark shell案例运行日志详解、TaskScheduler和SchedulerBackend、FIFO与FAIR、Task运行时本地性算法详解等TaskScheduler是Spark的底层调度器,底层调度器负责Task本身的调度运行的。 我们编写一个简单的测试代码,setMaster("local-cluster[1,原创 2017-06-01 07:25:26 · 995 阅读 · 0 评论 -
Driver到底是什么时候产生的
6.3 从Application提交的角度看重新审视Driver 6.3.1 Driver到底是什么时候产生的 在SparkContext实例化的时候通过createTaskScheduler来创建TaskSchedulerImpl和StandaloneSchedulerBackend。SparkContext.scala源码:1. class SparkContext(c原创 2017-06-18 21:15:18 · 875 阅读 · 0 评论 -
Executor到底是什么时候启动的?
6.4.1 Executor到底是什么时候启动的? 在SparkContext启动之后,StandaloneSchedulerBackend中会new出一个StandaloneAppClient,StandaloneAppClient中有一个名叫ClientEndPoint的内部类,在创建ClientEndpoint会传入Command来指定具体为当前应用程序启动的Executor进行的入口类的名原创 2017-06-18 21:16:10 · 1725 阅读 · 0 评论 -
Driver和Master交互原理解析,Driver消息循环体的产生
6.3.2 Driver和Master交互原理解析 Driver和Master进行交互,Master是一个消息循环体,本章节讲解Driver消息循环体的产生过程,Drvier消息循环体生成之后,就可以与Master互相通信。在Spark应用程序提交的时候,我们会提交一个spark-submit脚本,spark-submit脚本中直接运行了org.apache.spark.deploy.SparkS原创 2017-06-19 07:21:21 · 1245 阅读 · 0 评论 -
第40课: CacheManager彻底解密:CacheManager运行原理流程图和源码详解
第40课: CacheManager彻底解密:CacheManager运行原理流程图和源码详解CacheManager管理是缓存,而缓存可以是基于内存的缓存,也可以是基于磁盘的缓存。CacheManager需要通过BlockManager来操作数据。 Task发生计算的时候要调用RDD的compute进行计算。我们看一下MapPartitionsRDD的compute方法:Map原创 2017-06-11 21:53:02 · 1842 阅读 · 0 评论 -
数据倾斜解决方案之三:使用随机Key实现双重聚合
数据倾斜解决方案之三:使用随机Key实现双重聚合本节讲解使用随机Key实现双重聚合,首先讲解什么是随机Key双重聚合;接下来讲解使用随机Key实现双重聚合解决数据倾斜的适用场景、原理分析、案例实战以及使用随机Key实现双重聚合解决数据倾斜注意事项等内容。30.4.1 什么是随机Key双重聚合?随机Key双重聚合是指:Spark分布式计算对RDD调用reduceByKey各算子进行计算,使用对Key原创 2017-07-13 06:02:52 · 2471 阅读 · 3 评论 -
Spark Release 2.2.0 最新版本发布,Spark 2.2.0是Spark 2.x中第一个在生产环境可以使用的版本,对于Spark具有里程碑意义
第2章 Spark 2.X技术及原理 Apache官方网站于2017年7月11日发布了Spark Release 2.2.0版本, Apache Spark 2.2.0版本是Spark 2.x系列上的第三个版本。Spark 2.2.0是Spark 2.x中第一个在生产环境可以使用的版本,对于Spark具有里程碑意义。Spark 2.2.0版本中 Structured Streaming 的实验性标原创 2017-07-18 05:43:18 · 4401 阅读 · 1 评论 -
Spark 2.2.0 SQL的运行过程(源码解密)
1、 Spark SQL的运行过程接下来我们看一下Spark SQL的运行过程,Spark SQL 的运行架构如图 27- 2所示: 图 27- 2 SQL 的运行架构通过初步解析不同来源的数据变为UnresolvedLogical Plan(此过程会提取关键字,检查基本的语法,如果有问题下一步直接不能运行),进一步解析语法树生成原创 2017-08-02 21:40:04 · 2723 阅读 · 0 评论 -
Spark集群中Mapper端、Reducer端内存调优
第23章Spark集群中Mapper端、Reducer端内存调优本章主要讲解如下内容:l Spark集群中Mapper端内存调优最佳实践;l Spark集群中Reducer端内存调优最佳实践。22 23 23.1 Mapper端内存调优本节讲解Spark集群中Mapper端内存使用详解以及性能调优最佳实践。23.1.1 Spark集群中Mapper端内存使用详解Spark原创 2017-08-20 08:09:35 · 1802 阅读 · 0 评论 -
第2课:通过案例对SparkStreaming 透彻理解三板斧之二:解密SparkStreaming运行机制和架构
第2课:通过案例对SparkStreaming 透彻理解三板斧之二:解密SparkStreaming运行机制和架构解密Spark Streaming运行机制解密Spark Streaming架构 我们谈到技术界的寻龙点穴,每个领域都有自己的龙脉,Spark就是大数据的龙脉之所在,它的龙穴或者关键点就是Spark Streaming。上一节课我们采用了降维的方式,所谓降维就是把时间放大,将时间放长的原创 2017-08-23 07:14:37 · 623 阅读 · 0 评论 -
第4课: Spark Streaming的Exactly-One的事务处理和不重复输出彻底掌握
第4课: Spark Streaming的Exactly-One的事务处理和不重复输出彻底掌握根据家林大神课程编写!事务处理是至关重要的。事务处理例如:银行转账,A给B转账,B不可能多次收到A的转账;A转给B多次,而B只收到1次,这也不可能。事务处理:事务一定会被处理而且一定只会处理1次。在spark streaming,spark运行出错的时候不能保证输出的时候也是事务级别的,例如Task处理一原创 2017-08-30 21:28:45 · 645 阅读 · 0 评论 -
第14课:Spark Streaming源码解读之State管理之updateStateByKey和mapWithState解密
第14课:Spark Streaming源码解读之State管理之updateStateByKey和mapWithState解密本节课讲解Spark Streaming中一个非常重要的内容:状态管理。为了说明这个状态管理,我们拿两个具体的方法updateStateByKey和mapWithState来说明Spark Streaming到底如何实现状态管理的。整个Spark Streaming按照B原创 2017-09-17 07:37:12 · 573 阅读 · 0 评论 -
第15课:Spark Streaming源码解读之No Receivers彻底思考 本节课分享Spark Streaming源码解读之No Receivers彻底思考,企业级开发Spark Strea
第15课:Spark Streaming源码解读之No Receivers彻底思考本节课分享Spark Streaming源码解读之NoReceivers彻底思考,企业级开发Spark Streaming的程序越来越多的采用No Receiver的方式,No Receiver的方式有自己的优势,例如:更强的控制的自由度;语义一致性.....;Spark Streaming支持2种方式:一种是Rec原创 2017-09-10 08:01:28 · 676 阅读 · 0 评论 -
MongoDB单机版安装部署
MongoDB单机版安装部署1.下载MongoDB。root@master:/usr/local/setup_tools# curl -O http://downloads.mongodb.org/linux/mongodb-linux-x86_64-ubuntu1404-3.0.15.tgz % Total % Received % Xferd Average Speed...原创 2019-05-10 14:25:48 · 727 阅读 · 0 评论 -
27.1.1.3 Spark SQL 中ANTLR4的应用
27.1.1.3 Spark SQL 中ANTLR4的应用ANTLR是一个强大的解析器生成器,可用于读取,处理,执行或翻译结构化文本或二进制文件。它广泛应用于学术界和工业界,建立各种语言,工具和框架。例如:Twitter搜索使用ANTLR进行查询解析,每天有超过2亿次查询。Hive和Pig语言,Hadoop的数据仓库和分析系统都使用ANTLR。Lex Machina使用ANTLR从法律文本中提取信原创 2017-07-08 21:25:25 · 6204 阅读 · 0 评论 -
第51课: Spark中的新解析引擎Catalyst源码SQL最终转化为RDD具体实现
第51课: Spark中的新解析引擎Catalyst源码SQL最终转化为RDD具体实现基于DataSet的代码转换为RDD之前需要一个Action的操作,基于Spark中的新解析引擎Catalyst进行优化,Spark中的Catalyst不仅限于SQL的优化,Spark的五大子框架(Spark Cores、Spark SQL、Spark Streaming、Spark GraphX、Spark M原创 2017-06-15 06:19:01 · 1244 阅读 · 0 评论 -
Spark性能调优之数据倾斜调优一站式解决方案原理与实战
第29章Spark性能调优之数据倾斜调优一站式解决方案原理与实战29.1为什么说数据倾斜是分布式大数据系统的性能噩梦?大数据有基本的三个特性:第一个是数据多样化,有着不同类型的数据,其中包括结构化和非结构化数据;第二个就是庞大的数据量;第三就是数据的流动性,从批处理到流处理。一般在处理大数据的时候都会面对这三个特性的问题,而Spark就是基于内存的分布式计算引擎,以处理高效和稳定著称,是目前处理大原创 2017-07-05 20:47:15 · 2508 阅读 · 1 评论 -
数据倾斜解决方案之六:使用随机数进行Join
30.7数据倾斜解决方案之六:使用随机数进行Join本节讲解使用随机数进行Join,首先讲解什么叫使用随机数进行Join来解决数据倾斜问题,然后讲解如何使用随机数?使用随机数进行Join来解决数据倾斜问题使用场景、案例实战、注意事项等内容。30.7.1什么叫使用随机数进行Join来解决数据倾斜问题? 使用随机数进行Join来解决数据倾斜问题:如果2个RDD的数据中某个Key或者某几个原创 2017-07-13 07:29:13 · 2697 阅读 · 0 评论 -
ShuffleMapTask执行结果和Driver的交互原理及源码
ShuffleMapTask执行结果和Driver的交互原理及源码Driver中的CoarseGrainedSchedulerBackend给CoarseGrainedExecutorBackend发送launchTasks消息,CoarseGrainedExecutorBackend收到launchTasks消息以后会调用executor.launchTask。 通过launchTask来执行T原创 2017-06-24 09:45:18 · 749 阅读 · 0 评论 -
8.4.2 ResultTask执行结果与Driver的交互原理及源码详解
8.4.2 ResultTask执行结果与Driver的交互原理及源码详解 Task的run方法调用的时候会导致Task的抽象方法runTask的调用, Task.scala的runTask方法是一个抽象方法。Task包括2种Task:ResultTask、ShuffleMapTask,抽象runTask方法具体的实现由子类的runTask实现。ResultTask的runTask具体实现源原创 2017-06-24 09:46:54 · 700 阅读 · 0 评论 -
8.3 Task全生命周期详解
8.3 Task全生命周期详解 8.3.1 Task的生产过程详解 Task的生产过程详解:1, 当Driver中的CoarseGrainedSchedulerBackend给CoarseGrainedExecutorBackend发送LaunchTask之后,CoarseGrainedExecutorBackend在收到LaunchTask消息后,首先会反序列化TaskDescr原创 2017-06-24 09:52:58 · 1321 阅读 · 1 评论 -
第41课:Checkpoint彻底解密:Checkpoint的运行原理和源码实现彻底详解
第41课:Checkpoint彻底解密:Checkpoint的运行原理和源码实现彻底详解一:Checkpoint到底是什么?1, Spark在生产环境下经常会面临Tranformations的RDD非常多(例如一个Job中包含1万个RDD)或者具体Tranformation产生的RDD本身计算特别复杂和耗时(例如计算时常超过1个小时),此时我们必须考虑对计算结果数据的持久化;2, Spark是原创 2017-06-12 21:39:19 · 2009 阅读 · 0 评论 -
Spark与Job Server整合原理与实战
11.3 Spark与Job Server整合原理与实战 11.3.1Spark与Job Server整合原理 Spark-jobserver 提供了一个 RESTful 接口来提交和管理 spark 的 jobs、jars 和 job contexts。Spark-jobserver项目包含了完整的 Spark job server 的项目,包括单元测试和项目部署脚本。原创 2017-06-25 17:38:26 · 3915 阅读 · 0 评论 -
11.2 Spark与Alluxio整合原理与实战
l 11.2 Spark与Alluxio整合原理与实战 11.2.1Spark与Alluxio整合原理 Alluxio,以前称为Tachyon,是世界上第一个内存速度虚拟分布式存储系统。它统一数据访问和桥接计算框架和底层存储系统。应用程序只需要连接Alluxio来访问存储在任何底层存储系统中的数据。此外,Alluxio以内存为中心的架构使数据访问速度比现有解决方案更快。在原创 2017-06-25 17:39:04 · 4266 阅读 · 4 评论