一 ,知识回顾 :

1 ,mr 提交过程 : resourceManager ( 资源管理 + 任务调度 )

  1. ApplicationsManager 负责任务调度
  2. ResourceScheduler 负责资源管理
    在这里插入图片描述

2 ,shuffle 过程 : ( mapTask + reduceTask + 环形缓冲区 )

在这里插入图片描述
在这里插入图片描述

3 ,zookeeper :

  1. 选举机制。
  2. 节点 : ( 临时,永久 ) ,( 普通节点,序列节点 )
  3. 监控服务上下线 : 只能监控几次 ( 某个服务器在 zk 创建临时节点,当他下线后,这个节点就消失,伏虎段就连接不到这个节点了。 )
  4. 一般部署几台 : 5 台

4 ,依赖于 zk 的组件 :

  1. hbase
  2. kafka

5 ,kafka 的 offset 是一消费者组的目录来存储的 ( 同组不重复消费 )

  1. 不重复消费 : 偏移量存储在消费者组文件夹下
    在这里插入图片描述
  2. 思考 : 6 个分区,1 个消费者组,3 个消费者,怎么分配
    在这里插入图片描述
  3. 每人两个
  4. 消费策略 :
    1 ,RangeAssignor 策略 : 6 / 3 = 2 ,每人两个
    在这里插入图片描述
    2 ,RoundRobinAssignor 策略 : 根据消费者名字的 hashCode 排序,依次分配
    在这里插入图片描述
  5. 重划分 : 如果消费者挂了
    一旦分区个数变化,或者消费者个数变化,就会进行消费重新划分。
  6. 为什么要分组 :
    如果一个消费者挂了,他的 offset 就没人知道了。
    组的好处,一个消费者挂了的话,他的 offset 是以组为单位保存的,那么其它的组成员,还可以去 zk 中找到 offset ,因为,offset 的保存形式是在组的节点下面。

6 ,hive 优化 :

  1. 去重 : 不用 distinct ,要用 group by
  2. 数据仓库原理 : 以后详细讨论
  3. 三范式 : 以后详细讨论

7 ,flume :

  1. 总体介绍 : flume 是一根自来水管,流水 ( 数据流 ) 用的.
  2. 架构介绍 :
    在这里插入图片描述
  3. 内部运行原理 :
    source - channel 管理器 - 连接器链 - channel 管理器 - channel 选择器 - 如果必须 channel 报错,会回滚 - 如果非必须 channel 报错,不理他,继续走
  4. sink 组 :
    1 ,模式一 : 容灾
    同时给三个 sink 发数据
    2 ,模式二 : 负载均衡
    轮询发数据,先给 1 发,再给 2 发,再给 3 发 。
    在这里插入图片描述
  5. event 构成 : header + body
    header : 头部数据,k-v 对
    body :真正的数据

8 ,flume 的 event 的 header :

把一个 event 放到指定 kafka 的 topic 的指定分区中。

9 ,flume 事务 :

  1. 错误 : 如果丢数据
  2. 反应 : 会重发数据
  3. 结果 : 单条数据不丢失,其他的数据,大量重复发送。

10 ,flume 容灾 :

必须同机房的多重拓扑结构

11 ,消息队列 :

  1. 很久之前 : consumer 直接对接 producer
  2. 隐患 : 数据量的突增,突减,会给服务器带来很大的压力
  3. 消息队列 : 消峰 ( 数据的峰值,不给服务器造成很大的压力) ,不丢数据。

12 ,kafka : 作用 ( 不丢数据,消峰 )

在这里插入图片描述

13 ,flink 优势 : 机器学习

机器学习 : 不断迭代的过程

14 ,滴滴 :

flink + go 语言

15 ,sqoop : 数据迁移工具

  1. 如何做的数据的批量导入
  2. 能做什么 : 关系型数据库 <–> hdfs

16 ,关系型数据库之间的数据迁移工具 :

  1. 有很多
  2. 最好用的 : DB2DB

17 ,更厉害的数据迁移工具 : DATAX

  1. 能够支持更多的源和目的地
  2. 功能 : 几乎可以做所有事情
  3. 开发者 : 阿里
  4. 怎么用 : 单节点,因为阿里没开源告诉我们,分布式怎么用
    在这里插入图片描述
    在这里插入图片描述

