一、Linux
1)常用的高级命令top iotop ps -ef df -h natstat jmap -heap tar rpm
2)查看进程 查看端口号 查看磁盘使用情况 查看某个进程内存ps -ef natstat df -h jmap -heap
二、shell
1、用过哪些工具awk sed sort cut python
2、写过哪些shell脚本1)分发脚本2)启停脚本(掌握)#!/bin/bashcase $1 in "start")for i in hadoop102 hadoop103 hadoop104dossh $i "绝对路径"done;;"stop");;esac3)与mysql的导入导出mysql hdfsdataxhdfs mysql datax 4)数仓层级内部ods =》 ads
3、'' 不解析里面变量的值"" 解析里面变量的值 嵌套 : 看谁在最外面
三、Hadoop
1、入门1)常用端口号2.x 50070 8088 19888 9000/80203.x 9870 8088 19888 9820/9000/80202)常用配置2.x core-site.xml hdfs-site.xml mapred-site.xml yarn-site.xml slaves3.x core-site.xml hdfs-site.xml mapred-site.xml yarn-site.xml workers2、HDFS1)hdfs 读写流程 笔试题(有没有朋友)2)小文件的危害(1)存储 NameNode 150字节 128g*(1024m * 1024kb*1024字节) / 150字节 = 9.1亿(2)计算 默认切片规则,每个文件单独切片。1字节 文件 =》 1个maptask 1G 3)小文件怎么解决(1)har归档(2)CombineTextInputformat 把所有文件放到一起统一切片(3)JVM重用开始 2s干活 3s......干活 3s结束 2s4)副本数 3个5)块大小1.x 64m2.x 3.x 128m本地 32m企业 128m 256m 512m块大小取决于 硬盘的读写速度普通机械硬盘 100m/s 128m固态硬盘普通 300m/s 256m固态硬盘 高级 600m/s 512m 3、mrshuffle 及其优化map方法之后,reduce方法之前混洗的过程 叫shuffle4、yarn1)yarn的工作机制2)调度器(1)有几种FIFO 容量 公平(2)默认是哪个调度器apache 容量 CDH 公平(3)FIFO特点先进先出 单队列 在企业中很少使用(4)容量特点(并行度低一些)支持多队列 优先保证先进入的任务执行 资源不够时,可以借(5)公平特点(并行度高)支持多队列 每个任务公平享有队列资源 资源不够时,可以借(6)在企业中怎么选择如果对并行度要求比较高,通常选择 公平调度器 中大型公司如果对并行度要求不高,通常选择容量调度器 中小公司(7)公平、容量默认几个队列default (8)创建多队列hive mr spark flink 怕公司来了一个菜鸟 :递归死循环rm -rf /按照部门 业务线登录 x注册 x 订单 √物流 √618 1111 降级使用
四、zk
1、选举机制 半数机制
2、安装什么数台 奇数台
3、10台服务器 安装多少zk 3台20台服务器 安装多少zk 5台50台服务器 安装多少zk 7台100台服务器 安装多少zk 11台200台服务器 安装多少zk 11台zk台数越多好处: 可靠性高; 坏处:效率低
4、常用命令ls get create delete deleteall
五、Flume(3件事)
1、组成1)taildir source (1)断点续传、多目录(2)Apache 1.7 版本产生的 CDH 1.6版本产生的(3)自定义source 有可能产生重复数据(4)自身想办法: 事务找兄弟: 下游处理 hive dwd层中 spark flink redis2)channel(1)file channel 磁盘 可靠性高 效率低(2)memory channel 内存 可靠性低 效率高(3)kafka channel kafka 磁盘 可靠性高 效率高 kafka channel》 memory channel + kafka sinkapache 1.6 版本产生的 event(header,body)1.7时解决 bug 后续大量使用(4)在企业中怎么选择如果下游是kafka ,优先选择 kafka channel 如果下游不是kafka ,如果要求可靠性高,选择file channel 和钱相关如果要求效率,选择 memory channel 普通日志3)sink(1)HDFS sink 控制大小 128m 控制时间 30分钟event个数 =0 禁止使用2、三个器1)拦截器ETL拦截器:判断json是否完整时间戳拦截器:解决零点漂移问题自定义拦截器步骤:定义类 实现 interceptor接口 重写4个方法 初始化 关闭 单event 多event静态内部类builder打包 + 上传 flume/lib 在配置文件中 全类名 $builder 2)选择器re 默认 把数据发往下一级所有通道mu 把数据选择性发往指定通道3)监控器g 发现事务 尝试提交的次数远远的大于最终success 的次数 提高内存flume-env.sh 4-6g 增加flume台数 618 1111日志服务器配置 8g 16g 3、挂了及优化挂了:重启如果是memory channel 有可能丢失 数据 100个event sink(1)HDFS sink 控制大小 128m 控制时间 30分钟event个数 =0 禁止使用提高内存flume-env.sh 4-6g 增加flume台数 618 1111
六、Kafka (33道)
1、组成 (生产者 、broker 、消费者 zk)
2、安装多少台2 * (生产者峰值生产速率 * 副本 / 100) + 1 = 3台
3、压测:生产者峰值生产速率(50m/s ) 消费者峰值消费速率
4、副本:默认1个 生产环境 2-3个 2个居多副本多:好处,可靠性高; 坏处 :效率低 增加存储资源
5、平均速率100万日活 * 100条 = 1亿条1亿条/ (24小时 * 3600s) = 1150条/s1条日志: 0.5k - 2k 1k 1m/s 峰值:8-12点 12点 -14点 小高峰 14点-18点 19点 -24点 高峰20m/s 30m/s
6、 日志保存多久默认保存7天 3天7、是否做了监控kafka eagle manager montor
8、分区数增加分区 可以提高并行度期望kafka 吞吐量 100m/s t 生产峰值生产速率 20m/s tp消费者峰值消费速率 40m/s tc分区数:= t /min(tp, tc) = 100/ 20 = 5个分区
9、生产者分区策略指定了分区,数据发送到指定分区如果没有指定分区,可以指定了key,按照key的hashcode值%分区数没有指定分区,也没有指定key,按照粘性分区
10、如果提高生产者吞吐量1)32m缓存 =》 64m2)批次大小16k => 32k3)linger.ms 0 => 5-100ms4)压缩 snappy zstd
11、如何保证数据可靠 acks:0:生产者发送过来数据,就不管了,在生产环境中很少使用1:生产者发送过来数据,Leader收到之后,并应答-1:生产者发送过来数据,Leader和isr队列里面所有的follower都收齐 了,在应答在生产环境中,如果产生的是普通日志,通常选择 1; 如果传输的是和钱相关的,选择-1acks = -1 + 副本数 大于等于2 isr队列里面的最小副本大于等于212、如何保存数据不重复幂等性(pid ,分区号, 序列号) + 事务(5个api 初始化事务、启动事务、提交事务、事务终止、offset)13、数据有序:单分区内14、乱序inflight = 5没有幂等性时处理办法:inflight = 1有幂等性:inflight小于等于5
15、如何做到高效读写的1)Kafka本身是集群 可以增加分区 2)index(稀疏索引) 4k 1条索引3)采用的顺序读写 600m/s 4)零拷贝 + 页缓存
16、删除策略delete 压缩 key v3
17、消费数据 拉取数据
18、消费策略range(7个分区 3个消费者)针对每个topic 容易产生数据倾斜roundbin(7个分区 3个消费者)针对所有的topic粘性range + 粘性 roundbin + 粘性
19、再平衡条件消费者 会每隔3s中和消费者组协调器通信1一次,如果超过45s ,会认为消费者挂掉,触发再平衡;如果消费者消费一批数据的时间超过了5分钟没有再拉取数据,说明消费者挂了,会触发再平衡
20、可以指定任意位置消费0 -----------------8999当前--from-beginingoffset 1000位置seek(1000)
21、按照时间进行消费12点 以后的都不用了把时间转换为offset ,在调用seek()
22、kafka数据积压了增加分区 同时要求消费者增加消费CPU核数消费者增加每批次拉取的条数 默认500条 1000-3000条增加50m => 60m
23、kafka如何提高吞吐量1)32m缓存 =》 64m2)批次大小16k => 32k3)linger.ms 0 => 5-100ms4)压缩 snappy zstd 增加分区 同时要求消费者增加消费CPU核数消费者增加每批次拉取的条数 默认500条 1000-3000条增加50m => 60m
24、硬盘怎么选择选择机械硬盘 底层是顺序读写 600m/s
25、网络带宽选择生产者峰值生产速率 30m/s 百兆带宽 (bit 1字节 = 8bit) 实际只有12.5m/s 选择千兆带宽。
26、kafka内存默认内存1g jmap -heap 进程号 查看内存配置 10g -15g
27、CPU 选择32 核 28、可以服役新节点、可以退役旧节点29、kafka挂了怎么办正常重启 (内存 -jmap -heap 、查看磁盘 df -h、查看cpu top)误删 :服役新节点 退役旧节点方式。
30、 多少个Topic满足下一级所有消费者 可以适当的聚合
31、Kafka单条日志传输大小1m
七、Hive(10件事)
1、组成 2、与mysql等关系数据库的区别 mysql hive速度 小 快 大 查询快数据量 小 大 除了语法接近以外,其他都不相同3、内部表和外部表区别删除数据: 元数据 原始数据内部表删除数据:元数据 原始数据外部表删除数据:元数据在企业中,绝大多数情况,创建的是外部表;只有自己使用的临时表,创建内部表4、4个byorder by 全局排序 慎用 55tsort by 排序 d by 分区 sort by + d by c by 5、系统函数date_add date_sub lastday next_day date_formatget_json_object concat explode nvl 6、自定义函数自定义UDF 一进一出(一行进入,一行输出 map )定义类 继承 G..UDF evaluate UDTF(一进多出, flatmap)定义类 继承 G..UDTF 重写三个方法 初始化(校验返回值类型和名称) 关闭 process(核心逻辑)UDAF(多进一出 sum)打包 + 上传到HDFS路径 在hive的客户端进行注册注意事项: 自定义函数在shell脚本中使用时,一定要在函数前面加上库名否则会报函数找不到。7、开窗函数over rank 笔试题 大量出现 分组topn 排名8、优化 (hive on spark 调优 小文件 数据倾斜 谓词下推 mapjoin )1)mapjoin默认打开,不要关闭 大小表join2)提前进行行列过滤join where =>where join 3)创建分区表 防止后续全表扫描 创建分桶表 对未知的海量数据,进行提前采样。防止数据倾斜产生。4)小文件处理(1)JVM重用(2)combinehiveinputformat 把多个文件放到一起统一切片 减少maptask个数(3)merge 如果是maponly任务,默认打开;如果是mr,需要手动打开。将小于16m的文件 =》 256m5)采样压缩map(snappy) reduce 6)采用列式存储orc(优秀) p id name age 1 zs 182 lishi 19行:1 zs 18 2 lishi 19列:1 2 zs lishi 18 19select name from user 7)可以提前combiner (有前提条件,不能影响最终的业务逻辑)at,1at,1 at,3at,18)合理的设置map个数和reduce个数reduce个数 不要太多也不能太少; 128m => 1g内存map个数 由切片个数绝对 128m => 1g内存切片大小:= max(0, min(块大小,long的最大值))9)更换引擎mr => hive on spark mr spark sql tez (presto) (hive的生态要更好一些 兼容性更强 元数据管理、权限管理)9、数据倾斜数据倾斜是 数据量多的是数据量少的 执行时间的20倍,就会认为发生数据倾斜618按照各个省份统计交易额;按照个数渠道统计下载量;发生了数据倾斜,当时执行了 4-5个小时; 发现统计北京、上海、深圳的任务一直在执行,卡在了99% 。认为发生了数据倾斜。 当天数量是平时 的 30-50倍。任务收到停下。加上处理数据倾斜的的参数set hive.groupby.skewindata = true;
效果: 执行 30-40分钟,任务解决了。10、杂七杂八
八、datax
1、底层 1个进程 多个线程sqoop (默认4个 mr )
2、datax如何调优1)datax可以调整并行度2)调整内存
3、在使用datax过程中遇到哪些问题mysql hive (hdfs)dataxnull \N要求hive建表时 用null 来存储空值sqoop (有对应参数可以将null => \N)hdfs mysql datax (有参数)\N null
4、datax什么时候执行00:10分钟开始执行
九、maxwell
mysql oracle mongodb
可以增量同步 也可以全量同步
canal flinkcdc de... ogg 支持断点续传 也可以全量同步
十、ds 海豚调度器
1、什么时候执行业务数据:00:10分钟开始执行用户行为数据:00:30分钟开始执行
2、ds 里面的任务挂了 报警 发邮件,打电话(睿象云)(广东)起床 =》 打开电脑 远程连接公司服务器 =》 尝试手动执行 还是不行; 把这个任务停止掉; 第二天去公司解决。(小文件过度、 数据倾斜 )3、ds的服务挂了 重启; (查看内存、查看磁盘、查看进程)
4、ds每天跑多少指标平时 100个左右; 如果搞活动150-200个
十一、spark
1、入门 1)spark是解决什么问题的 海量数据的计算hadoop 是解决海量数据的存储和计算2)spark 为什么有自己的调度器 yarn出现的晚3)spark的运行模式(1)local 本地 调试(2)standalone 用在 要求性能比较高的场景 国外使用 (3)yarn 在国内大量使用 解耦(4)m 在国内几乎没有使用的 不会。(5)k8s 在javaee里面用的比较多;在大数据场景下,问题非常多,目前不是特别成熟,慎重使用4)常用端口号4040 spark shell 7077 hadoop 9820/9000/80208080 hadoop 808818080 hadoop 198885)手写wordcount现在要求手写 flink wordcount topn2、spark core 1)代码都是在哪运行D E (和算子紧密相关的)2)rdd的五大属性(1)标记数据是哪个分区(2)对数据进行计算(3)分区器(4)血缘依赖(5)移动数据不如移动计算3)转换算子(1)单value map mapp mappwflatmap filter c true shuffle false 没有shuffle 缩减分区repartition true shuffle 重写分区(2)双value交并差 拉链 zip (3)keyvaluepartitionby groupbykey 没有预聚合操作reducebykey 有预聚合操作reducebykey 没有初始值 分区内和分区间逻辑相同foldbykey 有初始值 分区内和分区间逻辑相同agg..bykey 有初始值 分区内和分区间逻辑可以不相同combinebykey 有初始值(可以变换结构) 分区内和分区间逻辑可以不相同4)行动算子(1)reduce(2)first(3)take(4)foreach (5)foreachp ..5)序列化KRYO序列化6)血缘宽依赖 有shuffle (有聚合操作)窄依赖 没有shuffle 7)cache 缓存 不会改变血缘依赖关系 内存、磁盘checkpoint 会改变血缘依赖关系 第三方框架(HDFS 、HBase 、redis、mysql)8)任务怎么切分的(1)app sparkcontext(2)job 行动算子个数(3)stage shuffe的个数+1 (4)task 每个阶段,最后一个算子对应的 分区数9)广播变量10)累加器3、spark sql 1)rdd df ds 三者之间的转换2) 元数据 执行引擎 语法hive on spark mysql rdd (慢) hive spark on hive (spark sql) mysql df ds (快) spark sql内置hive derby外置hive mysql4、sparkstreaming (1)SparkStreaming是纯流式处理框架吗? 他的抽象是谁?(2)背压机制原理(3)Receiver和Direct模式原理(4)kafka的offset维护在什么位置( 0.10)(5)transform算子里面的代码都在什么端执行(6)UpdateStateByKey状态保存在什么位置? 有什么缺点(7)window有三个概念 用wordcount案例画图说明5、内核源码
十二、Flink
十三、从0到1
什么也没有 项目经理 java 转过来的招你进来 从0-1搭建大数据平台(离线 实时)你给我出一套大数据解决方案你就是大数据组组长1)都有什么需求啊?第一批指标 通道打通 留转G复活2)能出多少钱 什么方向50万 离线实时都做 先做离线5台服务器 * 4w =20w3)数据量增量 每天100g左右 历史数据 1T 4)能给我分配几个组员就你1个 可以找人5)需要的框架 (不能问)6)物理机 还是云主机云主机7)离线大约你给我多久时间交工 1个月 再招人 建模消耗时间拿电脑回学校(周六 周日)
十三、数仓建模准备
1、ER 模型 javaee 三范式
2、维度建模 星型模型(事实表周围一级维度) 减少join操作雪花模型(事实表周期多级维度) 星座(多个事实表)
3、事实表1)什么样的表是事实表; 有度量值的表; 可以累加的值(个数、件数、次数 、金额)2)同步策略数据量大: 同步时,通常采用 增量 有特殊的(加购 全量) 3)分类 (1)事务型事实表找原子操作 点击(加购、下单、物流、退款)①选择业务过程②声明粒度③确定维度④确定事实不足:①统计连续性指标、库存类指标 周期型快照事实表②多事实表的关联(最怕join 大表 join 大表)统计下单 到 物流的 平均时长 累积型快照事实表(2)周期快照事实表①选择业务过程②声明粒度 (天)③确定维度④确定事实(3)累积型快照事实表①选择业务过程 (选择多条业务线)②声明粒度 ③确定维度④确定事实 (确定多个事实表)4、维度表1)什么样的表是维度表没有度量值的表;通常都是一些描述信息(身高、体重 年龄、性别)2)同步策略数据量小: 同步时,通常采用 全量 有特殊的(用户表 增量)3)维度整合 (星型模型 减少join )商品表+ spu 表 + 商品品类表+ 商品一级分类、二级分类、三级分类=》 商品维度表省份表 + 地区表 =》 地区维度表活动信息表 + 活动规则表 =》 活动维度表4)用户表 =》 拉链 (缓慢变化维)
十四、数仓建模(*****) 留存 转换率 GMV 复购 活跃
1、数据调研 (50%) 总时间1个月 1周(平台搭建) 2周(数据调研)3周(动手做)4周(bug)1、熟悉公司的业务(javaee后台的表) 847张表 FM 喜马拉雅 (听书 加购 下单 支付 )播放相关入住的频道(10 、5 、6 )图片、临时表 、权限表 (不选择)2、需要找业务人员详细沟通确认 表与业务之间的关系3、和产品经理聊指标:原子指标、派生指标、衍生指标派生指标= 原子指标(业务过程 + 度量值 + 聚合逻辑) + 统计周期 + 统计粒度 + 业务限定统一口径2、明确数据域用户域:登录、注册流量域:页面、动作、故障、曝光、启动交易域:加购、下单、取消下单、支付、取消支付、物流、退货工具域:优惠卷领取、优惠卷使用(下单) 、优惠卷使用(支付)、互动域:收藏、评论、点赞3、构建业务矩阵用户、商品、活动、优惠卷、地区、时间用户域:登录、 √注册流量域:页面、动作、故障、曝光、启动交易域:加购、下单、取消下单、支付、取消支付、物流、退货工具域:优惠卷领取、优惠卷使用(下单) 、优惠卷使用(支付)、互动域:收藏、评论、点赞4、建模1)ODS层(1)保持数据原貌不做任何修改。备份作用。(2)采用分区表。 防止后续全表扫描(3)采用压缩 。 减少磁盘空间2)DIM层(1)维度整合商品表+ spu 表 + 商品品类表+ 商品一级分类、二级分类、三级分类=》 商品维度表省份表 + 地区表 =》 地区维度表活动信息表 + 活动规则表 =》 活动维度表(2)用户拉链表(缓慢变化维)3)DWD层优先考虑采用 事务型事实表(1)事务型事实表找原子操作①选择业务过程选择感兴趣的, 产品经理要求的图片、临时表 、权限表 (不选择)②声明粒度粒度:一行信息代表什么含义; 可以代表一次下单、一周下单、一个月下单要求最小粒度只要不做聚合操作;③确定维度未来统计的指标中需要: 用户、商品、活动、优惠卷、地区、时间④确定事实确定事实表的度量值 可以累加的值 (个数、件事、次数、金额)(2)周期快照事实表 (连续性指标、库存)(3)累积型快照事实表 (多事实表关联)5、指标体系建设ads层 要统计哪些指标 (一口气30个指标 日活、新增、留存、转化率、GMV 、复购率)dws层:指标拆分指标:原子指标、派生指标、衍生指标派生指标= 原子指标(业务过程 + 度量值 + 聚合逻辑) + 统计周期 + 统计粒度 + 业务限定交易总额(下单 + 金额 + sum) + 每天 + 省份 + 手机每天各个省份购买手机的交易总额找公共的信息 (业务过程 + 统计周期 + 统计粒度 )6、报表可视化
十五、每层做了哪些事
1、ods层1)保持数据原貌不做任何修改。备份作用。2)采用分区表。 防止后续全表扫描3)采用压缩。 减少磁盘空间2、DIM 层 & DWD层 除了 维度整合、用户拉链 维度建模 (事务型事实表、周期快照、累积快照)1)ETL数据清洗清洗的手段 hql mr spark SQL Python kettle 清洗规则: 和钱相关的,数字:[0-9]手机号身份证号网址URL的数据解析: 核心字段不能为空:超期数据删除;重复数据 后续需要过滤 清洗掉多少日志算合适:1万条日志 1 条(合理) 10 100 1000 9999条压缩 减少磁盘空间列式存储 加快查询速度创建分区表: 防止后续全表扫描2)对手机号、身份证号等敏感数据脱敏 (1)加**** 135 ****0013(2)md5加密 1324242539 =》md5(1324242539) 342491234719(唯一标识)(3)加权限 政府 银行 军工 13242425393、DWS层指标体系建设4、ADS层一口气三十个指标
十六 、测试
测试的手段包括,边界值、等价类等。
sum(a,b)
a:1-100
b:1-10000000000000000000000000000边界值: a:1 100,0 -1 101等价类:b: 6896544456667 875555编写测试用例:输入a=1 ,b=1 ,期望输出 2
测试报告:输入a=1 ,b=1 ,实际输出 1
测试程序员: 提bug 禅道、bugzila => 发邮件 =》 程序员 项目经理 测试经理程序1.0 评审
程序员: 可以解释 这不是一个bug,这是一个bug,下一个版本修改 1.1瀑布式开发 (1-5年)需求 100个 需求测试系统总体设计 系统集成测试软件概要设计 软件集成测试软件详细设计 软件单元测试代码编写 代码走查敏捷开发 小步快跑
需求 5个
代码编写
测试
。。。。。
需求 5个
代码编写
测试