ETL

  提取(Extract):从各种数据源中提取原始数据,数据可能是异构的;

  转换(Transform):对提取的数据进行清洗、处理和转换;

  加载(Load):将清洗后的数据加载到数仓等存储平台中,供后续分析使用;

完整的离线大数据分析:MySQL -> HDFS -> Hive表 -> SQL分析

即拉取数据库数据,存到分布式文件系统中,再导入数仓;

处理数据时,可能选择使用 mapreduce或spark(可持久化中间数据到内存)执行计算,他们都可通过YARN申请资源并执行计算任务;

YARN作为资源管理系统,负责协调不同的应用(mapreduce、spark)之间的资源分配,在YARN中,集群资源被分为不同的容器,每个任务会被分配到一个容器上执行;

hadoop 提供 存储(HDFS)、资源管理(YARN)、计算框架(MP、Spark、Fink、Hive、Tez)

列式存储

  核心在于 Parquet 格式,数据按列存储、支持多种压缩算法(列式存储,故相同类型数据被存储在一起,压缩效率更高)、支持多种复杂的数据类型,包括嵌套数据结构(列表、映射等)、数据的 schema 信息;

  行式存储适合事务性操作,每一行数据都保存在连续的内存或磁盘空间中;

  列式存储适合聚合、过滤等分析查询的场景(只需要查询相关列),且数据的压缩效率高(列内有很多重复,行基本没有行间的重复);

分区字段:时间;

hive+spark:

  hive 是一个 sql查询接口层;

  用户在 hive提交SQL查询;

  hive 解析并优化 sql(如选择合适的执行引擎);

  hive 生成执行计划(DAG),包括数据读取、分区、聚合等操作;

spark:

  通过DAG分析查询中所有任务和依赖关系,表示数据如何从一个操作传递到另一个操作;

  懒加载机制:spark 先构建这个执行计划,当用户触发行为操作,collect()、show()时,Spark才开始计算;

  suffle:如遇到 group by 时,spark 将数据根据 productID 分组,将数据分布到不同节点上,执行聚合计算;