This commit is contained in:
parent
32d7c6c00a
commit
04ef0490bd
|
@ -0,0 +1 @@
|
||||||
|
UDF自定义函数
|
|
@ -0,0 +1,18 @@
|
||||||
|
## checkpoint
|
||||||
|
|
||||||
|
分布式快照,应对失败后重新开始
|
||||||
|
|
||||||
|
1. 批计算是否需要checkpoint?否
|
||||||
|
2. 流计算
|
||||||
|
1. 任务7*24小时运行,重启能够无缝重启
|
||||||
|
2. exactly-once 恰好一次,at-most-once至多一次
|
||||||
|
3. source读取来的数据,必须让整个链路执行成功处理完成才会将state持久化到外部存储(checkpoint)
|
||||||
|
1. source数据源必须支持再次消费
|
||||||
|
2. 必须等到所有的算子处理完才checkpoint,否则at-most-once
|
||||||
|
4. 吞吐量不高,battier(广播分发)栅栏,按批次checkpoint,可能引起重复数据落盘
|
||||||
|
1. 幂等处理id
|
||||||
|
2. checkpoint和mysql事物结合在一起
|
||||||
|
3. source允许再消费,sink幂等或者事务
|
||||||
|
5. 失败后恢复checkpoint快照.
|
||||||
|
6. savepoint->手动checkpoint
|
||||||
|
7. 设置uid,方便代码升级s
|
|
@ -0,0 +1,257 @@
|
||||||
|
## Hadoop生态圈
|
||||||
|
|
||||||
|
### Yarn资源调度
|
||||||
|
|
||||||
|
MR on Yarn
|
||||||
|
|
||||||
|
Storm on Yarn
|
||||||
|
|
||||||
|
Spark on Yarn
|
||||||
|
|
||||||
|
Flink on Yarn
|
||||||
|
|
||||||
|
### HDFS
|
||||||
|
|
||||||
|
### MR
|
||||||
|
|
||||||
|
分而治之
|
||||||
|
|
||||||
|
## Lambda架构
|
||||||
|
|
||||||
|
离线计算 MapReduce,Hive:
|
||||||
|
|
||||||
|
实时计算
|
||||||
|
|
||||||
|
## Apache Spark
|
||||||
|
|
||||||
|
生态圈完善
|
||||||
|
|
||||||
|
Spark core 批计算 取代MR,
|
||||||
|
|
||||||
|
1. 预先申请资源Spark申请资源的粗粒度的资源申请,启动任务速度快,task完毕executor 不会立即释放.MR细粒度资源申请,执行完毕后立即释放.
|
||||||
|
|
||||||
|
2. Spark基于内存计算cache persisit内存计算pipline,RDD存储逻辑,partion
|
||||||
|
|
||||||
|
Spark streaming 流计算 取代storm
|
||||||
|
|
||||||
|
1. 微批
|
||||||
|
2. 无状态,batch
|
||||||
|
3. 有状态计算updateStateByKey(checkpoint),flink
|
||||||
|
4. 无界有界,window窗口和水位线处理顺序问题
|
||||||
|
|
||||||
|
spark sql sql
|
||||||
|
|
||||||
|
Spark mlib 机器学习
|
||||||
|
|
||||||
|
批处理只是流数据的一个极限特例而已.
|
||||||
|
|
||||||
|
## Flink
|
||||||
|
|
||||||
|
1. 支持高吞吐,低延迟,高性能\
|
||||||
|
2. 支持时间时间(Event Time)概念,结合WaterMark处理乱序数据.
|
||||||
|
1. spark基于系统时间,数据到系统的时间,
|
||||||
|
2. flink基于用户带来的时间
|
||||||
|
3. 支持有状态计算,并且支持多种状态 内存,文件,RocksDB
|
||||||
|
4. 支持高度灵活的窗口,time,count,session
|
||||||
|
5. 基于轻量级分布式快照(CheckPoint)实现容错保证exactly-once语义
|
||||||
|
6. 基于JVM实现独立内存管理
|
||||||
|
7. Save points 保存点,方便代码升级
|
||||||
|
|
||||||
|
## Flink与Spark对比
|
||||||
|
|
||||||
|
### spark
|
||||||
|
|
||||||
|
pipline
|
||||||
|
|
||||||
|
spark与MR速度原因
|
||||||
|
|
||||||
|
有界与无界流
|
||||||
|
|
||||||
|
集群
|
||||||
|
|
||||||
|
1. master,管理集群中所有Worker进而管理了集群资源
|
||||||
|
2. worker管理各个节点上的资源mem core
|
||||||
|
1. WORKER_MEMORY
|
||||||
|
2. WORKER_CORE
|
||||||
|
3. Driver任务调度
|
||||||
|
4. Executor执行task
|
||||||
|
|
||||||
|
### Flink集群
|
||||||
|
|
||||||
|
1. JobManager(JVM进程)master
|
||||||
|
1. 资源调度
|
||||||
|
2. 任务调度,触发集群进行checkpoint,
|
||||||
|
2. TaskManager(JVM进程)slaver
|
||||||
|
1. TaskManager向JobManager注册资源
|
||||||
|
2. TackManager中资源使用Task slot进行隔离,隔离内存无法隔离核.
|
||||||
|
3. TaskManager 3G 3Core
|
||||||
|
4. 设置3个task slot 平分TaskManager
|
||||||
|
5. task slot 一组固定资源
|
||||||
|
|
||||||
|
## 开发
|
||||||
|
|
||||||
|
1. 准备环境,创建/获取
|
||||||
|
2. 数据处理逻辑
|
||||||
|
3. 启动Flink任务
|
||||||
|
|
||||||
|
## 提交集群
|
||||||
|
|
||||||
|
1. Yarn-Session
|
||||||
|
1. 提交前,需要yarn去启动一个flink集群(yarn-session)
|
||||||
|
2. 启动成功后,通过flink run 这个命令去往flink集群中提交任务
|
||||||
|
3. 当job执行完毕,yarn-session集群并不会关闭,等待下一个job提交,一直占用集群资源(JobManager),好处job启动时间变短
|
||||||
|
2. Run a flink job on yarn
|
||||||
|
1. 直接去yarn中提交一个flink job,在job执行之前,先去启动一个flink集群,集群启动成功,job在执行,当job执行完毕,flink集群一同关闭,释放资源
|
||||||
|
2. 每个job执行完,集群关闭,但是每个job启动时间变长.
|
||||||
|
|
||||||
|
### 搭建高可用集群
|
||||||
|
|
||||||
|
flink JobManager元数据checkpoint,数据存储,hadoop插件.
|
||||||
|
|
||||||
|
### JobManager分担压力Flink on yarn
|
||||||
|
|
||||||
|
1. jobManager任务管理,yarn资源管理.分担jobManager压力
|
||||||
|
2. 降低维护成本yarn
|
||||||
|
|
||||||
|
### 运行流程
|
||||||
|
|
||||||
|
RM,NM,yarn运行需要hdfs
|
||||||
|
|
||||||
|
1. 上传jar及配置文件
|
||||||
|
2. 为applicationMaster申请资源
|
||||||
|
3. 分配node资源,启动applicationmaster,下载jar及配置文件
|
||||||
|
4. applicationMaster为taskmanager申请资源
|
||||||
|
5. yarn分配node并启动TaskManager
|
||||||
|
6. 分配任务taskManager中运行
|
||||||
|
7. taskManager下载文件.
|
||||||
|
|
||||||
|
## HA
|
||||||
|
|
||||||
|
1. 主备
|
||||||
|
2. 重启
|
||||||
|
|
||||||
|
## 算子并行度
|
||||||
|
|
||||||
|
1. 配置文件中设置
|
||||||
|
2. 提交job的时候,通过-p选项来设置
|
||||||
|
3. 代码中设置parallelism
|
||||||
|
4. 算子上设置
|
||||||
|
|
||||||
|
## 任务调度算子链
|
||||||
|
|
||||||
|
本地化级别:PROCESS_LOCAL
|
||||||
|
|
||||||
|
1. 不同的Task下的subtask要分发到相同的TaskSlot中.降低数据传输,提高执行效率.尽可能实现算子链
|
||||||
|
2. 相同的Task下的subtask要分发到不同的TaskSlot中充分利用集群资源.
|
||||||
|
3. TaskSlot个数决定了job未来执行的并行度,job数不能大于TaskSlot数.
|
||||||
|
|
||||||
|
### 算子->函数
|
||||||
|
|
||||||
|
1. Stateful Stream Processing=========Low-level building block (streams,state[event]time)
|
||||||
|
2. DataStream/DataSetApi============Core Api
|
||||||
|
3. Table Api========================Declaretive DSL
|
||||||
|
4. sql=============================High-level Language
|
||||||
|
|
||||||
|
### flatMap代替filter
|
||||||
|
|
||||||
|
map,flat(扁平)
|
||||||
|
|
||||||
|
union 数据流何工,数据流中的数据必须一致.
|
||||||
|
|
||||||
|
connect假合并,数据流中数据可以不一样,comap
|
||||||
|
|
||||||
|
split 可以根据一定的条件拆分数据流.
|
||||||
|
|
||||||
|
side out
|
||||||
|
|
||||||
|
## 卡口数据
|
||||||
|
|
||||||
|
相同key的数据一定是由某一个subtask处理,一个subtask可能会处理多个key所对应的数据.
|
||||||
|
|
||||||
|
### 统计每分钟卡口流量
|
||||||
|
|
||||||
|
时间映射成分钟字段,直接count
|
||||||
|
|
||||||
|
每分钟每个卡口,组合key
|
||||||
|
|
||||||
|
富函数可获取上下文及生命周期.
|
||||||
|
|
||||||
|
process底层api
|
||||||
|
|
||||||
|
广播流
|
||||||
|
|
||||||
|
## 分区策略
|
||||||
|
|
||||||
|
1. shuffle==================增大分区,数据倾斜,增加并行度使用
|
||||||
|
2. rebalance================增大分区,数据倾斜,增加并行度使用
|
||||||
|
3. rescale==================减少分区,防止大量网络传输,降低并行度.
|
||||||
|
4. broadcast================广播,大量数据冗余,映射表
|
||||||
|
5. Forward=================上游分区与下游分区一一对应的分发,窄依赖
|
||||||
|
6. global===================上游中所有数据分发到下游中第一个分区中.
|
||||||
|
7. keyby===================可以根据用户指定的字段来分发
|
||||||
|
8. partiooncustom===========自定义分区策略
|
||||||
|
|
||||||
|
DataFlow
|
||||||
|
|
||||||
|
1. source
|
||||||
|
2. transformation
|
||||||
|
3. sink
|
||||||
|
|
||||||
|
## 恰好一次
|
||||||
|
|
||||||
|
幂等处理
|
||||||
|
|
||||||
|
## Flink State
|
||||||
|
|
||||||
|
会持久化到远端
|
||||||
|
|
||||||
|
1. Keyed State
|
||||||
|
1. value state
|
||||||
|
2. list state
|
||||||
|
3. map state
|
||||||
|
4. ReducingState
|
||||||
|
5. AggregationState替代FoldingState
|
||||||
|
2. No-Keyed State(Operator State)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,65 @@
|
||||||
|
## 窗口
|
||||||
|
|
||||||
|
1. flink中窗口就是将无界流变为有界流
|
||||||
|
2. 支持基于时间分流未分流和元素个数
|
||||||
|
|
||||||
|
## 12种窗口
|
||||||
|
|
||||||
|
触发计算上一个窗口的数据
|
||||||
|
|
||||||
|
新窗口接收数据
|
||||||
|
|
||||||
|
### 滚动窗口
|
||||||
|
|
||||||
|
### 滑动窗口
|
||||||
|
|
||||||
|
### session窗口
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
### 增量聚和函数
|
||||||
|
|
||||||
|
reduce
|
||||||
|
|
||||||
|
aggregate
|
||||||
|
|
||||||
|
### 全量聚和函数(排序)
|
||||||
|
|
||||||
|
process
|
||||||
|
|
||||||
|
### Flink中支持三种时间语义
|
||||||
|
|
||||||
|
1. Process Time 当前元素进入窗口的系统时间(算子处理时间),默认时间语义
|
||||||
|
2. Event Time 事件时间,当前元素在数据源中产生的时间(数据自定义时间)
|
||||||
|
3. Ingestion time 摄取时间,元素进入flink source 的系统时间(元素进入source时间)
|
||||||
|
|
||||||
|
### 左闭右开
|
||||||
|
|
||||||
|
### 打水印
|
||||||
|
|
||||||
|
1. 周期性生成水印
|
||||||
|
2. 间歇性生成水印
|
||||||
|
|
||||||
|
### 添加水印后,只有水印能触发计算
|
||||||
|
|
||||||
|
1. window 触发 watermark>=window end
|
||||||
|
2. window触发 eventime>=window end
|
||||||
|
|
||||||
|
## AllowedLateness
|
||||||
|
|
||||||
|
延时多长时间能够再次执行上次窗口.
|
||||||
|
|
||||||
|
CacheFile
|
||||||
|
|
||||||
|
定时器定时拉取文件
|
||||||
|
|
||||||
|
readfile
|
||||||
|
|
||||||
|
MateStateDescription 管理员在修改配置文件的时候,需要将更改的信息同步值kafka配置到topic中,然后将kafka的配置流信息变成广播流,广播到业务流的各个线程中.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,51 @@
|
||||||
|
方法区:类
|
||||||
|
|
||||||
|
堆:对象
|
||||||
|
|
||||||
|
## 装载:
|
||||||
|
|
||||||
|
class文件->字节流->类加载器(代码模块) 自定义类加载器 字节码增强 java agent
|
||||||
|
|
||||||
|
将一个字节流代表的静态存储结构转化成方法区运行时数据结构
|
||||||
|
|
||||||
|
在java堆中生成一个代表这个类的java.lang.Class对象,作为方法区 的数据访问入口
|
||||||
|
|
||||||
|
## 链接
|
||||||
|
|
||||||
|
### 验证
|
||||||
|
|
||||||
|
文件格式验证,class文件,jvm版本
|
||||||
|
|
||||||
|
元数据验证,对于java语法的验证
|
||||||
|
|
||||||
|
字节码验证,数据流和控制流验证,运行时检查,栈数据类型和操作码
|
||||||
|
|
||||||
|
符号引用验证,将符号引用转为直接引用.(链接)
|
||||||
|
|
||||||
|
### 准备
|
||||||
|
|
||||||
|
常量赋值
|
||||||
|
|
||||||
|
### 解析
|
||||||
|
|
||||||
|
从运行时常量池中的符号引用动态确定具体值的过程(符号引用->直接引用).
|
||||||
|
|
||||||
|
对解析的结果进行缓存.
|
||||||
|
|
||||||
|
## 初始化
|
||||||
|
|
||||||
|
执行类构造器方法的过程.
|
||||||
|
|
||||||
|
声明类变量为定制的初始化值
|
||||||
|
|
||||||
|
使用静态代码块为类变量赋值
|
||||||
|
|
||||||
|
## 对象几种状态
|
||||||
|
|
||||||
|
1. 创建阶段
|
||||||
|
2. 应用阶段
|
||||||
|
3. 不可见阶段
|
||||||
|
4. 不可达阶段
|
||||||
|
5. 收集阶段
|
||||||
|
6. 终结阶段
|
||||||
|
7. 空间重分配阶段
|
|
@ -0,0 +1,45 @@
|
||||||
|
## 垃圾收集算法
|
||||||
|
|
||||||
|
### 标记清除算法
|
||||||
|
|
||||||
|
首次适应算法,最佳适应算法,最差适应算法,邻近算法
|
||||||
|
|
||||||
|
### 标记复制算法
|
||||||
|
|
||||||
|
两个相同大小
|
||||||
|
|
||||||
|
空间利用率低
|
||||||
|
|
||||||
|
### 标记-清除-整理(压缩)算法
|
||||||
|
|
||||||
|
随机整理,
|
||||||
|
|
||||||
|
线性整理,
|
||||||
|
|
||||||
|
滑动整理
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
双指针,头尾对撞强依赖对象大小相同.第一次移动位置不更新标记,第二次更新标记
|
||||||
|
|
||||||
|
## 分代回收三大假说
|
||||||
|
|
||||||
|
### 弱代带假说
|
||||||
|
|
||||||
|
绝大多数对象朝生夕死
|
||||||
|
|
||||||
|
### 强分代假说
|
||||||
|
|
||||||
|
活得越久的对象,也就是熬过很多次垃圾回收的对象是越来越难以消亡的
|
||||||
|
|
||||||
|
### 跨代引用假说
|
||||||
|
|
||||||
|
部分收集:不是完整的收集整个垃圾区域,而是只回收想要的一部分
|
||||||
|
|
||||||
|
新生代收集
|
||||||
|
|
||||||
|
老年代收集
|
||||||
|
|
||||||
|
Mixed GC:回收整个新生代,以及部分老年代的一种回收方式.
|
||||||
|
|
||||||
|
记忆集
|
|
@ -0,0 +1,36 @@
|
||||||
|
# 类加载特性
|
||||||
|
|
||||||
|
### 类加载器
|
||||||
|
|
||||||
|
1. 负责读取java字节代码,并转换成java.long.class类的一个实例的代码模块
|
||||||
|
2. 类加载器除了用于加载类外,还可以用于确定类在java虚拟机中的唯一性.
|
||||||
|
|
||||||
|
全盘委托
|
||||||
|
|
||||||
|
父类委托
|
||||||
|
|
||||||
|
### 打破双亲委派
|
||||||
|
|
||||||
|
自定义类加载器
|
||||||
|
|
||||||
|
SPI(servie provider interface)
|
||||||
|
|
||||||
|
OSGI
|
||||||
|
|
||||||
|
### 运行时数据区
|
||||||
|
|
||||||
|
1. 程序计数器
|
||||||
|
2. 栈
|
||||||
|
1. 局部变量表
|
||||||
|
2. 操作数栈
|
||||||
|
3. 动态链接,将符号方法引用变为具体方法引用
|
||||||
|
4. 返回地址
|
||||||
|
5. 附加信息
|
||||||
|
3. 堆
|
||||||
|
4. 方法区
|
||||||
|
5. 运行时常量池
|
||||||
|
6. 本地方法栈
|
||||||
|
|
||||||
|
### 常量池
|
||||||
|
|
||||||
|
静态常量池,运行时常量池,字符串常量池
|
|
@ -0,0 +1,8 @@
|
||||||
|
快慢指针.
|
||||||
|
|
||||||
|
回文
|
||||||
|
|
||||||
|
面试
|
||||||
|
1. 链表遍历与弹栈.
|
||||||
|
笔试
|
||||||
|
2. 修改右边指针往回指,分别从左右 开始遍历查看是否相同.
|
|
@ -0,0 +1,8 @@
|
||||||
|
单链表环问题.
|
||||||
|
## 二叉树
|
||||||
|
### 先序
|
||||||
|
头左右
|
||||||
|
### 中序
|
||||||
|
左头右
|
||||||
|
### 后续
|
||||||
|
左右头
|
|
@ -0,0 +1,9 @@
|
||||||
|
## 用队列栈实现宽度优先遍历
|
||||||
|
1. 队列弹出一个car并打印
|
||||||
|
2. car有左入左,有右入右.
|
||||||
|
## 用栈实现深度优先遍历.
|
||||||
|
1. 栈中弹出一个car并打印.
|
||||||
|
2. 有右入右,有做入左.
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,14 @@
|
||||||
|
从一个节点开始,叶子节点都要,称作子树,否则称作拓扑.
|
||||||
|
|
||||||
|
### 二叉树递归套路
|
||||||
|
1. 假设以x节点为头,假设可以向x左树和x右树要任何信息
|
||||||
|
2. 在上一步的假设下,讨论以x为头节点的数,得到答案的可能性
|
||||||
|
3. 列出所有可能性后,确定到底需要向左树和右树要什么样的信息
|
||||||
|
4. 把左树信息和右树信息求全集,就是任何一颗子树都需要返回的信息S
|
||||||
|
5. 递归函数返回S,每一颗子树都这么要求
|
||||||
|
6. 写代码,在代码中考虑如何把左树信息和右树信息整合出整课数的信息
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
1. 思想边界提醒
|
||||||
|
2. 代码模板化
|
|
@ -0,0 +1,2 @@
|
||||||
|
理清楚问题,在做..declare问题.
|
||||||
|
|
|
@ -0,0 +1,5 @@
|
||||||
|
并查集:两个是否是同一个,两个联合。
|
||||||
|
往上到不能再往上,找父类.
|
||||||
|
并查集扫雷,感染并查集。
|
||||||
|
|
||||||
|
先写整体逻辑后分开写各各子实现。
|
|
@ -0,0 +1,7 @@
|
||||||
|
### 暴力递归
|
||||||
|
1. 把问题转换为规模缩小了的同类问题的子问题.
|
||||||
|
2. 有明确的不需要继续进行递归的条件
|
||||||
|
3. 有当得到了子问题的结果之后的决策过程
|
||||||
|
4. 不记录每一个子问题的解.
|
||||||
|
|
||||||
|
恢复现场
|
|
@ -0,0 +1,3 @@
|
||||||
|
记忆化搜索
|
||||||
|
尝试策略,状态转移
|
||||||
|
1:28
|
|
@ -0,0 +1,2 @@
|
||||||
|
重复线段问题.
|
||||||
|
1. 取.5判断多少线段包含.
|
|
@ -0,0 +1,3 @@
|
||||||
|
前缀数:记录字符串出现频率.pass,end
|
||||||
|
桶排序
|
||||||
|
基数排序,按照个十百钱位 排序
|
Binary file not shown.
After Width: | Height: | Size: 662 KiB |
Binary file not shown.
After Width: | Height: | Size: 339 KiB |
Binary file not shown.
After Width: | Height: | Size: 121 KiB |
|
@ -0,0 +1,10 @@
|
||||||
|
比较器返回为负数,第一个在前.
|
||||||
|
左节点2*i+1
|
||||||
|
右节点2*i+2
|
||||||
|
父节点(i-1)/2
|
||||||
|
## 堆
|
||||||
|
完全二叉树.
|
||||||
|
|
||||||
|
PriorityQueue默认小根堆
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1 @@
|
||||||
|
指针指向及移动.
|
Loading…
Reference in New Issue