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)
driver生成代码,executor编译
30P数据,761台node