文章目录 Scala 数据类型 函数式编程 闭包 函数柯里化 面向对象 样例类 对象与伴生对象 特质(trait) 模式匹配 隐式转换 即席查询 Kylin Kylin特点 Kylin工作原理 核心算法 Kylin总结 Kylin的优点 什么场景用Kylin Kylin的缺点 Impala 什么是Impala Impala为什么快 Frontend Backend Impala总结: Presto 什么是Presto Presto的执行过程 Presto总结 Druid Druid是什么 Druid的主要特点 Druid为什么快 Druid总结:什么选择使用 即席查询框架总结对比 分区,分桶,分片 Hive Hive分区 Hive分桶 Hive分区分桶区别 ElasticSearch分片 kafka分区 生产者 消费者 分区分配策略 HBase分区 Kudu分区 数据倾斜 Hive Hive数据倾斜表现 Hive数据倾斜的原因 Hive数据倾斜解决 Flink Flink数据倾斜的处理 Spark Spark数据倾斜的表现 Spark定位数据倾斜 **Spark数据倾斜的解决方案** 两阶段聚合(局部聚合+全局聚合) 将reduce join转为map join 总结 调度系统 Azkaban介绍 Azkaban的特点 Azkaban优缺点 Oozie Oozie介绍 Oozie特点 XXL-JOB XXL-JOB介绍 XXL-JOB特点(https://www.xuxueli.com) Airflow Airflow介绍 Airflow特点 DolphinScheduler DolphinScheduler介绍 设计特点 总结: 大数据术语 数据中台 数据集市 ETL 雪花模型、星型模型和星座模型 事实表 维度表 上钻与下钻 维度退化 UV与PV SKU与SPU ODS,DWD,DWS,DWT与ADS T+0与T+1 机器学习 MapReduce 实时数据 Scala 变量和数据类型 变量(var声明变量,val声明常量) var 修饰的变量可改变 val 修饰的变量不可改变 但真的如此吗? 对于以下的定义 class A(a: Int) { var value = a } class B(b: Int) { val value = new A(b) } 效果测试 val x = new B(1) x = new B(