2022-10.md
新建模板小书匠一、面试准备(去节奏把控-慢)
1. 业态
- 业态分析:业态就是指零售店卖给谁、卖什么和如何卖的具体经营形式。
我们的saas服务主要用户是餐饮行业的商家,主要提供门店,菜品等管理能力和数据BI报表支撑能力,从商家中挑取KA商户,以逐渐迭代的方式卖出服务。 - 事实表有哪些类型?怎么用的?:账单流水表,订单流水表,活动流水表,主要用于统计营业额,活动投入产出比等。
2. 数据量
- 数据量100t级别
3. MR原理
- MR的执行步骤
split:128M->yarnchild(map task)会有inputformat.getRecordReader.lineReader.next()->交给Map.map(k,v,context).outCollector.collection(kv)->
序列化MR的map底层唤醒缓冲区.spill()->调用分区Partitiner.getPartition和排序k.compareTo(o)+combiner溢写到磁盘--》再做一次Merger.merge()(Conbiner)合并小文件罗磁盘(并且形成索引文件)
YarnChild(reduce task).fetch()通过http拉取map结果再进行merge->然后iter分组比较groupingcomparator.compare(k1,k2)->交给Reducer.reduce().write->outputformat.lineReordWrite.write(kv)
4. HIVE原理
- hive的执行原理
hive主要有两大服务hive-server,metastore
当client请求hive时,server里的driver会接收请求然后经过complier编译,compiler获取metastore的数据进行解析成执行计划(mapreduce)交给exec引擎==》exec引擎调用yarn的api提交job到yarn上
5. CLICKHOUSE
-
- clickhouse 的引擎,mergeTree,SummingMergeTree,AggreagtingMergeTree
- clickhouse怎么用的?主要是做大宽表,单表查询用,利用order by的组合字段做过滤索引
6. 团队
- 团队:10个人的规模,角色PTL
7. SPARK原理
10.SPARK的shuffle引擎三类
- 数据不进行排序,速度较快,数据量比较小且不需要进行排序的场景:每个core生成并行度相同的文件个数,优化机制Consolidate
- SortShuffleManager(默认):对数据进行排序,非聚合无需排序场景下可用ByPass机制:每个core生成并行度相同的文件,然后合并
- Tungsten-sortShuffleManaer:数据的操作是基于serialized binary data基础上进行操作,Shuffle 文件的数量不能大于16777216
11.SPARKONYARN的原理
spark提交任务会有几个实例:
cluster模式:clientActor-submit,driverActor-AppMaster 还有;在YC中mr执行maptask,reducertask;spark通过ceb进程执行executor的task
client模式:client+driver=submit在客户端机器上,cluster上有一个executorlauncher,和若Cao..Exec...Backend进程;EL仅请求RM资源不再监控exec的task.
12SPARK的初始化过程和stage切分
job、stage、task
- Worker Node:物理节点,上面执行executor进程
- Executor:Worker Node为某应用启动的一个进程,执行多个tasks
- Jobs:action 的触发会生成一个job, Job会提交给DAGScheduler,分解成Stage:逆向解析
- Stage:DAGScheduler 根据shuffle将job划分为不同的stage,同一个stage中包含多个task,这些tasks有相同的 shuffle dependencies。
有两类shuffle map stage和result stage:
shuffle map stage:case its tasks' results are input for other stage(s)
. result stage:case its tasks directly compute a Spark action (e.g. count(), save(), etc) by running a function on an RDD,输入与结果间划分stage - Task:被送到executor上的工作单元,task简单的说就是在一个数据partition上的单个数据处理流程。
SparkContext.scala
提交任务之前的准备工作都是在SparkContext中完成的
准备工作都是在sparkcontext的主构造器中完成的
1.创建SparkEnv
actorSystem,shufflemanager,blockmanager
2.创建TaskScheduler
3.创建DagScheduler
4.启动TaskScheduler
Driver最终要两句代码:
New SparkContext()执行SparkContext.scala主构造器
saveAstextFile(args(1)) Rdd触发Action提交任务(构建DAG->切分Stage->TaskScheduler将任务提交给Executor--之前都在Driver端执行-->在Executor中执行计算任务)
13 SPARK的界定
- 视图界定T%V
隐士函数即具有转换类型关系的方法def或者函数 (科里化里:函数做参被使用(implicit ord:T=>Ordered[T])) - 上下文界定T:M
隐士值即具有继承实现关系的对象实例可以通过关系进行转换类型 (科里化里:值作参数被使用(implicit ord:Ordering[T]))
界定-demo
- akka的通信:引用彼此的代理进行actor通信
akka通信=demo
-
常用算子
map,filter,flatMap,mapPartitions,reduceByKey<=Trans,Action=>collect,saveAsTextFile,foreach,foreachPatition -
ip2long代码:闭包:序列化
val ip2Long: String => Long = { ip =>
val fragments = ip.split("[.]")
var ipNum = 0L
for (i <- 0 until fragments.length){
ipNum = fragments(i).toLong | ipNum << 8L
}
ipNum
}
-
DataFrame,DataSet
DataFrame也可以叫Dataset[Row],
Dataset在需要访问列中的某个字段时是非常方便的,但是:如果要写一些适配性很强的函数时,如果使用Dataset,行的类型又不确定,可能是各种case class,无法实现适配,这时候用DataFrame即Dataset[Row]就能比较好的解决问题 -
SparkStreaming,Struct Streaming:
SparkStreaming更像微批的一种处理方式
同时Structedstreaming可以从数据中获取时间(eventTime),从而可以针对流数据的生产时间而非收到数据的时间进行处理,同样任务是“long-running“不停的以微批获取数据, -
case class
样例类(case class)适合用于不可变的数据。它是一种特殊的类,能够被优化以用于模式匹配。 会自动生成apply方法,这个方法负责对象的创建.
8. KAFKA原理
- kafka存储原理
副本<=broker数,log和index文件是从开始到第某条结束,文件名以起始记录索引号为名
index是kv结构,k是西树后的分段文件记录条数从1开始编号,v是该编号的消息所在的相对索引位置(0开始) - 选举机制
Controller负责故障转移-fialover;leader负责读写,follower负责副本备份,isr-有机会成为leader
- 1 异步,leader接收
- -1 同步所有broker接收 - 分区,副本,节点的关系
分区可以根据磁盘数取增加,提高并发性能,跟broker和副本没有关系
producer不连zk,broker采取分摊活跃分区去支持读写,进行负载,其他非活跃只同步,conumer连zk,通过zk的偏移量来决定从哪个分区哪个位置消费。
直连模式|receiver模式
标签:case,10,task,shuffle,map,md,2022,stage From: https://www.cnblogs.com/bchjazh/p/16810915.html