`
ldd600
  • 浏览: 101691 次
  • 性别: Icon_minigender_1
  • 来自: 上海
博客专栏
47bb354f-8b5f-3ea6-a206-c7ead38c741c
Hyperic插件开发不完...
浏览量:11072
社区版块
存档分类
最新评论

用maven的ant run插件自动部署MR job依赖的jar到HDFS

 
阅读更多

背景

远程提交MR job时将MR job依赖的所有jar都发布到HDFS中,同时将这些jar加到hadoop job的classpath上。

如果每次手动上传就太费劲。项目集成maven。所以打算在maven package时将所有jar通过脚本上传到远程HDFS上

 

 

 

编写ant脚本

使用了,haddop的ant 插件。说白了就是一些util方法,调用了fsshell。没有文档,写的时候需要参考plugin的源代码。呵呵。

关键:

 

<hdfs cmd="rm" args="@{mapred.lib.dir}/*.jar" conf="@{hadoop.conf.dir}">

 

cmd:命令,参考hadoop fs

args:参数,逗号分隔

conf:core-site.xml的所在的文件目录

 

 

build.xml

 

<?xml version="1.0" encoding="UTF-8"?>
<!-- ========================================项目构建文件 ====================================================================== -->
<project>
	<import file="build.property.xml" />

	<!--
	<path id="dev_classpath">-->
	<!--
		<pathelement location="${resource.dir}"/>
		<pathelement location="${classes.dir}"/>-->
	<!--
		<fileset dir="${dev.ant.contrib.dir}">
			<include name="**/*.jar" />
		</fileset>
		
		<fileset dir="${dev.ant.contrib.lib.dir}">
				<include name="**/*.jar" />
			</fileset>
		
		<fileset dir="${dev.hadoop.home}">
			<include name="**/*.jar" />
		</fileset>
		
		<fileset dir="${dev.hadoop.home.lib}">
			<include name="**/*.jar" />
		</fileset>
		
	</path>-->

	<target name="init">
		<echo message="init copy and generate mapred libs">
		</echo>

		<taskdef resource="org/apache/maven/artifact/ant/antlib.xml">
		</taskdef>

		<taskdef resource="net/sf/antcontrib/antcontrib.properties">
		</taskdef>

		<!--<echo message="set classpath success"/>-->

		<taskdef resource="net/sf/antcontrib/antlib.xml">
		</taskdef>

		<taskdef resource="org/apache/hadoop/ant/antlib.xml">
		</taskdef>

		<echo message="import external antcontrib and hadoop ant extention task success">
		</echo>

		<!--
		<delete file="${resource.dir}/${mapred.lib.outfile}"/>
			<echo message="delete ${resource.dir}/${mapred.lib.outfile} success">
		</echo>
		<touch file="${resource.dir}/${mapred.lib.outfile}">
		</touch>
		<echo message="create ${resource.dir}/${mapred.lib.outfile} success">
		</echo>-->
	</target>

	<target name="dev_copy_libs">
		<foreach param="local.file" target="dev_copy_lib">
			<fileset dir="${lib.dir}" casesensitive="yes">
				<exclude name="**/hadoop*.jar" />
				<exclude name="**/hbase*.jar" />
				<exclude name="**/zookeeper*.jar" />
			</fileset>
			<fileset dir="target" casesensitive="yes">
				<include name="${project.jar}" />
			</fileset>
		</foreach>
	</target>

	<target name="dev_copy_lib">
		<hdfs cmd="copyFromLocal" args="${local.file},${dev.mapred.lib.dir}" conf="${dev.hadoop.conf.dir}">
		</hdfs>
		<echo message="copy ${local.file} to remote hdfs files file system: ${dev.mapred.lib.dir} success">
		</echo>
	</target>

	<macrodef name="macro_upload_mapred_lib" description="upload mapred lib">
		<attribute name="hadoop.conf.dir" />
		<attribute name="mapred.lib.dir" />
		<sequential>
			<property name="mapred.lib.dir" value="@{mapred.lib.dir}">
			</property>
			<echo message="hadoop conf dir: @{hadoop.conf.dir}">
			</echo>
			<hdfs cmd="rm" args="@{mapred.lib.dir}/*.jar" conf="@{hadoop.conf.dir}">
			</hdfs>
			<echo message="rm remote dir @{mapred.lib.dir}">
			</echo>
		</sequential>
	</macrodef>

	<target name="dev_upload_jars" depends="init">
		<macro_upload_mapred_lib hadoop.conf.dir="${dev.hadoop.conf.dir}" mapred.lib.dir="${dev.mapred.lib.dir}" />

		<echo message="----------------------------------------">
		</echo>
		<echo message="begin to copy libs to ${dev.mapred.lib.dir} exclude hadoop*, hbase*,">
		</echo>
		<antcall target="dev_copy_libs">
		</antcall>
		<echo message="all files has been copied to ${dev.mapred.lib.dir}">
		</echo>
		<echo message="----------------------------------------">
		</echo>
	</target>
</project>

 

 

build.properties.xml

 

<?xml version="1.0" encoding="UTF-8"?>
<project>
	<property file="build.properties"></property>
	<property name="classes.dir" value="target/classes"></property>
	<property name="lib.dir" value="lib"></property>
	<property name="resource.dir" value="src/main/resource"></property>
	<property name="mapred.lib.outfile" value="mapred_lib.properties"></property>
	<property name="lib.dir" value="lib"></property>
	<property name="project.jar"  value="${project.name}-${project.version}.jar"/>
	<!--
	<property name="dev.ant.contrib.dir" value="${dev.ant.contrib.dir}"></property>
	<property name="dev.ant.contrib.lib.dir" value="${dev.ant.contrib.dir}/lib"></property>
	<property name="dev.hadoop.home" value="${dev.hadoop.home}"></property>
	<property name="dev.hadoop.home.lib" value="${dev.hadoop.home}/lib"></property>-->
</project>

 

 

build.properties

 

src.conf.dir=src/main/conf
target.dir=target

#dev
dev.mapred.lib.dir=/user/root/mrlib/dev
dev.hadoop.conf.dir=${src.conf.dir}/dev

#test
test.mapred.lib.dir=/user/mrlib/test
test.hadoop.conf.dir=${src.conf.dir}/test

#testout
testout.mapred.lib.dir=/user/mrlib/testout
testout.hadoop.conf.dir=${src.conf.dir}/testout
 

 

配置pom.xml,因为我们使用了很多第三方的ant plugin。加入到ant plugin的dependency中。

 

 

	<plugin>
				<groupId>org.apache.maven.plugins</groupId>
				<artifactId>maven-antrun-plugin</artifactId>
				<version>1.7</version>
				<executions>
					<execution>
						<id>upload mapred jars</id>
						<phase>package</phase>
						<configuration>
							<target>
								<ant antfile="${basedir}/build.xml" inheritRefs="true">
									<target name="${envcfg.dir}_upload_jars" />
								</ant>
							</target>
						</configuration>
						<goals>
							<goal>run</goal>
						</goals>
					</execution>
				</executions>
				<dependencies>
					<dependency>
						<groupId>org.apache.hbase</groupId>
						<artifactId>hbase</artifactId>
						<version>0.94.1</version>
						<exclusions>
							<exclusion>
								<groupId>org.apache.hadoop</groupId>
								<artifactId>hadoop-core</artifactId>
							</exclusion>
						</exclusions>
					</dependency>
					<dependency>
						<groupId>ant-contrib</groupId>
						<artifactId>ant-contrib</artifactId>
						<version>1.0b3</version>
						<exclusions>
							<exclusion>
								<groupId>ant</groupId>
								<artifactId>ant</artifactId>
							</exclusion>
						</exclusions>
					</dependency>
					<dependency>
						<groupId>org.apache.ant</groupId>
						<artifactId>ant-nodeps</artifactId>
						<version>1.8.1</version>
					</dependency>
					<dependency>
						<groupId>org.apache.hadoop</groupId>
						<artifactId>hadoop-core</artifactId>
						<version>${hadoop.version}-modified</version>
						<optional>true</optional>
						<exclusions>
							<exclusion>
								<groupId>hsqldb</groupId>
								<artifactId>hsqldb</artifactId>
							</exclusion>
							<exclusion>
								<groupId>net.sf.kosmosfs</groupId>
								<artifactId>kfs</artifactId>
							</exclusion>
							<exclusion>
								<groupId>org.eclipse.jdt</groupId>
								<artifactId>core</artifactId>
							</exclusion>
							<exclusion>
								<groupId>net.java.dev.jets3t</groupId>
								<artifactId>jets3t</artifactId>
							</exclusion>
							<exclusion>
								<groupId>oro</groupId>
								<artifactId>oro</artifactId>
							</exclusion>
						</exclusions>
					</dependency>
					<dependency>
						<groupId>org.apache.hadoop</groupId>
						<artifactId>hadoop-ant</artifactId>
						<version>${hadoop.version}</version>
						<optional>true</optional>
						<scope>runtime</scope>
					</dependency>
					<dependency>
						<groupId>org.slf4j</groupId>
						<artifactId>slf4j-api</artifactId>
						<version>${slf4j.version}</version>
					</dependency>
					<dependency>
						<groupId>org.slf4j</groupId>
						<artifactId>slf4j-log4j12</artifactId>
						<version>${slf4j.version}</version>
					</dependency>
					<dependency>
						<groupId>org.apache.maven</groupId>
						<artifactId>maven-artifact-ant</artifactId>
						<version>2.0.4</version>
					</dependency>
				</dependencies>
			</plugin>	
 

 

 

 

运行:

执行maven install,看到所有jar都发布到了hdfs上。hoho。

 


 

  • 大小: 97.5 KB
0
0
分享到:
评论

相关推荐

    锂电池涂布模头,全球前7强生产商排名及市场份额.docx

    锂电池涂布模头,全球前7强生产商排名及市场份额

    ISO IEC 21964-2-2018.pdf

    ISO IEC 21964-2-2018.pdf

    编译程序构造的一般原理和基本方法.pdf

    编译原理是计算机专业的一门核心课程,旨在介绍编译程序构造的一般原理和基本方法。编译原理不仅是计算机科学理论的重要组成部分,也是实现高效、可靠的计算机程序设计的关键。本文将对编译原理的基本概念、发展历程、主要内容和实际应用进行详细介绍编译原理是计算机专业的一门核心课程,旨在介绍编译程序构造的一般原理和基本方法。编译原理不仅是计算机科学理论的重要组成部分,也是实现高效、可靠的计算机程序设计的关键。本文将对编译原理的基本概念、发展历程、主要内容和实际应用进行详细介绍编译原理是计算机专业的一门核心课程,旨在介绍编译程序构造的一般原理和基本方法。编译原理不仅是计算机科学理论的重要组成部分,也是实现高效、可靠的计算机程序设计的关键。本文将对编译原理的基本概念、发展历程、主要内容和实际应用进行详细介绍编译原理是计算机专业的一门核心课程,旨在介绍编译程序构造的一般原理和基本方法。编译原理不仅是计算机科学理论的重要组成部分,也是实现高效、可靠的计算机程序设计的关键。本文将对编译原理的基本概念、发展历程、主要内容和实际应用进行详细介绍编译原理是计算机专业的一门核心课程,旨在介绍编译程序构造的一般原理和基本

    海关商品编码/HS编码表

    用于海关申报商品编码/HS编码信息

    node-v9.6.1-linux-arm64.tar.xz

    Node.js,简称Node,是一个开源且跨平台的JavaScript运行时环境,它允许在浏览器外运行JavaScript代码。Node.js于2009年由Ryan Dahl创立,旨在创建高性能的Web服务器和网络应用程序。它基于Google Chrome的V8 JavaScript引擎,可以在Windows、Linux、Unix、Mac OS X等操作系统上运行。 Node.js的特点之一是事件驱动和非阻塞I/O模型,这使得它非常适合处理大量并发连接,从而在构建实时应用程序如在线游戏、聊天应用以及实时通讯服务时表现卓越。此外,Node.js使用了模块化的架构,通过npm(Node package manager,Node包管理器),社区成员可以共享和复用代码,极大地促进了Node.js生态系统的发展和扩张。 Node.js不仅用于服务器端开发。随着技术的发展,它也被用于构建工具链、开发桌面应用程序、物联网设备等。Node.js能够处理文件系统、操作数据库、处理网络请求等,因此,开发者可以用JavaScript编写全栈应用程序,这一点大大提高了开发效率和便捷性。 在实践中,许多大型企业和组织已经采用Node.js作为其Web应用程序的开发平台,如Netflix、PayPal和Walmart等。它们利用Node.js提高了应用性能,简化了开发流程,并且能更快地响应市场需求。

    node-v8.11.2-linux-arm64.tar.xz

    Node.js,简称Node,是一个开源且跨平台的JavaScript运行时环境,它允许在浏览器外运行JavaScript代码。Node.js于2009年由Ryan Dahl创立,旨在创建高性能的Web服务器和网络应用程序。它基于Google Chrome的V8 JavaScript引擎,可以在Windows、Linux、Unix、Mac OS X等操作系统上运行。 Node.js的特点之一是事件驱动和非阻塞I/O模型,这使得它非常适合处理大量并发连接,从而在构建实时应用程序如在线游戏、聊天应用以及实时通讯服务时表现卓越。此外,Node.js使用了模块化的架构,通过npm(Node package manager,Node包管理器),社区成员可以共享和复用代码,极大地促进了Node.js生态系统的发展和扩张。 Node.js不仅用于服务器端开发。随着技术的发展,它也被用于构建工具链、开发桌面应用程序、物联网设备等。Node.js能够处理文件系统、操作数据库、处理网络请求等,因此,开发者可以用JavaScript编写全栈应用程序,这一点大大提高了开发效率和便捷性。 在实践中,许多大型企业和组织已经采用Node.js作为其Web应用程序的开发平台,如Netflix、PayPal和Walmart等。它们利用Node.js提高了应用性能,简化了开发流程,并且能更快地响应市场需求。

    离散制造业未来数字化工厂建设及关键应用场景规划方案.pptx

    离散制造业未来数字化工厂建设及关键应用场景规划方案.pptx

    node-v8.15.0-linux-arm64.tar.xz

    Node.js,简称Node,是一个开源且跨平台的JavaScript运行时环境,它允许在浏览器外运行JavaScript代码。Node.js于2009年由Ryan Dahl创立,旨在创建高性能的Web服务器和网络应用程序。它基于Google Chrome的V8 JavaScript引擎,可以在Windows、Linux、Unix、Mac OS X等操作系统上运行。 Node.js的特点之一是事件驱动和非阻塞I/O模型,这使得它非常适合处理大量并发连接,从而在构建实时应用程序如在线游戏、聊天应用以及实时通讯服务时表现卓越。此外,Node.js使用了模块化的架构,通过npm(Node package manager,Node包管理器),社区成员可以共享和复用代码,极大地促进了Node.js生态系统的发展和扩张。 Node.js不仅用于服务器端开发。随着技术的发展,它也被用于构建工具链、开发桌面应用程序、物联网设备等。Node.js能够处理文件系统、操作数据库、处理网络请求等,因此,开发者可以用JavaScript编写全栈应用程序,这一点大大提高了开发效率和便捷性。 在实践中,许多大型企业和组织已经采用Node.js作为其Web应用程序的开发平台,如Netflix、PayPal和Walmart等。它们利用Node.js提高了应用性能,简化了开发流程,并且能更快地响应市场需求。

    node-v8.6.0-linux-ppc64.tar.xz

    Node.js,简称Node,是一个开源且跨平台的JavaScript运行时环境,它允许在浏览器外运行JavaScript代码。Node.js于2009年由Ryan Dahl创立,旨在创建高性能的Web服务器和网络应用程序。它基于Google Chrome的V8 JavaScript引擎,可以在Windows、Linux、Unix、Mac OS X等操作系统上运行。 Node.js的特点之一是事件驱动和非阻塞I/O模型,这使得它非常适合处理大量并发连接,从而在构建实时应用程序如在线游戏、聊天应用以及实时通讯服务时表现卓越。此外,Node.js使用了模块化的架构,通过npm(Node package manager,Node包管理器),社区成员可以共享和复用代码,极大地促进了Node.js生态系统的发展和扩张。 Node.js不仅用于服务器端开发。随着技术的发展,它也被用于构建工具链、开发桌面应用程序、物联网设备等。Node.js能够处理文件系统、操作数据库、处理网络请求等,因此,开发者可以用JavaScript编写全栈应用程序,这一点大大提高了开发效率和便捷性。 在实践中,许多大型企业和组织已经采用Node.js作为其Web应用程序的开发平台,如Netflix、PayPal和Walmart等。它们利用Node.js提高了应用性能,简化了开发流程,并且能更快地响应市场需求。

    node-v10.15.1-linux-armv7l.tar.xz

    Node.js,简称Node,是一个开源且跨平台的JavaScript运行时环境,它允许在浏览器外运行JavaScript代码。Node.js于2009年由Ryan Dahl创立,旨在创建高性能的Web服务器和网络应用程序。它基于Google Chrome的V8 JavaScript引擎,可以在Windows、Linux、Unix、Mac OS X等操作系统上运行。 Node.js的特点之一是事件驱动和非阻塞I/O模型,这使得它非常适合处理大量并发连接,从而在构建实时应用程序如在线游戏、聊天应用以及实时通讯服务时表现卓越。此外,Node.js使用了模块化的架构,通过npm(Node package manager,Node包管理器),社区成员可以共享和复用代码,极大地促进了Node.js生态系统的发展和扩张。 Node.js不仅用于服务器端开发。随着技术的发展,它也被用于构建工具链、开发桌面应用程序、物联网设备等。Node.js能够处理文件系统、操作数据库、处理网络请求等,因此,开发者可以用JavaScript编写全栈应用程序,这一点大大提高了开发效率和便捷性。 在实践中,许多大型企业和组织已经采用Node.js作为其Web应用程序的开发平台,如Netflix、PayPal和Walmart等。它们利用Node.js提高了应用性能,简化了开发流程,并且能更快地响应市场需求。

    TensorFlow安装步骤

    附件是TensorFlow安装步骤,文件绿色安全,请大家放心下载,仅供交流学习使用,无任何商业目的!

    BS EN IEC 60068-2-86-2024 环境试验.第2-86部分:试验.试验Fx:振动.多激励器和多轴法.pdf

    BS EN IEC 60068-2-86-2024 环境试验.第2-86部分:试验.试验Fx:振动.多激励器和多轴法.pdf

    2023年美赛特等奖论文-A-2316994-解密.pdf

    大学生,数学建模,美国大学生数学建模竞赛,MCM/ICM,2023年美赛特等奖O奖论文

    node-v8.5.0-linux-ppc64.tar.xz

    Node.js,简称Node,是一个开源且跨平台的JavaScript运行时环境,它允许在浏览器外运行JavaScript代码。Node.js于2009年由Ryan Dahl创立,旨在创建高性能的Web服务器和网络应用程序。它基于Google Chrome的V8 JavaScript引擎,可以在Windows、Linux、Unix、Mac OS X等操作系统上运行。 Node.js的特点之一是事件驱动和非阻塞I/O模型,这使得它非常适合处理大量并发连接,从而在构建实时应用程序如在线游戏、聊天应用以及实时通讯服务时表现卓越。此外,Node.js使用了模块化的架构,通过npm(Node package manager,Node包管理器),社区成员可以共享和复用代码,极大地促进了Node.js生态系统的发展和扩张。 Node.js不仅用于服务器端开发。随着技术的发展,它也被用于构建工具链、开发桌面应用程序、物联网设备等。Node.js能够处理文件系统、操作数据库、处理网络请求等,因此,开发者可以用JavaScript编写全栈应用程序,这一点大大提高了开发效率和便捷性。 在实践中,许多大型企业和组织已经采用Node.js作为其Web应用程序的开发平台,如Netflix、PayPal和Walmart等。它们利用Node.js提高了应用性能,简化了开发流程,并且能更快地响应市场需求。

    考试报告要求.ipynb

    考试报告要求.ipynb

    DFS与BFS保姆级教学!!超级详细.txt

    DFS与BFS保姆级教学!!超级详细

    node-v9.0.0-linux-s390x.tar.xz

    Node.js,简称Node,是一个开源且跨平台的JavaScript运行时环境,它允许在浏览器外运行JavaScript代码。Node.js于2009年由Ryan Dahl创立,旨在创建高性能的Web服务器和网络应用程序。它基于Google Chrome的V8 JavaScript引擎,可以在Windows、Linux、Unix、Mac OS X等操作系统上运行。 Node.js的特点之一是事件驱动和非阻塞I/O模型,这使得它非常适合处理大量并发连接,从而在构建实时应用程序如在线游戏、聊天应用以及实时通讯服务时表现卓越。此外,Node.js使用了模块化的架构,通过npm(Node package manager,Node包管理器),社区成员可以共享和复用代码,极大地促进了Node.js生态系统的发展和扩张。 Node.js不仅用于服务器端开发。随着技术的发展,它也被用于构建工具链、开发桌面应用程序、物联网设备等。Node.js能够处理文件系统、操作数据库、处理网络请求等,因此,开发者可以用JavaScript编写全栈应用程序,这一点大大提高了开发效率和便捷性。 在实践中,许多大型企业和组织已经采用Node.js作为其Web应用程序的开发平台,如Netflix、PayPal和Walmart等。它们利用Node.js提高了应用性能,简化了开发流程,并且能更快地响应市场需求。

    node-v8.11.0-linux-s390x.tar.xz

    Node.js,简称Node,是一个开源且跨平台的JavaScript运行时环境,它允许在浏览器外运行JavaScript代码。Node.js于2009年由Ryan Dahl创立,旨在创建高性能的Web服务器和网络应用程序。它基于Google Chrome的V8 JavaScript引擎,可以在Windows、Linux、Unix、Mac OS X等操作系统上运行。 Node.js的特点之一是事件驱动和非阻塞I/O模型,这使得它非常适合处理大量并发连接,从而在构建实时应用程序如在线游戏、聊天应用以及实时通讯服务时表现卓越。此外,Node.js使用了模块化的架构,通过npm(Node package manager,Node包管理器),社区成员可以共享和复用代码,极大地促进了Node.js生态系统的发展和扩张。 Node.js不仅用于服务器端开发。随着技术的发展,它也被用于构建工具链、开发桌面应用程序、物联网设备等。Node.js能够处理文件系统、操作数据库、处理网络请求等,因此,开发者可以用JavaScript编写全栈应用程序,这一点大大提高了开发效率和便捷性。 在实践中,许多大型企业和组织已经采用Node.js作为其Web应用程序的开发平台,如Netflix、PayPal和Walmart等。它们利用Node.js提高了应用性能,简化了开发流程,并且能更快地响应市场需求。

    node-v9.10.0-linux-x86.tar.xz

    Node.js,简称Node,是一个开源且跨平台的JavaScript运行时环境,它允许在浏览器外运行JavaScript代码。Node.js于2009年由Ryan Dahl创立,旨在创建高性能的Web服务器和网络应用程序。它基于Google Chrome的V8 JavaScript引擎,可以在Windows、Linux、Unix、Mac OS X等操作系统上运行。 Node.js的特点之一是事件驱动和非阻塞I/O模型,这使得它非常适合处理大量并发连接,从而在构建实时应用程序如在线游戏、聊天应用以及实时通讯服务时表现卓越。此外,Node.js使用了模块化的架构,通过npm(Node package manager,Node包管理器),社区成员可以共享和复用代码,极大地促进了Node.js生态系统的发展和扩张。 Node.js不仅用于服务器端开发。随着技术的发展,它也被用于构建工具链、开发桌面应用程序、物联网设备等。Node.js能够处理文件系统、操作数据库、处理网络请求等,因此,开发者可以用JavaScript编写全栈应用程序,这一点大大提高了开发效率和便捷性。 在实践中,许多大型企业和组织已经采用Node.js作为其Web应用程序的开发平台,如Netflix、PayPal和Walmart等。它们利用Node.js提高了应用性能,简化了开发流程,并且能更快地响应市场需求。

    node-v9.6.1-linux-ppc64le.tar.xz

    Node.js,简称Node,是一个开源且跨平台的JavaScript运行时环境,它允许在浏览器外运行JavaScript代码。Node.js于2009年由Ryan Dahl创立,旨在创建高性能的Web服务器和网络应用程序。它基于Google Chrome的V8 JavaScript引擎,可以在Windows、Linux、Unix、Mac OS X等操作系统上运行。 Node.js的特点之一是事件驱动和非阻塞I/O模型,这使得它非常适合处理大量并发连接,从而在构建实时应用程序如在线游戏、聊天应用以及实时通讯服务时表现卓越。此外,Node.js使用了模块化的架构,通过npm(Node package manager,Node包管理器),社区成员可以共享和复用代码,极大地促进了Node.js生态系统的发展和扩张。 Node.js不仅用于服务器端开发。随着技术的发展,它也被用于构建工具链、开发桌面应用程序、物联网设备等。Node.js能够处理文件系统、操作数据库、处理网络请求等,因此,开发者可以用JavaScript编写全栈应用程序,这一点大大提高了开发效率和便捷性。 在实践中,许多大型企业和组织已经采用Node.js作为其Web应用程序的开发平台,如Netflix、PayPal和Walmart等。它们利用Node.js提高了应用性能,简化了开发流程,并且能更快地响应市场需求。

Global site tag (gtag.js) - Google Analytics