spark
    mrv1:缺点
    可扩展性:jobtracker既负责资源管理,有负责任务调度
    高可用差:jobtracker没有高可用
    资源利用率低
    不支持其他MapReduce框架

    mrv2解决以上所有问题,没有jobtracker,运行时环境变了rm,nm和am.
    频繁操作hdfs(持久化,数据备份,资源下载,shuffle),会导致磁盘io瓶颈,只适用离线数据处理和批处理。
    不能支持迭代式,交互式,流式数据处理。

    spark的有点:
    减少磁盘io:spark允许将map的中间输出和结果保存在内存中;spark driver内存中保存资源文件
    增加并行度:spark是线程级别,mr是进程级别
    避免重新计算:某个task失败后,重新对此stage调度,但是会过滤掉已经成功的task;人工干预缓存rdd
    可选的shuffle和排序:spark的某些shuffle不一定是kv的。有些shuffle是可以不排序的
    灵活的内存管理策略

    sc.textFile(‘x’).flatmap(.split(‘ ‘)).map((,1)).reducebykey(+).savetextfile(‘x1’)

    内存:堆内,对外
    manager:静态和统一,都有堆内和堆外
    堆内= 系统预留+执行内存+存储内存
    堆外= 执行内存+存储内存

    sql
    1. parser利用antlr4 词法解析和语法解析 得到unresolved logical plan
    2. analyzer利用catalog将unresolved logical plan解析成 Optimized Logical Plan
    3. optimizer利用CRO(谓词下推,列裁剪,常量替换,常量累加,合并逻辑计划等)将 Analyzed logical plan 解析成 Optimized Logical Plan;
    4. Planner将Optimized Logical Plan转化为physical plans,然后利用代价模型(CBO)选择最佳的 physical plan;
    5. Code Generation:这个过程会把 SQL 查询生成 Java 字 节码。
    表达式代码生成(expression codegen)
    全阶段代码生成(Whole-stage Code Generation)
    加速序列化和反序列化(speed up serialization/deserialization)

    1. driver生成代码,executor编译

    30P数据,761台node