![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
大数据
文章平均质量分 83
一不小心注册成真名了
这个作者很懒,什么都没留下…
展开
-
Spark源码-2.3 Aggregate物理实现-聚合函数和聚合模式
AggregationIteratorAggregate三种物理算子的doExecute方法遵循类似的代码框架:protected override def doExecute(): RDD[InternalRow] { child.execute().mapPartitionsWithIndex { (partIndex, iter) => val hasInput = iter.hasNext val res = if (!hasInput && group原创 2021-04-22 21:28:18 · 234 阅读 · 1 评论 -
Spark源码-2.3 Aggregate物理实现-3种聚合物理算子
概述Optimizer 中的预处理当存在多列distinct计算时,Optimizer执行RewriteDistinctAggregates规则时,该规则会将多列distinct展开(通过插入Expand算子),非distinct聚合列和每个distinct聚合列会被分为不同的组(假设为N组),每个组为一行数据并带有group id,这样一行数据会被扩展为N行。之后,用两层Aggregate算子计算Expand之后的数据,第一层按前面的分组聚合,第二层再将结果聚合。引用RewriteDistinctAg原创 2021-04-20 22:03:23 · 215 阅读 · 0 评论 -
Spark源码-2.3 Join物理实现-II
BroadcastNestedLoopJoinExecCartesianProductExecCartesianProductExec对于没有等值join条件但是为inner join的情况,会使用CartesianProductExec。protected override def doExecute(): RDD[InternalRow] = { val numOutputRows = longMetric("numOutputRows") val leftResults .原创 2021-04-17 18:08:17 · 145 阅读 · 0 评论 -
Spark源码-2.3 Join物理实现-I
BroadcastHashJoinExecShuffledHashJoinExecSortMergeJoinExecStreamedTable与BuildTable(BufferedTable)SparkSql将join的两张表按流式表(StreamedTable)和构建表(BuildTable/BufferedTable)区分。尽管join实现可能不同,但通常而言,构建表被作为查找表数据结构,流式表作为顺序遍历的数据结构。通常通过一条条迭代流式表中数据,并在构建表中查找与当前流式表数据join.原创 2021-04-15 21:58:45 · 206 阅读 · 0 评论 -
Spark源码-2.3 JoinSelection
概述逻辑计划转换为物理计划SQL被解析为逻辑计划后,会被交给SessionState的executePlan方法,转换为QueryExecution:def executePlan(plan: LogicalPlan): QueryExecution = createQueryExecution(plan)QueryExecution的构造过程将LogicalPlan转换为物理计划: protected def planner = sparkSession.sessionState.plann原创 2021-04-13 21:28:41 · 150 阅读 · 0 评论 -
Hadoop源码-2.6.4 Yarn NodeManager Container内存资源设置及监控
启动执行Container启动的组件NodeManagerContainerManagerImplpublic StartContainersResponse startContainers(StartContainersRequest requests)private void startContainerInternalContainer(ContainerImpl)Application(ApplicationImpl)ContainersLauncherpubl原创 2021-01-31 21:34:57 · 282 阅读 · 0 评论 -
MapReduce shuffle过程详解
一、MapReduce计算模型 我们知道MapReduce计算模型主要由三个阶段构成:Map、shuffle、Reduce。 Map是映射,负责数据的过滤分法,将原始数据转化为键值对;Reduce是合并,将具有相同key值的value进行处理后再输出新的键值对作为最终结果。为了让Reduce可以并行处理Map的结果,必须对Map的输出进行一定的排序与分割,然后再交给对应的Reduce,而这个将Map输出进行进一...转载 2020-10-25 11:42:39 · 1580 阅读 · 0 评论 -
HiveSQL-窗口查询-区间合并
区间合并在业务需求开发中偶尔可以预见,LeetCode中第56题便是该场景的题。本文从改题解法开始,引申到该问题的HiveSQL实现(毕竟本人是数据开发,很多需求都得用SQL实现)。原创 2020-10-01 22:56:32 · 686 阅读 · 1 评论 -
HiveSQL-窗口查询
场景传统的SQL语句并不能支持诸如分组排名、滑动平均值等计算,GROUP BY语句只能为每个分组的数据返回一行结果,而非每条数据一行。新版的SQL标准引入了窗口查询功能,使用WINDOW语句我们可以基于分区和窗口为每条数据都生成一行结果记录,这一标准也已得到了Hive的支持。窗口查询在排行榜中应用广泛,尤其是row_number()函数撑起了排行榜需求半边天。除了排行榜,窗口查询可应用在以下但不限于以下场景:计算分组内TOP k计算分组内排序滑动窗口相关计算(滑动平均数等)计算累计分布…窗原创 2020-08-28 11:16:57 · 594 阅读 · 1 评论 -
Spark源码-branch-0.5 Shuffle
概述shuffle过程研究基于本地运行模式的LocalScheduler;ShuffleFetcher实现为SimpleShuffleFetcher。涉及组件shuffle过程涉及的组件:MapOutputTrackerShuffleManagerShuffleFetchershuffle文件生成在ShuffleMapTask类型run方法中,shuffle数据fetch在依赖类型为宽依赖的rdd(如ShuffledRDD、CoGroupedRDD)的compute方法中。各组件功能t原创 2020-08-02 21:29:17 · 145 阅读 · 0 评论 -
Spark源码-branch-0.5 SparkContext与DAGScheduler
SparkContext与DAGSchedulerSparkContext初始化Scheduler初始化LocalScheduler初始化MesosScheduler初始化创建rdd及任务提交创建rddstage提交stage划分stage提交结束走读SparkContext初始化及DAGScheduler划分stage并提交任务代码,主要涉及在Driver进程中做的事。SparkContext初始化初始化环境,启动各组件:SparkEnv在createFromSystemProperties方法原创 2020-08-02 18:14:54 · 152 阅读 · 0 评论