特别说明:大数据的面试内容是根据大数据领域组件(hadoop、zookeeper、redis、java、scala等),数仓等许多内容。
本篇还是以数仓为主,我还是会在有时间的时候把数仓的知识点更完。
1、RDBMS :关系型数据库
2、Prometheus、Grafana :都是组件监控
3、工作流,其实也调度工具(常用):azkaban、oozie、airflow
4、日志区分:行为日志、内容日志、业务数据
行为日志:用户与平台交互产生的数据
业务日志:是由公司服务端业务系统`产生的数据
日内日志:公司在不同的业务需求产生的
5、关于二次开发编写Flume Interceptor的原因
hive是可以自动识别json格式的message,但是无法识别base64加密的message。需要开发一个Flume Interceptor进行解码
6、sparkstreaming和structured stareaming
Spark Streaming是spark初代流处理框架,使用的微批的形式来进行流处理,每个时间间隔内的数据为一个RDD,源源不断对RDD
进行处理来实现流式计算。
Structured Streaming:
采用无界的Table的概念,流数据相当于往一个表上不断的去追加行。基于Spark SQL引擎来实现。使用大多数的Spark SQL的函数。
包含时间戳
7、Process Time : 流处理引擎接受到数据的时间
8、Event Time :事件真正发生的时间
9、
维度:指审视数据的角度,它通常是数据记录的一个属性,例如时间、地点等。
1 维度是度量的环境,用来反映业务的一类属性,这类属性的集合构成一个维度,也可以称为实体对象。
2 维度属于一个数据域,如地理维度(其中包括国家、地区、 省以及城市等级别的内容)、时间维度(其中包
括年、季、月、周、日等级别的内容),维度所包含的表示维度的列信息为维度属性,维度属性常用来进行数据 过滤、数据分类、维度描述信息(报表中title中的文字描述)
3 维度是指可指定不同值的对象的描述性属性或特征,一般是一种离散数据。比如时间维度上的每一个独立的 日期, 或者商品维度上的每一件独立的商品。
因此统计时可以把维度值相同的记录聚合在一起, 然后应用 聚合函数做累加、 平均、 去重复计数等聚合计算.
例如
城市名称:北京、上海、广州
人名:张三、李四
班级:1班、2班
性别:男、女
维度的基数(Cardinality)指的是这个维度在数据集中出现不同值得个数。 比如上表中city这个维
度,有湖北、广东、湖南、北京等34个值,则该维度的基数就是34。
超高基数列是指基数超过一百万的维度,这种维度的设计需要格外谨慎。常见的比如 “userid”、
“timestamp”、“production_id”等等。维度的基数可以通过hive 的count distinct函数来进行查询 获得。
度量:基于数据所计算出来的考量值;它通常是一个数值,如总销售额、不同的用户数等。 分析人员往往 要结合若干个维度来审查度量值,以便在其中找到变化规律。
10、指标:指标是指可以按总数或比值衡量的具体维度元素。例如,维度“城市”可以关联指标“人口”,其值为具体城市的
居民总数。比如新闻的浏览量、点击率、页面的停留市场、新增用户输、留存率
注意:维度和指标可以结合使用!
虽然维度和指标可以独立使用,但常见的还是相互结合使用。维度和指标的值以及这些值之间的关系,使
您的数据具有了意义。为了挖掘尽可能多的深层次信息,维度通常与一个或多个指标关联在一起。
例如,维度“城市”可以与指标“人口”和“面积”相关联。有了这些数据,系统还可以创建“人口密度”等比值指 标,带来有关这些城市的更详细的深入信息。
11、事件分析:事件用来记录或者各种用户行为 。
12、留存分析:
分析用户活跃度用户参与度的模型。一般统计是发生了某行为的事件用户中,其中有多少又发生了后续的某种行为事件。
涉及到RR(留存率):RR(Retention Rate)表示留存率,要动手自己设计一个retention函数 哦!
13、漏斗分析模型:
1、漏斗步骤;
2. 漏斗的时间范围;
3.漏斗的窗口期
14、数仓分层
ODS层 :数据原始层
Data Warehouse(dw)层 :数据集市层
DWD(Data Warehouse Detail)明细数据层:一般保持和ODS层一样的数据力度
DWB(Data Warehouse Base)基础数据层,轻度聚合,中间表,提供公共指标的复用性
DWS(Data Warehouse Service)数据服务层,按照业务划分,提供数据查询服务
DIM层:维度层。有些数仓会将dwd层中的维度表单独抽离出来维护。
DM层:
存放使用DW层数据进行业务统计的结果,它们可能被用于线上可视化的指标分析,也可能用于进一步的数据挖掘使用。
数据分层的作用:
复杂问题简单化、减少重复计算、血缘追踪、架构更清晰
15、OLTP vs OLAP
15.1 区别:联机分析处理 VS 联机事务处理
联机分析处理(OLAP),数据量大,DML少。使用数据仓库模板。大数据分析
联机事务处理(OLTP),数据量少,DML频繁,并行事务处理多,但是一般都很短。使用一般用途或事务处 理模板。后端
15.2OLAP的分类
16、DAU(Daily Active User)预测
DAU(Daily Active User)预测。假设给定DNU(Daily New
User)每日新增用户,我们未来某一天的DAU能达到多少?比如未来100天我们能有多少活跃用户。应该由什么组成呢?
DAU:由当日新增用户和历史每天的新增用户在当日的留存用户组成的。举个栗子,比如我们的产品在1月1日首发,新增1000人,1月2日新增1500人,那么1月2日的DAU应用是1500+666(1000)=2166人,1月3日新增用户2000人,1月1日和1月2日的用户中在1月3日中还活跃的用户由1111人=2000+1111=3111人。
17、LeastSq:最小二乘法
利用样本数据拟合函数,要使用到最小二乘
18、数据仓库
数据仓库(DataWarehouse),一般缩写成DW、DWH。数据仓库是一个面向主题的(Subject
Oriented)、集成的(Integrate)、相对稳定的(Non-Volatile)、反映历史变化(Time Variant)的数据集合,用于支持管理决策
-- Bill Inmon
19、
表的种类和特征
事务事实表:可以看做是保存某一事务的日志数据,事务一旦被提交就成为历史数据,只能以增量的方式维护。
维度表:从某个角度观察事实数据的窗口,存储的数据用来从某个角度描述事实。
全量表:保存每天所有的最新状态的数据
增量表:当数据改变时,将这个改变和改变后的结果记录下来,就是增量表。(a账户分两次存了100块,增量表显示为a账户金额100,200,并分别记录变化时间)
拉链表:用特定字段维护缓慢变化维度的表
流水表:记录表中所有改变的表。
周期快照表:按固定周期对事实表进行统计生成的表,按时间段保存记录,增量更新。
累积快照表:按过程对事实表进行统计生成的表,将每个事务切分成多个小事务,明确开始和结束的状态,每个小事务只保存一条结果。
20、拉链表的实现
使用SCD策略维护特定字段实现。
SCD1:不保存历史数据,直接覆盖更新
SCD2:通过维护一个记录时间和一个过期时间来保存变化历史,增量更新
SCD3:通过维护一个历史字段来保存上次的数据,更新数据时,先检查旧数据是否存在,如果存在就把旧数据的最新值保存到新数据的旧值字段,采用覆盖更新的方式存储数据。
SCD4:单独建立一个历史维度表为该字段维护历史变化。
SCD5:混合使用123的维护策略。
21、数仓搭建
(建模流程)
业务建模
根据业务部门进行划分,理清部门之间的关系,然后将各个部门的具体业务程序化,与业务部门开会协商出需求的指标、保存年限、维度等等。总体来讲,就是要知道他们需要哪些指标以及他们能提供哪些数据。
业务建模的时间最长,而且与公司实际的业务环境息息相关,因此在这里需要根据实际生产环境和业务需求确认好数据仓库使用的工具和平台。
概念建模
将业务模型抽象化,分组合并类似的概念,细化概念,抽象出实体与实体之间的联系,理清各组概念之间的联系。说白了就是画图,把指标需要的哪些数据封装到一个实体里,实体与实体之间的关联等等用ER图表示出来。先画出局部ER图,最后再综合画出全局ER图。
逻辑建模
将概念模型实体化,具体考虑概念对应的属性,事件考虑事实属性,维度考虑维度属性。总体来说就是建表,前面已经画出了关系图,这里只要将表里头有哪些字段考虑出来就可以,如果是事实表就考虑事实字段和业务主键,如果是维度表就考虑维度属性,SCD策略等等。
在这里需要确定数据粒度,如果多个指标都用到一个字段,则取粒度最小的指标。如果不确定指标的量度,则取毫秒级作为粒度。
物理建模
综合现实的大数据平台、采集工具、etl工具、数仓组件、性能要求、管理要求等多方面因素,设计出具体的项目代码,完成数仓的搭建。
22、数据模型
星型模型
数仓(具体说是dwd层)中只有一张包含历史数据且不冗余的事实表和一组附属维度表,每个维度一张。事实表与维度表之间通过外键和主键关联。
星型模型的维度表可能存在冗余,因此是反三范式的,这种模型在数据维护上较麻烦,但是性能更高,业界普遍使用星型模型。
星型模型的难点在于拉链表的维护,拉链表一般不能有冗余。
雪花模型
针对星型模型的维度表进行扩展的模型,将维度表拆解成维度表+说明表,说明表又可以进一步拆分,最终形成事实表-维度表-说明表的多次连接。
雪花模型的表一般遵循三范式,在数据的维护上会很方便,但是多表join影响性能。
星系模型
多个事实表采用星型模型共享维度表,就形成了一个星系。
Data Vault模型
从上述模型中我们不难看出,如果解决了拉链表的维护问题,星型模型的缺陷就已经可以忽略。
Data Vault模型由中心表、链接表、附属表、PIT表组成,这里的中心表,事实上就是维度表,链接表就是事实表、附属表是拉链表。
Data Vault模型就是通过将拉链表从维度表中分离出来,来达到方便维护的目的。
首先,中心表是一组业务生命周期内绝不会变的维度表,打个比方就是java里头的常量,常量再怎么冗余也不会有影响。
链接表则是保存流水类数据的事实表,它通过外键与多张中心表连接,但不会连接附属表。
附属表则是从维度表中抽出来的可能会发生变化的字段或表,这一部分就采用拉链表的方式创建,中心表则通过外键关联附属表的主键。
从同一维度表拆出来的字段根据变化维度不同可能还要分成多表存储,为了避免时效不一致,所以还会建立一张PIT表,用于维护附属表的变化历史。
中心表通过外键与PIT表相连,而PIT表则为每个附属表的主键都准备了一个时间字段保存数据的更新时间。
23、
数仓与数据库的区别
操作上:数据库是面向事务的,往往是行级操作;数仓则是面向分析的,往往是范围操作
功能上:数据库提供即时的增删改查,数仓则寻求的是分析数据提供决策支持
设计上:数据库基于ER模型,面向业务;数仓基于星型/雪花模型,面向主题
数据上:数据库只保存最新的、近期的数据;数仓则保存所有数据
性能上:数据库往往依靠索引快速返回;数仓则往往需要大范围磁盘扫描
数据量:数据库数据一般为GB级别,数仓的数据则往往上百TB
响应速度:数据库是毫秒级,数仓任务的执行时间往往数小时
存储上:数据库是真实的物理存储,数仓则是逻辑存储。