架构师训练营第十二周总结
大数据技术发展史
* Google 2004: GFS / MapReduce / BigTable (三驾马车)
* Doug Cutting 2006: HDFS / MapReduce
* Apache 2008: Hadoop 成为 Apache 顶级项目
* Pig/Hive: 简化 MapReduce 编程的脚本语言和类 SQL 语言
* 2012: Yarn 把 MapReduce 里面的执行引擎和资源调度独立出来
* UC Berkeley AMP 2012: 比 MapReduce 更加高效的 Spark 分布式计算引擎
* 大数据实时计算:Storm / Flink / Spark Streaming
分布式文件系统 HDFS
* HDFS 系统架构
* NameNode:存储文件元数据信息,Client 读写文件需要先询问 NameNode
* DataNode:存储具体数据,默认存储三份,每个数据块大小是 64M
* 适合场景:大文件、流式数据访问、一次写入多次读取
* 高可用设计
* DataNode 磁盘挂了
* 通知 NameNode 坏掉的磁盘的数据块
* DataNode 机器挂了
* NameNode10 分钟没有收到 DataNode 发送的心跳,认为 DataNode 已经挂了,会重新复制上面存储的数据块
* NameNode 挂了
* 持久化元数据:操作日志 / Fsimage
* 主主复制:通过 Zookeeper 记录主 NameNode 服务器
* Client 挂了
* 当写入数据超过一个块后,新的 reader 可以看见第一个块,reader 不能看见当前正在写入的块
* 跨机架备份数据
大数据计算框架 MapReduce
* 核心原则
* 移动计算比移动数据更划算
* 分而治之
* 架构
* 集群只有一台 Job Tracker 服务器
* JobScheduler 调度资源,创建 JobInProcess 作业任务数
* TaskTracker 同时也是 DataNode,在心跳通信中领取 task 任务,一般会领取处理本地数据的任务
* InputFormat 接口抽象 MapReduce 作业的输入,获取分片数据
* OutputFormat 接口是 MapReduce 作业结果的抽象,默认实现类 TextOutputFormat 是 tab 分割的键值对文本文件
* Partitioner 对 Key 进行分区,默认 HashPartitioner
* JobTracker 内部实现
* 作业监控层 JIP、任务控制层 TIP、任务执行层
* JobTracker 宕机会导致未完成 Job 失败,通常采取重启未完成的 Job
* TaskTracker 容错
* 10 分钟未汇报心跳,则移除
* 监控 TaskTracker 性能,如果太差会被暂停调度
* Task 容错
* 允许部分 task 失败
* 设置任务重试次数
大数据集群资源管理系统 Yarn
* 资源管理器
* 节点管理器
大数据仓库 Hive
* Hive 编译器
* Parser: convert into AST
* Semantic Analyzer: convert into block-base internal query (QB)
* Logic Plan Generator: operator tree
* Logical Optimizer: rewrite plans into more optimized plans
* Physical Plan Generator: convert into MapReduce jobs (task tree)
* Physical Optimizer: adopt join strategy
* Hive Metastore
* 通常用一个关系数据库实现,Debian / MySQL
* 记录表名、字段名、字段类型、关联 HDFS 文件路径等数据库 Meta 信息
评论