可以支持多种计算框架运行在YARN上面,比如MapReduce、Storm、Spark、Flink等
(1)Client向ResourceManager提交作业(可以是Spark/Mapreduce作业)
(2)ResourceManager会为这个作业分配一个container
(3)ResourceManager与NodeManager通信,要求NodeManger在刚刚分配好的container上启动应用程序的Application Master
(4)Application Master先去向ResourceManager注册,而后ResourceManager会为各个任务申请资源,并监控运行情况
(5)Application Master采用轮询(polling)方式向ResourceManager申请并领取资源(通过RPC协议通信)
(6) Application Manager申请到了资源以后,就和NodeManager通信,要求NodeManager启动任务
最后,NodeManger启动作业对应的任务。
YARN的设计是为了解决MapReduce1.0中的一些缺陷。
存在单点故障。
JobTracker“大包大揽”导致任务过重(任务多时内存开销大,上限4000节点)。
容易出现内存溢出(分配资源只考虑MapReduce任务数,不考虑CPU、内存)。
资源划分不合理(强制划分为slot ,包括Map slot和Reduce slot)。
注意:applicationmaster将监听每一个nodemanager执行的情况并随时汇报给resourcemanager,知道最后任务执行完成,将回收所有的资源,如果发现有任务执行失败,则由applicationmaster来协调,减轻了resourcemanager的负担,如果applicationmaster在运行过程中出问题,resourcemanager没有接收心跳后,会再在所有nodemanager节点中选择一个节点来启动applicationmaster来继续工作。
当客户端向 HDFS 文件写入数据的时候,一开始是写到本地临时文件中。假设该文件的副本系数设置为 3 ,当本地临时文件累积到一个数据块的大小时,客户端会从 Namenode 获取一个 Datanode 列表用于存放副本。然后客户端开始向第一个 Datanode 传输数据,第一个 Datanode 一小部分一小部分 (4 KB) 地接收数据,将每一部分写入本地仓库,并同时传输该部分到列表中 第二个 Datanode 节点。第二个 Datanode 也是这样,一小部分一小部分地接收数据,写入本地 仓库,并同时传给第三个 Datanode 。最后,第三个 Datanode 接收数据并存储在本地。因此, Datanode 能流水线式地从前一个节点接收数据,并在同时转发给下一个节点,数据以流水线的 方式从前一个 Datanode 复制到下一个
block持续化结构:
命令 https://www.cnblogs.com/sdksdk0/p/5585047.html
MapReduce
hive
hbase
sql