跑。Mesos因为是C/C++开发的,安装部署可能会有库依赖。
这点我不知道大家是否看的重,反正我是看的相当重的。软件就应该是下下来就可以Run。所以12年的时候我就自己开发了一套Java服务框架,开发完之后
运行个main方法就行。让应用包含容器,而不是要把应用丢到Tomcat这些容器,太复杂,不符合直觉。
二次开发
Yarn 对Java/Scala工程师而言,只是个Jar包,类似索引开发包Lucene,你可以把它引入项目,做任何你想要的包装。 这是其一。
其二,Yarn提供了非常多的扩展接口,很多实现都是可插拔。可替换的,在XML配置下,可以很方便的用你的实现替换掉原来的实现,没有太大的侵入性,所以就算是未来Yarn升级,也不会有太大问题。
相比较而言,Mesos更像是昌肢御一个已经做好的产品,部署了可以直接用,但是对二次开发并不友好。
生态优势
Yarn 诞生于Hadoop这个大数据的“始作俑者”项目,所以在大数据领域饥昌具有先天优势。
底层天然就是分布式存储系统HDFS,稳定高效。
其上支撑了Spark、MR等大数据领域的扛顶之座,久经考验。
社区强大,最近发布版本也明显加快,对于长任务的支持也越来越优秀。
首先在项目根目录下添加Dockerfile文件(这里我选用租乱的是简单地nestjs作为例子)
在项目根目录下添加docker-compose.yml
在项目根目录下添加猜亮nodemon-docker-debug.json
在package.json中加入docker运行命定及nodejs debug命定
1.首先运行yarn docker(穗型宽npm run docker)来构建及运行docker 容器
1.项目根目录下新建.vscode文件夹,在.vscode文件夹下添加launch.json
*注意这里的port一定要与你docker-compose.yml设置的debug port保持一致
运行vscode调试工具,如果能够成功连接到docker中的程序,可以在container logs 中看到连接成功的log
接下来尝试断点调试
原文链接 http://watsonzuo.com/2019/05/22/docker-nodejs-debug/
查看名称空间[namespace_id]
Cgroups 提供了以下四大功能:
1、资源限制(Resource Limitation):cgroups 可以对进程组使用的资源总额进行限制。如设定应用运行时使用内存的上限,一旦超过这个配额就发出 OOM(Out of Memory)。
2、优先级分配(Prioritization):通过分配的 CPU 时间片数量及硬盘 IO 带宽大小,实际上就相当于控制了进程运行的优先级。
3、资源统计(Accounting): cgroups 可以统计系统的资源使用量,如 CPU 使用时长、内存用量等等,这个功能非常适用于计费。
4、进程控制(Control):cgroups 可以对进程组执行挂起、恢复等 *** 作。
Docker正是使用cgroup进行资源划分,每个容器都作为一个进程运行起来,每个业务容器都会有一个基础的 pause容器 也就是POD作为基础容器。pause容器提供了划分namespace的内容,并连通同一POD下的所有容器,共享网络资源。
1.CPU:使用调度程序为cgroup任务提供 CPU 的访问。
2.cpuacct:产生cgroup任务的 CPU 资源报告。
3.cpuset:如果是多核心的CPU,这个子系统会为cgroup任务分配单的CPU和内存。
4.devices:允许或拒绝cgroup任务对设备的访问。
5.freezer:暂停和恢复cgroup任务。
6.memory:设置每个cgroup 的内存限制以及产生内存资源报告。
7.net_cls:标记每个网络包以供 cgroup方便使用。
8.ns:命名空间子系统。
9.perf event:增加了对每个group的监测跟踪的能力,可以监测属于某个特定的group 的所有线程以及运行在特定CPU上的线程。
如图所示的 CGroup 层级关系显示,CPU 和 Memory 两个子系统有自己独立的层级系统,而又通过 Task Group 取得关联关系。
资源调度和资源隔离是YARN作为一个资源管理系统,最重要和最基础的两个功能。
1、内存资源隔离乱孝
原文链接: https://blog.csdn.net/chen892704067/article/details/76596225
为了避免误杀Container,Hadoop赋予每个进程 年龄 属性,并规定刚启动进程的年龄是1,且MonitoringThread线程每更新一次,各个进程年龄加一
在此基础上,选择被杀死Container的标准如下:
2、cpu资源隔离
Yarn 3.0 版本中,在 Linux 系统环境下,ContainerExecutor 有两种实现:
1、 DefaultContainerExecutor : 简称 DCE , 如其名,是默认的 ContainerExecutor 实现。 如果用户未指定 ContainerExecutor 的具体实现,NM 就会使用它。 DCE 直接使用 bash 来启动 container 进程,所有 container 都使用 NM 进程用户 (yarn) 启动,安全性低且没有任何CPU资源隔离机制。
2、 LinuxContainerExecutor : 简称 LCE,相比于 DCE ,它能提供更多有用的功清轮能,如用户权限隔离,支持使用提交任务用户来启动 container;支持使用 cgroup 进行资源限制; 支持运行 docker container (合并了2.x 版本中的 DockerContainerExecutor)。 LCE 使用可执行的二进制文件 container-executor 来启动 container 进程,container 的用户根据配置可以统一使用默认用户,也哗正稿可以使用提交任务的用户(需要提前在 NM 上添加所有支持的用户),从而以应用提交者的身份创建文件,运行/销毁 Container,允许用户在启动Container后直接将CPU份额和进程ID写入cgroup路径的方式实现CPU资源隔离。
YARN使用了Cgroups子系统中的CPU和Memory子系统,CPU子系统用于控制Cgroups中所有的进程可以使用的CPU时间片。Memory子系统可用于限定一个进程的内存使用上限,一旦超过该限制,将认为它为OOM,会将其杀死。
对于内存资源隔离,YARN采用了与MRv1这种基于线程监控的资源控制方式,这样做到的主要出发点是:这种方式更加灵活,且能够防止内存骤增骤降导致内存不足而死掉。
对于CPU资源隔离,YARN采用了轻量级的Cgroups。
注:默认情况下,NM未启用任何CPU资源隔离机制,如果想要启用该机制,需使用LinuxContainerExecutor,它能够以应用程序提交者的身份创建文件,运行Container和销毁Container.
Linux内核提供namespace完成隔离,Cgroup完成资源限制。namespace+Cgroup构成了容器的底层技术(rootfs是容器文件系统层技术)
参考
https://blog.csdn.net/zhangzhebjut/article/details/37730013
https://www.cnblogs.com/janeysj/p/11274515.html
https://www.xiaoheidiannao.com/220959.html
https://developer.aliyun.com/article/446778
https://segmentfault.com/a/1190000019016039
https://smarthanwang.github.io/2019/10/12/yarn-container-executor/
https://www.jianshu.com/p/b9245242472b/
https://www.shuzhiduo.com/A/6pdDYYNGzw/
https://www.jianshu.com/p/8f700177d4e4
https://www.cnblogs.com/biyeymyhjob/archive/2012/07/20/2601655.html
https://blog.csdn.net/chen892704067/article/details/76596225
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)