Yarn 是一个由 Facebook 开发的快速、可靠且安全的依赖管理工具,它主要用于 JavaScript 项目,Yarn 解决了 npm(Node.js 的默认包管理器)在处理大量包时速度慢和依赖管理混乱的问题,以下是关于 Yarn 的详细介绍:
一、Yarn 的特点
1、快速安装:Yarn 缓存了每个下载过的包,所以再次使用时无需重复下载,同时利用并行下载以最大化资源利用率,因此安装速度更快。
2、安全性高:在执行代码之前,Yarn 会通过算法校验每个安装包的完整性,确保软件包的安全性。
3、可靠性强:使用详细、简洁的锁文件格式和明确的安装算法,Yarn 能够保证在不同系统上无差异的工作。
4、确定性安装:Yarn 使用锁定文件来确保 node_modules 目录在所有开发环境中具有完全相同的结构,避免了“依赖地狱”的问题。
5、兼容性好:Yarn 与 npm 和 bower 注册表兼容,可以轻松迁移现有的 npm 项目到 Yarn。
二、Yarn 的基本架构
YARN 主要由以下组件构成:
1、ResourceManager (RM):处理客户端请求、启动/监控 ApplicationMaster、监控 NodeManager、资源分配与调度。
2、NodeManager (NM):单个节点上的资源管理,处理来自 ResourceManager 和 ApplicationMaster 的命令。
3、ApplicationMaster (AM):为应用程序申请资源,并分配给内部任务,负责任务监控与容错。
4、Container:对任务运行环境的抽象,封装了 CPU、内存等多维资源以及环境变量、启动命令等任务运行相关的信息。
三、Yarn 的工作机制
YARN 的基本思想是将资源管理和作业调度/监视的功能划分为单独的守护进程,具体流程如下:
1、Mr 程序提交到客户端所在的节点。
2、YarnRunner 向 Resourcemanager 申请一个 Application。
3、RM 将该应用程序的资源路径返回给 yarnrunner。
4、该程序将运行所需资源提交到 HDFS 上。
5、程序资源提交完毕后,申请运行 mrAppMaster。
6、RM 将用户的请求初始化成一个 task。
7、其中一个 NodeManager 领取到 task 任务。
8、该 NodeManager 创建容器 Container,并产生 MRAppmaster。
9、Container 从 HDFS 上拷贝资源到本地。
10、MRAppmaster 向 RM 申请运行 maptask 资源。
11、RM 将运行 maptask 任务分配给另外两个 NodeManager,另两个 NodeManager 分别领取任务并创建容器。
12、MR 向两个接收到任务的 NodeManager 发送程序启动脚本,这两个 NodeManager 分别启动 maptask,maptask 对数据分区排序。
13、MrAppMaster 等待所有 maptask 运行完毕后,向 RM 申请容器,运行 reduce task。
14、reduce task 向 maptask 获取相应分区的数据。
15、程序运行完毕后,MR 会向 RM 申请注销自己。
四、Yarn 的安装和使用
1. 安装步骤
确保系统已安装 Node.js,因为 Yarn 是建立在 Node.js 之上的。
通过 npm 全局安装 Yarn:npm install -g yarn
。
验证安装是否成功:yarn --version
。
2. 基本使用
创建新项目:yarn init
,这个命令会引导您创建一个新的 package.json 文件。
添加依赖:yarn add [package_name]
,将一个新的包添加到您的项目依赖中。
更新依赖:yarn upgrade [package_name]
,更新项目中的某个包。
移除依赖:yarn remove [package_name]
,从您的项目中移除一个包。
安装项目依赖:yarn
或yarn install
,这将安装 package.json 中列出的所有依赖。
五、Yarn 与 NPM 的比较
尽管 NPM 是最早的 JavaScript 包管理器之一,但 Yarn 在性能和安全性方面带来了改进,Yarn 的锁定文件(yarn.lock)确保了依赖的一致性,而它的缓存机制则显著加快了安装速度,Yarn 还擅长在包装管理过程中提供更清洁的输出和更少的噪音。
六、常见问题解答(FAQs)
Q: Yarn 是否完全兼容 npm 的包?
A: 是的,Yarn 可以使用 npm 的注册表,因此几乎所有 npm 的包都可以通过 Yarn 安装。
Q: 如何解决 Yarn 安装速度慢的问题?
A: 确保您的 Yarn 版本是最新的,并尝试使用更快的网络连接,Yarn 的缓存机制也可以在一定程度上提高速度。
Yarn 作为一个现代化的包管理器,为 JavaScript 社区带来了性能和安全性的提升,无论您是刚入门的新手还是资深开发者,掌握 Yarn 都将对您的项目开发有所帮助,随着 JavaScript 生态系统的不断发展,Yarn 也在不断进化,以满足开发者的需求。
原创文章,作者:未希,如若转载,请注明出处:https://www.kdun.com/ask/1258485.html
本网站发布或转载的文章及图片均来自网络,其原创性以及文中表达的观点和判断不代表本网站。如有问题,请联系客服处理。
发表回复