自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(28)
  • 收藏
  • 关注

原创 数仓实施过程

数仓实施过程

2022-09-29 15:42:15 756 1

原创 Spark:技术点总结

一、发生oom的解决方案一、Driver 内存不够1、读取数据太大-、增加Driver内存,–driver-memory2、数据回传-、collect会造成大量数据回传Driver,使用foreach二、Executor 内存不够1、map 类操作产生大量数据,包括 map、flatMap、filter、mapPartitions等-、使用repartition,减少每个 task 计算数据的大小,从而减少每个 task 的输出-、减少中间输出:用 mapPartitions 替代多个 m

2022-04-25 11:12:02 2432

原创 离线数仓:建模原理

一、分层概述https://www.bilibili.com/video/BV1Hp4y1z7aZ?p=78二、数据集市三、数仓命名规范https://www.bilibili.com/video/BV1Hp4y1z7aZ?p=80四、范式理论1、概述https://www.bilibili.com/video/BV1Hp4y1z7aZ?p=812、函数依赖https://www.bilibili.com/video/BV1Hp4y1z7aZ?p=823、三范式https:/

2021-10-14 15:51:40 389

原创 数据结构与算法:合并排序

一、原理合并排序就是利用二分法的思想,将一个数组一分为二,然后继续递归式的继续划分小数组,直到划分到最后小数组中只剩下一个元素的时候,再递归回退合并排序起来,这样每次递归回退,就能将两个小数组合并为一个大数组,直到回退到最后合并并排序为一个大的数组图例如下:二、示例代码public class MergeSort { public static void main(String[] args) { int[] nums = {2, 1, 7, 9, 5, 8};

2021-09-02 17:47:21 239

原创 数据结构与算法:插入排序

一、原理插入排序的原理即是,从第二个元素开始,找到合适的位置,将元素插入到之前已排好序的元素中去,依次下去最终完成排序。就类似打扑克牌,每次抓到一张新的牌时,都将其插入到手中已排好序的牌组中。插入排序适用于少量数据的排序,特别是将一个新的元素插入到已有的排好序的数组中,插入排序是一种稳定的排序方法。插入排序的时间复杂度为 O(n^2)。由于每次插入一个新的元素,都需要遍历之前的元素,这种遍历方式的时间复杂度为 O(n),排序相当于需要插入 n 个元素,即综合时间复杂度为 O(n^2)。二、示例代码

2021-08-30 19:28:26 115

原创 数据结构与算法:冒泡排序

一、原理给定一个数组,把数组里的元素通通倒入到水池中,这些元素将通过相互之间的比较,按照大小顺序一个一个地像气泡一样浮出水面。具体的实现方法就是:每一轮,从杂乱无章的数组头部开始,每两个元素比较大小并进行交换,直到这一轮当中最大或最小的元素被放置在数组的尾部,然后不断地重复这个过程,直到所有元素都排好位置。元素相互比较的过程就是冒泡排序的核心操作。二、示例代码public class BubbleSort { public static void main(String[] args) {

2021-08-30 19:26:18 88

原创 数据结构与算法:快速排序

一、原理对于任意一个无序数组,我们随机的选一个元素作为基准元素(例如:数组中的最后一个或者第一个元素, 然后我们将数组中的剩余元素分别与基准元素进行比较,将小于或等于基准元素的数据放在基准元素的左边,将大于基准元素的数据放在基准元素的右边,当全部比较完成之后,基准元素在数组中的位置就确定了下来。然后,在分别对左边数组和右边的数组递归的进行上面的操作,直到每一个元素的位置都唯一确定下来。注意:快速排序最难理解的地方是如何将小于基准元素的元素放在左边,将大于基准元素的元素放在右边,本示例代码使用双指针方法

2021-08-20 11:13:59 144

原创 大数据技术点

一、数据结构二、Java一、多线程1、并行串行2、jdk提供的线程池有哪几个,优缺点是什么3、自定义线程池涉及到的几个参数是什么,一个新线程提交到线程池的处理流程3、多线程就涉及到锁跟计数器4、JUC包,几个常问点5、 AbstractQueuedSynchronizer6、 volatile二、集合1、什么是集合2、集合和数组的区别3、使用集合框架的好处4、常用的集合类有哪些?5、List,Set,Map三者的区别?List、Set、Map 是否继承自 Collection

2021-08-16 16:25:39 285

原创 Hive:窗口函数

一、窗口函数是什么二、窗口函数分类一、聚合型窗口函数二、分析型窗口函数三、取值型窗口函数三、参考文章Hive 窗口函数

2021-08-10 17:01:34 803

原创 Java:线程池的使用

一、什么是线程池二、Executor源码1、newFixedThreadPool创建一个线程池,该线程池重用在共享无界队列上运行的固定数量的线程。在任何时候,最多N个线程将是活动的处理任务。如果在所有线程都处于活动状态时提交其他任务,它们将在队列中等待,直到有线程可用。如果任何线程在关机之前的执行过程中由于故障而终止,那么如果需要执行后续任务,将使用一个新线程代替它。池中的线程将一直存在,直到显式关闭。//nThreads 池中的线程数//ExecutorService 新创建的线程池publi

2021-08-05 11:28:56 785

原创 Java:多线程

一、什么是多线程1、进程与线程进程:当一个程序运行起来后就是一个单独的进程线程:一个进程包含很多个线程,它是CPU调度的最小单元,由CPU一条一条的执行指令2、并行与并发并行:多核CPU运行多线程,每个核在同一时刻都有线程在运行并发:单核CPU运行多线程,必须通过时间片切换才能实现,在同一时刻其实只能运行一个线程,但是在宏观上看该核也实现了多线程的运行上下文切换:对于单核CPU来说,在同一个时刻只能运行一个线程,当在运行一个线程的过程中转去运行另一个线程,这个就叫做线程上下文转换。当然为了便于

2021-08-02 15:47:37 156

原创 Flink:异步IO关联HBase维表数据

一、使用异步IO关联HBase维表数据优点为避免在流计算环境中频繁的以同步方式查询外部维表,Flink官方提供使用异步IO与外部系统并发的交互方式,这样可以减轻因为网络交互引起的系统吞吐和延迟问题。当然,为了避免频繁与外部系统进行交互,建议使用内部缓存的方式存储近期容易使用到的维度数据,也就是LRU(最近最少使用)思想,业界经常使用的一个缓存机制是Guava 库提供的 CacheBuilder。整体的设计思想就是:先用异步IO将HBase维表数据加载到缓存中,这样在关联维表时候先去缓存中查找,如果找不到

2021-07-20 10:27:00 2849 3

原创 数据倾斜问题

一、什么是数据倾斜二、产生原因三、解决方法

2021-06-21 12:03:13 406

原创 实时数仓:架构

一、数仓架构1、美团基于 Flink 的实时数仓建设实践实时数仓架构:各层次使用的存储方案:

2021-06-17 20:04:04 2632 1

原创 Flink:状态与容错

Checkpointing

2021-06-16 11:41:45 284

原创 Flink:窗口操作

一、窗口操作1、Keyed Windowsstream .keyBy(...) <- keyed versus non-keyed windows .window(...) <- required: "assigner" [.trigger(...)] <- optional: "trigger" (else default trigger) [.evi

2021-06-05 18:13:04 356 1

原创 Flink:Watermark

一、Watermark简介与用途二、Watermark策略1、Watermark策略用途2、Watermark策略源码3、Watermark策略测试案例三、自定义Watermark生成器1、自定义周期性Watermark生成器1、源码2、测试案例2、自定义标点Watermark生成器1、源码2、测试案例四、Watermark策略的使用位置1、在Kafka连接器上使用2、在算子上使用五、在使用Watermark时需注意的地方1、window的触发条件2、处理空闲数据源六、完

2021-06-05 18:02:49 402

原创 Flink:双流Join和维表Join

一、双流Join1、inner join2、outer join3、interval join详细代码package com.scallion.job;import com.scallion.common.Common;import com.scallion.utils.FlinkUtil;import org.apache.flink.api.common.functions.CoGroupFunction;import org.apache.flink.api.common.func

2021-05-14 15:52:31 739

原创 Flink:ProcessFunction源码分析

参考:https://zhuanlan.zhihu.com/p/130708277

2021-05-07 15:05:20 463

原创 Spark:coalesce repartition 源码分析

Spark版本:2.4.0源代码位置:org/apache/spark/rdd/RDD.scala应用示例:scala> val x=(1 to 10).toListx: List[Int] = List(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)scala> val df1=x.toDF("df")df1: org.apache.spark.sql.DataFrame = [number: int]scala> df1.rdd.partitions.siz

2021-02-01 15:46:38 368

原创 Spark:accumulator源码分析

Spark版本:2.4.0源代码位置:org/apache/spark/util/AccumulatorV2.scala源代码如下:当需要long型累加器时继承如下抽象类/** * An [[AccumulatorV2 accumulator]] for computing sum, count, and average of 64-bit integers. * * @since 2.0.0 */class LongAccumulator extends AccumulatorV2[jl

2021-01-28 16:54:26 266

原创 Spark:broadcast源码分析

Spark版本:2.4.0源代码位置:org/apache/spark/SparkContext.scala应用示例:scala> val broadcastVar = sc.broadcast(Array(1, 2, 3))broadcastVar: org.apache.spark.broadcast.Broadcast[Array[Int]] = Broadcast(0)scala> broadcastVar.valueres0: Array[Int] = Array(1,

2021-01-28 15:16:57 146

原创 Spark:sortByKey源码分析

Spark版本:2.4.0源码位置:org.apache.spark.rdd.OrderedRDDFunctions源代码如下:/** * Sort the RDD by key, so that each partition contains a sorted range of the elements. Calling * `collect` or `save` on the resulting RDD will return or output an ordered list of

2021-01-27 16:42:40 175

原创 Spark:groupByKey源码分析

Spark版本:2.4.0代码位置:org.apache.spark.rdd.PairRDDFunctionsgroupByKey(): RDD[(K, Iterable[V])]groupByKey(numPartitions: Int): RDD[(K, Iterable[V])]使用示例:val source: RDD[(Int, Int)] = sc.parallelize(Seq((1, 1), (1, 2), (2, 2), (2, 3)))val groupByKeyRDD: RD

2021-01-26 18:40:33 313

原创 Spark:foldByKey源码分析

Spark版本:2.4.0代码位置:org.apache.spark.rdd.PairRDDFunctionsfoldByKey(zeroValue: V, numPartitions: Int)(func: (V, V) => V): RDD[(K, V)]foldByKey(zeroValue: V)(func: (V, V) => V): RDD[(K, V)]应用示例object FoldByKeyDemo { def main(args: Array[String]):

2021-01-26 17:59:03 115

原创 Spark:aggregateByKey源码分析

Spark版本:2.4.0代码位置:org.apache.spark.rdd.PairRDDFunctions相应代码如下:这两个方法会调用方法3进行计算方法1:/** * Aggregate the values of each key, using given combine functions and a neutral "zero value". * This function can return a different result type, U, than the ty

2021-01-26 15:56:26 131

原创 Spark:combineByKey源码分析

Spark版本:2.4.0代码位置:org.apache.spark.rdd.PairRDDFunctions代码片段如下:/** * Generic function to combine the elements for each key using a custom set of aggregation * functions. This method is here for backward compatibility. It does not provide combiner

2021-01-26 15:09:20 144

原创 Spark:ReduceByKey源码分析

代码位置:org.apache.spark.rdd.PairRDDFunctions相关的三个方法片段:######方法1

2021-01-26 11:26:52 325 1

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除