![](https://img-blog.csdnimg.cn/20201014180756724.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
spark
文章平均质量分 71
HanJuly9569
热衷于探索世界的程序猿一枚…
展开
-
Spark ALS 协同过滤算法实践
个人总结,有误请指出ALS算法bibili上硅谷课程理论协同过滤算法上图中横坐标代表用户,纵坐标代表商品,每一个格子,代表第I个用户的对第I个商品的评分。这个矩阵是一个稀疏矩阵,而这些没有值得位置正是我们要推测的值。每个格子的的评分大体上可以看做一个独立事件,是很难准确的通过其他独立事件去推测的。因为它的可能实在太多了。所以综上我们提出两个问题:由于它每一个格子的可能性太多,那我们可以简单的理解为求解一个推测值的复杂度是很高的,为m*n,m,n分别为矩阵的横纵长度。由于每个用户对每个商.原创 2021-04-25 01:52:33 · 714 阅读 · 0 评论 -
Spark Shuffle源码领读
个人总结,以官网为准如有错误,欢迎指出主要步骤:在excutor线程池里执行ShuffleMapTask时,触发ShufflRdd的compute函数ShuffleRdd 使用BlockStoreShuffleReader 给SortShuffleWriter返回一个迭代器。-SortShuffleWriter 间接通过 ExternalSorter 调用迭代器的next函数开始获取shuffle前一步的数据ShuffleBlockFetcherIterator 在初始化的时候,先区分出.原创 2021-03-23 01:03:52 · 122 阅读 · 0 评论 -
Spark任务执行流程源码领读
流程CoarseGrainedExecutorBackend 受到启动任务的请求,并将任务反序列化给excutorExcutor将任务描述放到TaskRunner,然后放入线程池中线程启动后,首先想driver端发送任务状态并拉取jar等依赖调用Task的run方法执行(ShuffleMapTask,ResultTask)主要代码...原创 2021-03-21 22:07:05 · 91 阅读 · 0 评论 -
Spark任务切割提交源码领读
概述RDD的action算子触发SparkContext的runjob然后触发DAG的runjob方法DAG执行提交job方法,并递归切割stageDAG将任务提交给TaskSchedulerImplTaskSchedulerImpl与CoarseGrainedSchedulerBackend等协同将任务封装为TaskSetManger,并请求资源,TaskSchedulerImpl封装任务为TaskDesc并序列化发送给Excutor总结:重要的几个类及其作用:DAGSchedu.原创 2021-03-21 21:22:29 · 168 阅读 · 0 评论 -
Spark提交流程源码领读
Spark提交流程源码领读从上图一步步来解析通过SparkSubmit的脚本使用submit触发 doSubmit(arg[])然后自己调用submit(args: SparkSubmitArguments, uninitLog: Boolean),prepareSubmitEnvironment 它主要是使用从前两步解析的参数,选择对应的启动类,启动类不一定是我们写的主类。准备一些后面需要用到参数childArgs,childClasspath,sparkConf比如yarn模原创 2021-03-17 01:12:51 · 153 阅读 · 0 评论 -
Spark目录
Spark目录Spark任务提交流程Spark内存管理Spark ShuffleSpark通讯机制SparkSql解析过程原创 2021-03-11 00:41:08 · 161 阅读 · 0 评论 -
SparkSql解析过程
引用:Spark SQL架构和原理Spark SQL 性能优化再进一步 CBO 基于代价的优化Spark SQL join的三种实现方式总结首先用户使用spark.sql 或者 select等api提交sql转化为未解析的逻辑计划为什么叫为解析的逻辑计划:因为没有考虑数据的转化为已解析的逻辑计划转化为优化后的逻辑计划转化为物理执行计划计算物理执行计划的开销模型,选择一个解析为RDD去执行例子以下以这个sql的解析为例:SELECT sum(v)..原创 2021-03-11 00:36:31 · 636 阅读 · 0 评论 -
Spark通讯机制
Spark通讯机制流程每个节点上RpcEndPoint 发送消息给DispatcherDispatcher 将本地指令放入Inbox,将外部指令放入outboxTransportClient轮询OutBox,将消息发送给另一个机器的TransportServer另一个台机器的TransportServer的将消息转给自己的Dispathcer,然后放入InboxDispatcher会轮询消费Inbox猜想:通讯机制用在哪些地方Shuffle 过程中MapoutTracker的通讯原创 2021-03-10 23:59:28 · 187 阅读 · 0 评论 -
Spark Shuffle
Spark Shuffleshuffle的分区数怎么确定?Map端由初始读取的数据源和算子计算后决定,比如:kafka的分区数Reduce端由spark.default.parallelism决定,如果没有配置,由上一个map的分区数一致Reduce怎么拉取数据?先上图:BlockManager 是传输数据MapoutputTracker是通讯流程:MapOutputTrackerWorker将自己的map端输出的文件位置信息通过包装为MapStatus发送给Driver端的M原创 2021-03-10 23:52:34 · 176 阅读 · 0 评论 -
Spark内存管理
Spark内存管理堆内内存,JVM管理堆外内存,操作系统为什么需要堆外内存?因为jvm存在回收不及时,不能精确回收估计内存的问题,容易造成OMM.同时也避免了频繁的GC带来的程序停顿,当然JVM也是由优势的。为什么无法精确回收?因为一个对象创建后,保存在堆中。清除是由JVM处理的,spark只能标记一下。序列化的对象spark可以精确的计算,但是非序列化的对象不能精确估计。所以在内存分配中会预留一小部分方式,防止计算的误差导致的OMM.内存管理方式静态管理这种方法是旧的方法容易造成原创 2021-03-08 23:52:10 · 184 阅读 · 0 评论 -
Spark任务提交流程
Spark提交任务流程总体概况:1.在提交脚本中配置需要的资源(粗颗粒分配),向ResourceManager提交app2.RM启动一个NM来启动ApplicationMaster,driver运行在此机器上,并创建了DAGScheduler,TaskScheduler.3.AM向RM请求资源的,AM然后在对应的NM启动Excutor4.Excutor初始化线程池并向driver注册,为driver监控做准备5.Driver开始执行用户写的代码,遇到action时产出一个job6.DAG 根原创 2021-03-08 23:25:19 · 811 阅读 · 0 评论