• 【数仓】经典面试题总结-史上最全面试题思维导图总结(2022最新版)


    写在前面

    🍁个人主页:HNUJSY
    ✨本期专栏:《史上最全经典面试题总结》欢迎订阅学习~
    📌Xmind文件获取:GitHub 持续更新中,别忘了 star 喔~


    「Java学习+面试指南」思维导图,计算机自学指南,包括Java基础、JVM、数据库、mysql、redis、计算机网络、算法、数据结构、操作系统等,后台技术栈/架构师之路/全栈开发社区,阿里,腾讯,百度,美团,头条等春招/秋招/校招/面试

    思维导图(png格式可下载放大)

    在这里插入图片描述

    数仓知识

    shell

    ps -ef

    top

    • 查看进程

    natstat

    • 查看端口号

    df -h

    • 查看磁盘空间

    4个工具

    • awk
    • sort
    • sed
    • cut

    hadoop

    入门

    • 端口号
      • 9870
        • hdfs
          • 50070
      • 8088
        • yarn
      • 19888
        • 查看任务情况
      • 9000、8020、9820
        • 外部访问
          • 9000、8020
    • 配置文件
      • core-site.xml
      • hdfs-site.xml
      • yarn-site.xml
      • mapred-site.xml
      • workers
        • slaves

    hdfs

    • 读写流程
    • 小文件
      • 危害
        • namenode受不了
          一个文件块150字节
          128g/150bytes=128 1024m1024kb*1024bytes=9亿
        • 一个文件块->一个maptask 1g内存
      • 解决
        • CombineTextinputformat
          • 减少maptask
        • har归档
          • 类似文件压缩
        • jvm重用
          • 配置文件
    • 副本
      • 3
    • 块大小
      • 1.x 64m
      • 2.x 3.x 128m
      • 本地 32m
      • 企业开发 128m、256m
      • 块大小根据传输速率设置

    mapreduce

    • shuffle
      • map方法之后,reduce方法之前混洗的过程
    • map
      • getpartition 标记数据是哪一个分区的
        • 环形缓冲区 100m 80% 溢写
          • 归并
            • 写入磁盘
              • 拉取到内存,不够持久化到磁盘
                • 归并
                  • reduce
                  • reduce之后压缩:
                    永久保存,压缩越小
                    下一个map输入:数据量小:快 spappy/lzo 数据量大:切片 bzip2/lzop
                • 分组
              • 默认拉取5个 优化性能高10-20个
              • 优化增加内存
            • 优化:压缩,减少磁盘io
              快 spappy/lzo
          • 默认一次拉取10个,可优化20个
        • 优化 200m 90%,影响溢写文件个数
        • 排序:快排
          对key的索引排序
          按照字典顺序排
          • 溢写文件
        • 对溢写文件提前combiner 不影响最终结果
      • 优化:自定义分区
      • map之前压缩
        数据量小:快 spappy/lzo
        数据量大:切片 bzip2/lzop
    • 排序
      • map 快排、归并
      • reduce 归并、分组
    • 内存参数
      • nodemanager
        • 默认8g->100g
      • 单任务默认内存8G 分布式
        128M数据->1G内存
        • maptask 1G
          128M数据->1G内存
        • reducetask 1G
          128M数据->1G内存

    yarn

    • 工作机制
      • client
        • resourcemanager
          接受appid请求并返回集群路径
        • 向路径提交
          • xml
            • 配置文件 参数
          • jar
            • 代码
          • 切片
            • 决定maptask数量
        • resourcemanager
          申请 appmaster task
          • task管理
            • nodemanager container 空闲就来领取task 成为appmaster
              • 从路径获取文件
                • 切片决定maptask数量
              • 向resourcemanager申请maptask
                • nodemanager container 空闲就来领取task 由appmaster开启maptask 完成之后持久化到磁盘等待reduce
                  • 开启reducetask
    • 调度器
      • fifo
        • 先进先出
          • 单队列,串行,几乎不用
      • 容量调度器
        • 底层是fifo
          • 支持多队列,可以借用其他队列资源
            • 先进入的任务优先执行
              • 默认1个队列,按照分析引擎创建队列(spark、flink、hive),按照业务分:登录、注册、购物车
      • 公平调度器
        • 支持多队列,可以借用其他队列资源
          • 公平享有队列资源,谁的缺额多,分配资源多
      • apache 默认容量调度
      • 并发度要求比较高,选择公平,中大型
        并发度低,服务器性能差,选择容量

    zookeeper

    • 选举机制
      • 半数机制
    • 安装台数
      • 10-3
      • 20-5
      • 50-7
      • 100-7
      • 台数越多,增加可靠性,效率低

    flume

    组成

    • source、channel、sink、put、take
      • taildirsource
        • 断点续传、多目录
        • 1.7实现
        • 自定义实现source
          • offset持久化到磁盘
        • taildirsource挂了
          • 不会丢数据、有可能有重复数据
            • 自身
              • 采用事务方式、效率低
            • 下一级处理
              • hive、dwd、sparkstream,groupby,开窗取窗口第一条
        • 不支持递归遍历文件夹
          • 不支持
            • 自定义
              • 递归+读取数据
      • channel
        • file channel
          • 基于磁盘,可靠性高,性能低
        • memory channel
          • 基于内存,可靠性低,性能高
        • kafka channel
          • 数据存储在kafka里面,磁盘,可靠性高
          • 优于memory,直接进入kafka
        • 下一级kafka选择memory
          下一级不是 可靠选file、性能选memory
      • hdfs sink
        • 小文件
          • 大小128m、时间1-2小时,event格式禁止0
      • 拦截器
        • etl拦截器
          • 提前过滤
        • 时间戳拦截器
          • 获取日志里面的数据时间,根据这个时间创建hdsf目录
        • 自定义拦截器
          • 定义类实现interceptor接口,重写里面4个方法初始化、关闭、单event、多event,builder
        • 可以不用,到下一步再处理
      • 选择器
        • replicating 默认
          • 把数据发往下一级所有通道
        • muliplexing
          • 把数据选择性发往指定通道
      • 监控器
        • 监控put/take事务尝试提交的次数远远的大于最终提交成功的次数说明flume异常。
        • 自身:增加内存
        • 找兄弟:增加服务器
      • 优化
        • file channel 能配置多目录就配置多目录

    三个器

    • 拦截器、选择器、监控器

    挂了怎么办

    • channel
      • memory
        • 100个
      • file
        • 100w个
    • taildir source
      • 不会丢失,可能重复

    kafka

    基本信息

    • producer
    • brokder
    • consumer
    • zookeeper
      • broker
        • id
      • comsumer
        • offset
      • 没有producer
      • 安装多少台
        • 2*(生产者峰值生产速率*副本/100)+1=3
        • 压测:生产者峰值生产速率、消费者峰值消费速率
    • 副本
      • 2-3个
        • 默认一个 一般2
        • 副本多:可靠性高,性能降低
    • 数据量
      • 100万日活 100条 1k 每天一亿条
      • 一亿条/(24h*3600s)=1150条/s
      • 1m/s
      • 7-12点 20m/s-50m/s
    • 数据保存多久
      • 7-3天
    • 磁盘空间
      • 100g2个副本3天/0.7
    • 分区
      • 提高并发度
        • 先设置一个
        • 生产者峰值生产速率tp、消费者峰值消费速率tc
        • 期望的吞吐量t
        • 期望的吞吐量t 100m/s 分区数=t/min(tp,tc)
        • 100/20= 5个分区
    • 分区分配策略
      • range 默认
        • 统一发生数据倾斜
      • roundrobin
        • 采用hash方式打散,再采用轮询的方式执行
    • isr
      • 解决leader挂了谁当老大
        • 延迟时间
          • 旧版本:采用延迟时间、延迟条数
          • 新版本:采用延迟时间
    • topic合适
      • 满足下一级所有消费者

    挂了

    • 短期flume channel缓冲数据
    • 长期:日志服务器保留30天日志

    丢了

    • ack
      • 0 发过来数据,不需要应答
        • 可靠性最差,传输性能最好
      • 1 发过来数据,leader应答
        • 可靠性一般,传输性一般
      • -1 发过来数据,leader和follower共同应答
        • ……

    重复了

    • 事务、幂等性+ack=-1
      • 幂等性
        • 单分区单会话内数据不重复
          • 关闭就重启
        • 利用id判断重复
          • 效率低
      • 事务
        • 同步,效率低
    • 下一级处理

    积压了

    • 增加分区,增加消费者对应cpu核数
      • 1个cpu两个线程,消费两个分区
    • 增加消费者batchsize
      • 日志是1k,1000条/s
        • 提高消费速度

    优化

    • 日志保存3天
    • 两个副本
    • 增加通信延迟
      • 减少重传
    • 内存
      • 默认1G,不要超过6G

    高效读写

    • 是集群、分区
    • 顺序读写600m/s 随机速写100m/s
    • 零拷贝
      • 内存到内核,内核到内存

    传输了一条2m日志文件

    • 卡顿现象
      • 调整最大字节数

    过期数据清理

    • 删除或者压缩

    数据是否有序

    • 单分区有序,多分区分区与分区间无序

    hive

    组成

    • 元数据
      • 多人开发 mysql
    • 客户端
      • 4个器 编译器、解析器、优化器、执行器
        sql变换
        • mapreduce
          • hdfs

    与mysql区别

    • hive
      • 大数据
        • 数据量大快
          • 海量数据查询
    • mysql
      • 小数据
        • 数据量小块
          • 小数据量查询

    内部表和外部表

    • 内部表
      • 删除数据:元数据、原始数据
    • 外部表
      • 删除数据:元数据
    • 企业中,临时使用创建内部表,绝大多数外部表

    4个by

    • order by
      • 全局排序 (数据倾斜)
        • 很少使用
    • sort by
      • 排序
    • depart by
      • 分区
        • 企业一般分区+排序
    • class by
      • sort by+depart by

    系统函数

    • date_add
      • date_sub
        • next_day
          • last_day
            • get_json_object

    自定义函数

    • 自定义UDF函数
      • 1进1出 一行
        • 定义类,继承UDF,重写evaluate方法
    • 自定义UDTF函数
      • 多进多出 一进多出
        • 定义类继承G…UDTF,重写里面3个方法初始化(定义名称、校验返回值类型)、close process
          • 打包+上传HDFS=》在hive客户端创建

    窗口函数

    • rank
    • over
    • topn

    优化

    • mapjoin 默认打开,不要关闭
    • 行列过滤 join where=》where join
    • 分区
    • 小文件

    数仓

    采集通道

    • 前端埋点产生日志行为数据logfile
      • flume
        • kafka
          • flume/java
            • hdfs
    • 后台产生的业务数据mysq
      • sqoop/datax/kettle
        • hdfs

    数仓建模

    • hdfs
      • hive、spark

    数据分析

    • 即时查询 kylin、prosto

    可视化

    • superset

    输出

    • 报表系统、用户画像、推荐系统

    权限管理

    元数据管理:atlas

    数据质量

    • shell griffin
  • 相关阅读:
    java读取CSV文件
    2022/7/28
    极客蒂姆·斯威尼:用虚幻引擎,修补真实世界(下) | 人物志048
    C++入门2
    【Transformers】第 6 章 :总结
    极简网络用户手册(1)
    Vue+NodeJS+MongoDB实现邮箱验证注册、登录
    【Java】抽象类&继承的综合案例
    批量下载Sentinel数据脚本2023
    redis_two
  • 原文地址:https://blog.csdn.net/HNUPCJ/article/details/127458107