@yangwenbo
2025-07-27T12:38:57.000000Z
字数 2975
阅读 26
面试笔记(技术)
- Hadoop 分布式文件系统(HDFS):一个可扩展的分布式文件系统,用于存储大型数据集。
- MapReduce:一种分布式计算框架,用于将大规模数据集分解成小的数据块,然后分配给集群中的计算节点进行处理。
- YARN(Yet Another Resource Negotiator):一个资源管理器,用于在集群中管理资源和调度任务。
- HBase:一个分布式的、面向列的NoSQL数据库,用于存储大量结构化数据。
- Hive:一个基于 Hadoop 的数据仓库工具,用于将结构化数据映射到 Hadoop 上,并提供 SQL 查询功能。
- Pig:一种用于分析大型数据集的高级语言和平台,可用于执行复杂的数据转换和处理操作。
- Spark:一个快速、通用的大数据处理引擎,可以在内存中执行计算,支持各种编程语言。
- Mahout:一个机器学习库,可用于构建大规模的机器学习模型。
- ZooKeeper:一个分布式协调服务,用于在分布式应用程序中管理配置信息、提供命名服务、同步服务等。
- 客户端向 nameNode 发送要上传文件的请求
- nameNode 返回给用户是否能上传数据的状态
- 加入用户端需要上传一个 1024M 的文件,客户端会通过 Rpc 请求 NameNode,并返回需要上传给那些DataNode(分配机器的距离以及空间的大小等),namonode会选择就近原则分配机器。
- 客户端请求建立 block 传输管道 chnnel 上传数据
- 在上传是 datanode 会与其他的机器建立连接并把数据块传送到其他的机器上
- dataNode 向 namenode 汇报自己的储存情况以及自己的信息
- 当第一个快上传完后再去执行其他的复制的传送hadoop
Yarn包括两个主要进程:资源管理器Resource-Manager,节点管理器Node-Manager
- 客户端client程序向资源管理器提交Application并请求一个ApplicationMaster实例
- 资源管理器接受并根据自己对集群的掌握情况,决定在某个具体的NodeManager上来启动一个Container,并在这个Container中启动ApplicationMaster(Driver)实例
- ApplicationMaster向资源管理器进行注册,说明自己负责当前应用程序的启动,并下载当前应用程序相关的jar包等各种资源,并基于此向RM申请资源内容;
- 在平常的操作过程中,ApplicationMaster根据resource-request协议向资源管理器发送resource-request请求
- 资源管理器在接受到ApplicationMaster的资源分配请求后会最化的满足资源请求,并发送资源的元数据信息给ApplicationMaster,当ApplicationMaster获得了资源的元数据后会发指令给机器上的NodeManager,ApplicationMaster通过向NodeManager发送container-launch-specification信息来启动Container, container-launch-specification信息包含了能够让Container和ApplicationMaster交流所需要的资料
- 应用程序的代码在启动的Container中运行,并把运行的进度、状态等信息通过application-specific协议发送给ApplicationMaster,即Container启动后向ApplicationMaster注册;
- 在应用程序运行期间,提交应用的客户端主动和ApplicationMaster交流获得应用的运行状态、进度更新等信息,交流的协议也是application-specific协议
- 一但应用程序执行完成并且所有相关工作也已经完成,ApplicationMaster向资源管理器取消注册然后关闭,用到所有的Container也归还给系统
- 用户提交查询等任务给Driver。
- 编译器获得该用户的任务Plan。
- 编译器Compiler根据用户任务去MetaStore中获取需要的Hive的元数据信息。
- 编译器Compiler得到元数据信息,对任务进行编译,先将HiveQL转换为抽象语法树,然后- [x] 将抽象语法树转换成查询块,将查询块转化为逻辑的查询计划,重写逻辑查询计划,将逻辑计划转化为物理的计划(MapReduce), 最后选择最佳的策略。
将最终的计划提交给Driver。- Driver将计划Plan转交给ExecutionEngine去执行,获取元数据信息,提交给JobTracker或者SourceManager执行该任务,任务会直接读取HDFS中文件进行相应的操作。
- 获取执行的结果。
- 取得并返回执行结果。
- 为应用构建起基本的运行环境,即由Driver创建一个SparkContext,进行资源的申请、任务的分配和监控;
- 资源管理器为Executor分配资源,并启动Executor进程;
- SparkContext根据RDD的依赖关系构建DAG图,DAG图提交给DAGScheduler解析成Stage,然后把一个个TaskSet提交给底层调度器TaskScheduler处理;
- Task在Executor上运行,把执行结果反馈给TaskScheduler,然后反馈给DAGScheduler,运行完毕后写入数据并释放所有资源。
- 写请求
- Follower或Observer接收到写请求后,转发给Leader。
- Leader协调各Follower,通过投票机制决定是否接受该写请求。
- 如果超过半数以上的Leader、Follower节点返回写入成功,那么Leader提交该请求并返回成功,否则返回失败。
- Follower或Observer返回写请求处理结果。
- 只读请求
- 客户端直接向Leader、Follower或Observer读取数据。
Zookeeper的核心是原子广播机制,这个机制保证了各个server之间的同步。实现这个机制的协议叫做Zab协议。Zab协议有两种模式,它们分别是恢复模式和广播模式。
- 恢复模式:当服务启动或者在领导者崩溃后,Zab就进入了恢复模式,当领导者被选举出来,且大多数server完成了和Leader的状态同步以后,恢复模式就结束了。状态同步保证了Leader和server具有相同的系统状态。
- 广播模式:一旦Leader已经和多数的Follower进行了状态同步后,他就可以开始广播消息了,即进入广播状态。这时候当一个Server加入ZooKeeper服务中,它会在恢复模式下启动,发现Leader,并和Leader进行状态同步。待到同步结束,它也参与消息广播。ZooKeeper服务一直维持在Broadcast状态,直到Leader崩溃了或者Leader失去了大部分的Followers支持。
- Broadcast模式极其类似于分布式事务中的2pc(two-phrase commit 两阶段提交):即Leader提起一个决议,由Followers进行投票,Leader对投票结果进行计算决定是否通过该决议,如果通过执行该决议(事务),否则什么也不做。