一. Yarn
1.yarn的作用:资源的调度分配。
2.主要的模块:
2.1.ResoureManager(RM)
yarn是资源控制框架的中心模块,负责集群中所有的资源的统一管理与分配。
2.2.调度器(ResourceScheduler)
根据各个应用程序的资源需求,进行分配。
2.3.应用管理器(Applications Maneger)
负责监控或跟踪AM的执行状态。
2.4.NodeManager(NM)
是ResourceManager每台机器上的代理,负责容器的管理,并监控他们的资源使用的情况(CPU,内存,磁盘,网络等)
2.5.ApplicationMaster(AM)
yarn中每个应用都会启动一个AM,负责向RM去申请资源。请求NM启动constainer,并告诉constainer需要做什么。
2.6.Container
这是一个虚拟的一个概念。
yarn中所有应用都是在container之上运行的,包括ApplicationManager。
- container是yarn中资源的抽象,它封装了某个节点上一定的资源(CPU,内存,磁盘,网络等)
- container由AM申请向RM申请,由RM中的ResourceScheduler分配给AM。
步骤:
1.client向RM提交应用程序,包括AM的主程序,启动AM的命令,用户的程序(wordcount)
2.RM为该应用分配一个Container,并于NM通信,要求NM在这个container中启动AM。
3.AM首先向RM注册,这样用户可以直接通过RM来查看程序的运行状态。
4.AM通过RPC协议向ResourceScheduler申请资源
5.一旦AM申请到了资源,与NM通信,要求NM启动任务。
6.NM为任务设置好运行环境(环境变量,jar包等)将任务的启动命令写到一个脚本文件中,并通过脚本触发启动任务。
7.各个Container的Task(Map Task,Reduce Task),通过RPC向AM进行进度和状态汇报,一边AM随时可以掌握任务的运行状态失败的时候,也会重启container任务。
8.应用程序运行运行完成后,AM会向RM申请注销或者关闭。
1~4:申请资源
5~8:运行任务,直到完成任务。
面试点:
1.AM在哪个进程所在的节点运行?
答:NM
2.AM要申请container吗,跟谁申请?
要的,向RM申请。
3.一个作业,第一个container容器运行什么?
AM
Scheduler
在理想的情况下,我们应用对yarn资源的请求应该立刻被满足,但是实际上,资源是有限的,特别是很忙的集群。
(1)FIFO Scheduler:先进先出调度。这种调度器把应用提交按顺序排成一个队列,先进先出的队列,在进行资源分配的时候,先给队列中最头部的应用分配资源,等到应用满足了,再给下一个分配,以此类推。缺点:大的应用可能会占用所有的资源,造成阻塞,不适合集群。
(2)Capacity Scheduler
专门有一个队列来运行小任务,但是为小任务专门设置的队列会占用一定的集群资源,导致大任务的执行时间会落后FIFO
(3)Fair SCheduler
不需要预先占用一定资源,动态调整。
默认调度器是:Capacity Scheduler
MapReduce
Map:映射,把一个任务拆解成多个。
Reduce:聚合,把拆解开的任务做最后的聚合操作。
hadoop hdfs hdfs hive
hdfs sqoop flume java
java Hadoop Hadoop
适用于:离线,批处理运算。
不适合实时计算。
MR运行中的进程:
RunJar,YarnChild Task,MRAppMaster,它们都是以进程的方式运行的,那么进程申请资源,运行,释放资源,所以MR运行慢的原因。
作业:
进程和线程的区别:
(1)调度:线程作为调度和分配的基本单位,进程作为拥有资源的基本单位
(2)并发性:不仅进程之间可以并发执行,同一个进程的多个线程之间也可并发执行
(3)拥有资源:进程是拥有资源的一个独立单位,线程不拥有系统资源,但可以访问隶属于进程的资源.
(4)系统开销:在创建或撤消进程时,由于系统都要为之分配和回收资源,导致系统的开销明显大于创建或撤消线程时的开销。
sql:收藏推荐
select t5.t4_id id1, t5.t4_id2 id2, t6.spu_id spu
from (select t4.t1_id t4_id, t4.t2_id t4_id2, count(t4.spu) count_spu
from (select t3.t1_id, t3.t2_id, t3.t1_spu spu
from (select t1.id t1_id,
t1.spu_id t1_spu,
t2.id t2_id,
t2.spu_id t2_spu
from (select t.id, t.spu_id from collect_spu t) t1
inner join collect_spu t2
on t1.id <> t2.id --说明不是同一个用户
where t1.spu_id = t2.spu_id) t3) t4
group by t4.t1_id, t4.t2_id
having count(t4.spu) >= 2) t5
join collect_spu t6
on t5.t4_id = t6.id
SPU(Standard Product Unit):标准化产品单元。是商品信息聚合的最小单位,是一组可复用、易检索的标准化信息的集合,该集合描述了一个产品的特性。通俗点讲,属性值、特性相同的商品就可以称为一个SPU。
SKU全称为Stock Keeping Unit(库存量单位),即库存进出计量的基本单元,可以是以件,盒,托盘等为单位。SKU这是对于大型连锁超市DC(配送中心)物流管理的一个必要的方法。现在已经被引申为产品统一编号的简称,每种产品均对应有唯一的SKU号。
PV:页面浏览量,通常是衡量一个网络新闻频道或网站甚至一条网络新闻的主要指标。网页浏览数是评价网站流量最常用的指标之一,简称为PV。监测网站PV的变化趋势和分析其变化原因是很多站长定期要做的工作。
UV:独立访客就是独立IP访客(Unique Visitor),一般地用两个数值标准来统计访问某网站的访客,即“访问次数”和“独立访客(问)数”,访问次数和独立访客数是两个不同的概念。