18 ,hbase : 先横向拆分,再纵向拆分 ( 只能存取,不能函数查询 )

  1. 横向 : 数据量增大的时候,region 分裂。
  2. 纵向 : 根据列簇,划分 store
  3. 列簇 : 越少越好
  4. 原因 :
    1 ,一个列簇 = n × store
    2 ,每个 store 都有 memoryStore
    3 ,只要一个 memoryStore 满了,就全体刷新。
  5. 写数据 :先写到 wal( hlog 日志文件 ) 中一份,再写到 memoryStore ( 内存 ) 一份
  6. 读数据 :
    1 ,去 zk ,得到 meta 所在 resionSServer。
    2 ,去那台机器,找到 meta 表,查到我们需要的 rowkey 所在的 regionServer。
    3 ,去那台机器,获取数据。
    4 ,到了后,找到 blockCache ,看看之前有没有读取过。
    5 ,有,就直接拿走。
    6 ,没有,就去 memoryStore 找数据。
    7 ,再没有,blockCache 上有所有的 hfile 的索引。
    8 ,先确定数据在哪个 hfile 上
    9 ,hfile 的 rowkey 是从大到小排序的
    10,我们最后,就通过 rowkey 从 hfile 中读取数据。
  7. compact : 合并
    1 ,将多个 storeFile 合并成一个。
    2 ,minerCompact : 只管进行文件合并,不管删除。
    3 ,hbase 对一条数据的操作,只发生在同一条 hfile 中。
    4 ,majorCompact : 将所有 storeFile 合并起来,删除掉过期数据。
  8. minerCompact 和 majorCompact 比较
    minerCompact : 只做磁盘文件合并
    majorCompact : 把多个 storeFile 合并,重写一个新的 storeFile 文件,删除过期数据。造成大量磁盘 IO ,网络传输。
  9. 实际工作中 : 隔断时间,系统自动 compact
  10. 或者 : 关掉自动 compact ,我们在机器空闲的时候,手动去做 compact 操作。

二 ,大数据应用 : 平台数据分析 ( etl )

1 ,数据来源 :

绝大多数 : 日志

2 ,解决的问题 :

从海量的日志数据中提取出对平台发展有利的信息。

3 ,数据分类 :

  1. 业务数据 : mysql 中 ( 商品信息,用户信息,常用数据 )
  2. 用户行为数据 :

4 ,数据仓库 :分层 ( 可以分很多层,不一定多少层 )

  1. ODS 层 : Operational Data Store ( 贴元层 ) 原始数据
    原始数据 :日志或者关系型数据库,并通过Flume、Sqoop、Kettle等etl工具导入到HDFS,并映射到HIVE的数据仓库表中。
  2. DAD 层 : data warehouse detail ( 细节数据层 ) 清洗过后的数据,建了 ( 事实表,维度表 )
    过滤 : 将 ods 层的数据,处理后得到的,数据清洗( 垃圾数据 ),数据脱敏( 电话,住址 )
    事实表,维度表,维度建模。
  3. DWB:data warehouse base ( 基础数据层 )
    存储的是客观数据,一般用作中间层,可以认为是大量指标的数据层。
  4. DWS 层 : data warehouse service ( 服务数据层 ) 有效数据表
    整合汇总成分析某一个主题域的服务数据,一般是宽表。
  5. DM 层 : 从 dws 中的表中,查数据,可以做报表了。

在这里插入图片描述

5 ,数据仓库 :作用

把公司的所有数据,全部拿过来,为不同的部门提供数据支持。

6 ,宽表 :

  1. 作用 :很多张表合并到一起,组成一张大表。
  2. 目的 : 一次 join 就是一个 mr 。
  3. 关系型数据库 : 表数据不冗余。
  4. 数据仓库 : 通过增加数据的冗余,提高查询性能。
    通过数据冗余,减少 join 操作。
  5. 根本原因 :
    1 ,mysql 需要考虑存储空间,资源宝贵。
    2 ,hive 不需要考虑存储空间,我们的空间无限大。
  6. 存储什么数据 :
    1 ,mysql : 最新数据。
    2 ,hive : 全部的历史数据。

7 ,数据仓库 : 包括什么

在这里插入图片描述

三 ,大数据应用 : 产品数据分析

1 ,目前互联网创业 :

手机 APP

2 ,怎么看手机火不火 :

  1. 日活 : 每天活跃用户
  2. 日新 : 每天新增的用户

3 ,问题 : 怎么求日新 ?

  1. 通过用户 id ,聚合。
  2. 查询 : 这个用户的最早启动时间。
  3. 确定 : 如果是今天,那么,他就是日新。

4 ,SDK : 日志采集系统

  1. app 启动日志。
  2. 页面跳转日志。
  3. 错误日志。

5 ,离线分析 :

  1. 采集 : flume
  2. etl ( 清洗 ) : spark / mr ( 可以在进入 hive 前,或者进入 hive 后 )
  3. 日志存储
    1 ,离线 : hive ( 存储格式 : 行,列 - parquet ),如果用 spark ,就用 parquet
    2 ,实时 : mysql ,hbase ( 这两个没有可比性 )
    在这里插入图片描述

6 ,产品信息分析 :

  1. 新增
  2. 活跃 : 去重
  3. 一次也没有活跃过
  4. 启动次数 : 不去重
  5. 版本分布统计
  6. 留存率 : 上周注册,本周依然使用
  7. 新鲜度 : 新增用户 / 活跃用户
    在这里插入图片描述

四 ,大数据应用 : 用户行为分析

1 ,用户画像

在这里插入图片描述

2 ,根据用户行为,给他更好的服务

3 ,提升网站对于用户的粘性

4 ,步骤 :

在这里插入图片描述

5 ,用户行为 :

  1. 点击
  2. 输入

6 ,快消品 :

卫生纸

7 ,非快消品 :

手机,电视,买过以后,不适合再次推荐

8 ,典型的算法公司 :

  1. 公司名 :北京微播视界科技有限公司
  2. 产品 : 火山小视频,抖音,今日头条
Logo

北京人形旗下天工造物具身智能开源社区,聚焦具身天工与慧思开物两大平台

更多推荐