npm
npm是什么?
- npm是node package manager的简称,node.js 的包管理器,用于node插件管理(包括安装、卸载、管理依赖等),pm 是随同 node.js 一起安装的包管理工具,能解决 node.js 代码部署上的很多问题。
- npm是一个包管理器,它让 javascript 开发者分享、复用代码更方便.在程序开发中我们常常需要依赖别人提供的框架,写js 也不例外。这些可以重复的框架代码被称作包(package)或者模块(module),一个包可以是一个文件夹里放着几个文件,同时有一个叫做 package.json的文件.
安装npm
在安装node.js的时候会相应地安装npm,因此检查本地的node和npm是否安装成功
更新npm
由于npm比node更新的频繁因此如果想要更新自己的npm可以执行
npm i -g npm
npm的重要命令
npm淘宝镜像
# 设置全局的npm淘宝镜像
npm config set registry https://registry.npm.taobao.org
# 也可以切换回默认全局镜像
npm config set registry https://registry.npmjs.org
npm常用命令简写说明
-g: 为 --global 的缩写,表示安装到全局目录里
-S: 为 --save 的缩写,表示安装的包将写入package.json里面的dependencies
-D: 为 --save-dev 的缩写,表示将安装的包将写入packege.json里面的devDependencies
i: 为install的缩写,表示安装
安装模块
npm init # npm 初始化当前目录
npm i # 安装所有依赖
npm i express # 安装模块到默认dependencies
npm i express -g # 会安装到配置的全局目录下
npm i express -S # 安装包信息将加入到dependencies生产依赖
npm i express -D # 安装包信息将加入到devDependencies开发依赖
npm i jquery@1.8.3 # 安装jquery指定的1.8.3版本
卸载模块
npm uninstall express # 卸载模块,但不卸载模块留在package.json中的对应信息
npm uninstall express -g # 卸载全局模块
npm uninstall express --save # 卸载模块,同时卸载留在package.json中dependencies下的信息
npm uninstall express --save-dev # 卸载模块,同时卸载留在package.json中devDependencies下的信息
查看命令
npm root # 查看项目中模块所在的目录
npm root -g # 查看全局安装的模块所在目录
npm list 或者 npm ls # 查看本地已安装模块的清单列表
npm view jquery dependencies # 查看某个包对于各种包的依赖关系
npm view jquery version # 查看jquery最新的版本号
npm view jquery versions # 查看所有jquery历史版本号(很实用)
npm view jquery # 查看最新的jquery版本的信息
npm info jquery # 查看jquery的详细信息,等同于上面的npm view jquery
npm list jquery 或 npm ls jquery # 查看本地已安装的jquery的详细信息
npm view jquery repository.url # 查看jquery包的来源地址
其他命令
npm cache clean # 清除npm的缓存
npm prune # 清除项目中没有被使用的包
npm outdated # 检查模块是否已经过时
npm repo jquery # 会打开默认浏览器跳转到github中jquery的页面
npm docs jquery # 会打开默认浏览器跳转到github中jquery的README.MD文件信息
npm home jquery # 会打开默认浏览器跳转到github中jquery的主页
cnpm
cnpm的官方介绍是:cnpm是一个完整 npmjs.org 镜像,你可以用此代替官方版本(只读),同步频率目前为 10分钟 一次以保证尽量与官方服务同步。
cnpm 出现的目的
由于npmjs.org的服务器在国外(即在“墙”外),国(墙)内开发者做项目的时候,很多“包”的下载速度极慢,在这种环境下阿里巴巴为了众多开发者的便捷便挺身而出推出了淘宝镜像(即cnpm),它把npm官方的“包”全部搬到国内,供广大开发者使用。
如何配置cnpm
临时使用
npm --registry https://registry.npm.taobao.org install [依赖的名称]
持久使用
npm config set registry https://registry.npm.taobao.org
检查是否配置成功
npm config get registry
安装cnpm
npm install -g cnpm --registry=https://registry.npm.taobao.org
cnpm如何使用
安装模块
从registry.npm.taobao.org 安装所有模块. 当安装的时候发现安装的模块还没有同步过来, 淘宝 NPM 会自动在后台进行同步, 并且会让你从官方 NPMregistry.npmjs.org进行安装. 下次你再安装这个模块的时候, 就会直接从 淘宝 NPM 安装了
$ cnpm install [name]
同步模块
直接通过 sync 命令马上同步一个模块, 只有 cnpm 命令行才有此功能:
$ cnpm sync connect
其它命令
支持 npm 除了 publish 之外的所有命令, 如:
$ cnpm info connect
yarm
YARN总体上仍然是Master/Slave结构,在整个资源管理框架中,ResourceManager为Master,NodeManager为Slave,ResourceManager负责对各个NodeManager上的资源进行统一管理和调度。当用户提交一个应用程序时,需要提供一个用以跟踪和管理这个程序的ApplicationMaster,它负责向ResourceManager申请资源,并要求NodeManager启动可以占用一定资源的任务。
ResourceManager(RM):全局资源管理器,负责整个系统的资源管理和分配。
由多个组件组成:
调度器(Scheduler)
调度器根据容量,队列等限制条件(如每个队列分配一定的资源,最多执行一定数量的作业等),将系统中的资源分配给各个正在运行的应用。这里的调度器是一个“纯 调度器”,因为它不再负责监控或者跟踪应用的执行状态等,此外,他也不负责重新启动因应用执行失败或者硬件故障而产生的失败任务。调度器仅根据各个应用的资源 需求进行调度,这是通过抽象概念“资源容器”完成的,资源容器(Resource Container)将内存,CPU,磁盘,网络等资源封装在一起,从而限定每个任务使用的资源量。
应用管理器(ApplicationsManager,ASM)
ASM主要负责接收作业,协商获取第一个容器用于执行AM和提供重启失败AM container的服务
ASM负责管理系统中所有应用程序的AM,正如上一节所述,ASM负责启动AM,监控AM的运行状态,在AM失败时对其进行重启等。
为了完成该功能,ASM主要有以下几个组件:
(1)SchedulerNegotiator:与调度器协商容器资源,并返回给AM
(2)AMContainerManager:告知NM,启动或者停止某个AM的容器
(3)AMMonitor:查看AM是否活着,并在必要的时候重启AM
NodeManager(NM):每个节点上的资源和任务管理器,定时向RM汇报本节上的资源使用情况和各个Container的运行状态,接受并处理来自AM的Container启动/停止等各种请求。
ApplicationMaster(AM):用户提交每个应用程序均包含一个AM,主要功能与RM调度器协商以获取资源,进一步分配给内部的任务,与NM通信启动/停止任务,监控任务的运行状态。
每个应用程序均会有一个AM,主要职责有:
(1)与调度器协商资源
(2)与NM合作,在合适的容器中运行对应的task,并监控这些task执行
(3)如果container出现故障,AM会重新向调度器申请资源
(4)计算应用程序所需的资源量,并转化成调度器可识别的格式(协议)
(5)AM出现故障后,ASM会重启它,而由AM自己从之前保存的应用程序执行状态中恢复应用程序。
注:在MapReduce中,由于AM会定时的保存job的运行时状态,因此,当AM重启时可以恢复对应的job,按照粒度有三种策略:
<1>整个作业重新计算
<2> 保存已经完成的map task和reduce task,只重新计算未完成的task
<3> 保存task的进度,从task断点处开始计算,如:某个task完成了20%,则AM重启后,让该task从20%处开始计算。
Contanier:是YARN中资源的抽象,封装了某个节点上的多维度资源,如内存、CPU、磁盘、网络等。当AM想RM申请资源时,RM为AM返回的资源便是用Container表示的。
(1)Container是YARN中资源的抽象,它封装了某个节点上一定量的资源(CPU和内存两类资源)。它跟Linux Container没有任何关系,仅仅是YARN提出的一个概念(从实现上看,可看做一个可序列化/反序列化的Java类)。
(2)Container由ApplicationMaster向ResourceManager申请的,由ResouceManager中的资源调度器异步分配给ApplicationMaster;
(3)Container的运行是由ApplicationMaster向资源所在的NodeManager发起的,Container运行时需提供内部执行的任务命令(可以使任何命令,比如java、Python、C++进程启动命令均可)以及该命令执行所需的环境变量和外部资源(比如词典文件、可执行文件、jar包等)。
另外,一个应用程序所需的Container分为两大类,如下:
(1)运行ApplicationMaster的Container:这是由ResourceManager(向内部的资源调度器)申请和启动的,用户提交应用程序时,可指定唯一的ApplicationMaster所需的资源;
(2)运行各类任务的Container:这是由ApplicationMaster向ResourceManager申请的,并由ApplicationMaster与NodeManager通信以启动之。
以上两类Container可能在任意节点上,它们的位置通常而言是随机的,即ApplicationMaster可能与它管理的任务运行在一个节点上。
一个应用程序在YARN上的运行步骤
步骤1:用户将应用程序提交到ResourceManager上;
步骤2:ResourceManager为应用程序ApplicationMaster申请资源,并与某个NodeManager通信,以启动ApplicationMaster;
步骤3:ApplicationMaster与ResourceManager通信,为内部要执行的任务申请资源,一旦得到资源后,将于NodeManager通信,以启动对应的任务。
步骤4:所有任务运行完成后,ApplicationMaster向ResourceManager注销,整个应用程序运行结束。
pnmp
PNMP,全称“Proactive Network Maintenance using Pre-equalization”,即“基于预均衡的主动网络运维”,是PNM主动运维的一种技术手段。为此,CableLabs专门制定规范《CM-GL-PNMP-V03-160725》,用于实现DOCSIS主动网络运维
PNMP技术,主要通过补偿上行信道中的线性失真(包括频率响应、微反射、群延时等),来保证上行信号质量。简单来说是,CMTS根据CM的测距消息,评估CM的信号质量,生成预均衡参数,下发给CM。CM的预均衡器会根据预均衡参数进行信号增益,抵消上行线路上的损耗。这样在CMTS收到信号时,线性失真的问题会大幅缓解,从而有效提升信号质量。
pnmp应用
根据PNMP原理,衍生出不同的应用角度,主要包括健康指标MTR、频响曲线分组、故障点位置TDR三类
MTR
CM的预均衡器有24个可调节参数,网络正常时,主参数(主抽头)能量远大于其他参数,但当网络劣化时,其他参数能量会大幅增加以补偿增益。根据这一原理,可用主参数与其他参数的能量比来衡量网络健康状况。主参数能量越高,其他参数越低,MTR值越大,网络越健康。建议MTR值保持在20dB左右,小于10dB就说明网络有明显故障。
频响曲线分组
网络正常时,CM的上行信号经过链路后,在不同的频率范围内,变化幅度都比较小(一条直线)。网络异常的CM上行信号频响曲线会有明显变化