×

yarn安装依赖

yarn安装依赖(如何使用spark将程序提交任务到yarn-Spark-about云开发)

admin admin 发表于2023-11-21 00:57:16 浏览45 评论0

抢沙发发表评论

本文目录

如何使用spark将程序提交任务到yarn-Spark-about云开发

使用脚本提交1.使用spark脚本提交到yarn,首先需要将spark所在的主机和hadoop集群之间hosts相互配置(也就是把spark主机的ip和主机名配置到hadoop所有节点的/etc/hosts里面,再把集群所有节点的ip和主机名配置到spark所在主机的/etc/hosts里面)。2.然后需要把hadoop目录etc/hadoop下面的*-sit.xml复制到${SPARK_HOME}的conf下面.3.确保hadoop集群配置了 HADOOP_CONF_DIR or YARN_CONF_DIR 1.yarn-standalone方式提交到yarn在${SPARK_HOME}下面执行:SPARK_JAR=./assembly/target/scala-2.10.4/spark-assembly-0.9.0-incubating-hadoop2.2.0.jar \ ./bin/spark-class org.apache.spark.deploy.yarn.Client \ --jar ./examples/target/scala-2.10/spark-examples_2.10-assembly-0.9.0-incubating.jar \ --class org.apache.spark.examples.SparkPi \ --args yarn-standalone \ --num-workers 3 \ --master-memory 2g \ --worker-memory 2g \ --worker-cores 1复制代码2. yarn-client 方式提交到yarn在${SPARK_HOME}下面执行:SPARK_JAR=./assembly/target/scala-2.10.4/spark-assembly-0.9.0-incubating-hadoop2.2.0.jar \SPARK_YARN_APP_JAR=examples/target/scala-2.10/spark-examples_2.10-assembly-0.9.0-incubating.jar \./bin/run-example org.apache.spark.examples.SparkPi yarn-client复制代码二、使用程序提交1.必须使用linux主机提交任务,使用windows提交到linux hadoop集群会报org.apache.hadoop.util.Shell$ExitCodeException: /bin/bash: 第 0 行: fg: 无任务控制复制代码错误。hadoop2.2.0不支持windows提交到linux hadoop集群,网上搜索发现这是hadoop的bug。2.提交任务的主机和hadoop集群主机名需要在hosts相互配置。3.因为使用程序提交是使用yarn-client方式,所以必须像上面脚本那样设置环境变量SPARK_JAR 和 SPARK_YARN_APP_JAR比如我的设置为向提交任务主机~/.bashrc里面添加:export SPARK_JAR=file:///home/ndyc/software/sparkTest/lib/spark-assembly-0.9.0-incubating-hadoop2.2.0.jar export SPARK_YARN_APP_JAR=file:///home/ndyc/software/sparkTest/ndspark-0.0.1.jar复制代码file:// 表明是本地文件,如果使用hdfs上的文件将file://替换为hdfs://主机名:端口号。建议使用hdfs来引用 spark-assembly-0.9.0-incubating-hadoop2.2.0.jar,因为这个文件比较大,如果使用file://每次提交任务都需要上传这个jar到各个集群,很慢。其中SPARK_JAR是${SPARK_HOME}/assembly/target/scala-2.10.4/spark-assembly-0.9.0-incubating-hadoop2.2.0.jarSPARK_YARN_APP_JAR是自己程序打的jar包,包含自己的测试程序。4.程序中加入hadoop、yarn、依赖。注意,如果引入了hbase依赖,需要这样配置《dependency》 《groupId》org.apache.hbase《/groupId》 《artifactId》hbase-thrift《/artifactId》 《version》${hbase.version}《/version》 《exclusions》 《exclusion》 《groupId》org.apache.hadoop《/groupId》 《artifactId》hadoop-mapreduce-client-jobclient《/artifactId》 《/exclusion》 《exclusion》 《groupId》org.apache.hadoop《/groupId》 《artifactId》hadoop-client《/artifactId》 《/exclusion》 《/exclusions》 《/dependency》复制代码然后再加入《dependency》 《groupId》org.ow2.asm《/groupId》 《artifactId》asm-all《/artifactId》 《version》4.0《/version》 《/dependency》复制代码否则会报错:IncompatibleClassChangeError has interface org.objectweb.asm.ClassVisitor as super class复制代码异常是因为Hbase jar hadoop-mapreduce-client-jobclient.jar里面使用到了asm3.1 而spark需要的是asm-all-4.0.jar5. hadoop conf下的*-site.xml需要复制到提交主机的classpath下,或者说maven项目resources下面。6.编写程序代码示例:package com.sdyc.ndspark.sys;import org.apache.spark.SparkConf;import org.apache.spark.api.java.JavaPairRDD;import org.apache.spark.api.java.JavaRDD;import org.apache.spark.api.java.JavaSparkContext;import org.apache.spark.api.java.function.Function2;import org.apache.spark.api.java.function.PairFunction;import scala.Tuple2;import java.util.ArrayList;import java.util.List;/*** Created with IntelliJ IDEA.* User: zarchary* Date: 14-1-19* Time: 下午6:23* To change this template use File | Settings | File Templates.*/public class ListTest {public static void main(String args) throws Exception { SparkConf sparkConf = new SparkConf(); sparkConf.setAppName(“listTest“); //使用yarn模式提交 sparkConf.setMaster(“yarn-client“);JavaSparkContext sc = new JavaSparkContext(sparkConf);List《String》 listA = new ArrayList《String》();listA.add(“a“); listA.add(“a“); listA.add(“b“); listA.add(“b“); listA.add(“b“); listA.add(“c“); listA.add(“d“);JavaRDD《String》 letterA = sc.parallelize(listA);JavaPairRDD《String, Integer》 letterB = letterA.map(new PairFunction《String, String, Integer》() { @Override public Tuple2《String, Integer》 call(String s) throws Exception { return new Tuple2《String, Integer》(s, 1); } });letterB = letterB.reduceByKey(new Function2《Integer, Integer, Integer》() { public Integer call(Integer i1, Integer i2) { return i1 + i2; } });//颠倒顺序 JavaPairRDD《Integer, String》 letterC = letterB.map(new PairFunction《Tuple2《String, Integer》, Integer, String》() { @Override public Tuple2《Integer, String》 call(Tuple2《String, Integer》 stringIntegerTuple2) throws Exception { return new Tuple2《Integer, String》(stringIntegerTuple2._2, stringIntegerTuple2._1); } });JavaPairRDD《Integer, List《String》》 letterD = letterC.groupByKey();// //false说明是降序 JavaPairRDD《Integer, List《String》》 letterE = letterD.sortByKey(false);System.out.println(“========“ + letterE.collect());System.exit(0); }}复制代码代码中master设置为yar-client表明了是使用提交到yarn.关于spark需要依赖的jar的配置可以参考我的博客spark安装和远程调用。以上弄完之后就可以运行程序了。运行后会看到yarn的ui界面出现:正在执行的过程中会发现hadoop yarn 有的nodemanage会有下面这个进程:13247 org.apache.spark.deploy.yarn.WorkerLauncher复制代码这是spark的工作进程。如果接收到异常为:WARN YarnClientClusterScheduler: Initial job has not accepted any resources; check your cluster UI to ensure that workers are registered and have sufficient memory复制代码出现这个错误是因为提交任务的节点不能和spark工作节点交互,因为提交完任务后提交任务节点上会起一个进程,展示任务进度,大多端口为4044,工作节点需要反馈进度给该该端口,所以如果主机名或者IP在hosts中配置不正确,就会报 WARN YarnClientClusterScheduler: Initial job has not accepted any resources; check your cluster UI to ensure that workers are registered and have sufficient memory错误。 所以请检查主机名和IP是否配置正确。我自己的理解为,程序提交任务到yarn后,会上传SPARK_JAR和SPARK_YARN_APP_JAR到hadoop节点, yarn根据任务情况来分配资源,在nodemanage节点上来启动org.apache.spark.deploy.yarn.WorkerLauncher工作节点来执行spark任务,执行完成后退出。

为什么我要选择使用Yarn来做Docker的调度引擎

可部署性先说明下,这里探讨的是Yarn或者Mesos集群的部署,不涉其上的应用。Yarn除了依赖JDK,对操作系统没有任何依赖,基本上放上去就能跑。Mesos因为是C/C++开发的,安装部署可能会有库依赖。 这点我不知道大家是否看的重,反正我是看的相当重的。软件就应该是下下来就可以Run。所以12年的时候我就自己开发了一套Java服务框架,开发完之后运行个main方法就行。让应用包含容器,而不是要把应用丢到Tomcat这些容器,太复杂,不符合直觉。二次开发Yarn 对Java/Scala工程师而言,只是个Jar包,类似索引开发包Lucene,你可以把它引入项目,做任何你想要的包装。 这是其一。其二,Yarn提供了非常多的扩展接口,很多实现都是可插拔。可替换的,在XML配置下,可以很方便的用你的实现替换掉原来的实现,没有太大的侵入性,所以就算是未来Yarn升级,也不会有太大问题。相比较而言,Mesos更像是一个已经做好的产品,部署了可以直接用,但是对二次开发并不友好。生态优势Yarn 诞生于Hadoop这个大数据的“始作俑者”项目,所以在大数据领域具有先天优势。底层天然就是分布式存储系统HDFS,稳定高效。其上支撑了Spark、MR等大数据领域的扛顶之座,久经考验。社区强大,最近发布版本也明显加快,对于长任务的支持也越来越优秀。长任务支持谈及长任务(long running services)的支持,有人认为早先Yarn是为了支持离线短时任务的,所以可能对长任务的支持有限。其实大可不必担心,譬如现在基于其上的Spark Streaming就是7x24小时运行的,跑起来也没啥问题。一般而言,要支持长任务,需要考虑如下几个点:Fault tolerance,主要是AM的容错。Yarn Security,如果开启了安全机制,令牌等的失效时间也是需要注意的。日志收集到集群。还有就是资源隔离和优先级。如果资源隔离做的太差,会对长时任务产生影响。大家感兴趣可以先参考Jira。我看这个Jira 13年就开始了,说明这事很早就被重视起来了。下面我们队提到的几个点做下解释。Fault toleranceYarn 自身高可用。目前Yarn的Master已经实现了HA。AM容错,我看从2.4版本(看的源码,也可能更早的版本就已经支持)就已经支持 keep containers across attempt 的选项了。什么意思呢?就是如果AM挂掉了,在Yarn重新启动AM的过程中,所有由AM管理的容器都会被保持而不会被杀掉。除非Yarn多次尝试都没办法把AM再启动起来(默认两次)。 这说明从底层调度上来看,已经做的很好了。日志收集到集群日志收集在2.6版本已经是边运行边收集了。资源隔离资源隔离的话,Yarn做的不好,目前有效的是内存,对其他方面一直想做支持,但一直有限。这估计也是很多人最后选择Mesos的缘由。但是现在这点优势Mesos其实已经荡然无存,因为Docker容器在资源隔离上已经做的足够好。Yarn和Docker一整合,就互补了。小结Mesos 和 Yarn 都是非常优秀的调度框架,各有其优缺点,弹性调度,统一的资源管理是未来平台的一个趋势,类似的这种资源管理调度框架必定会大行其道。一些常见的误解脱胎于Hadoop,继承了他的光环和生态,然而这也会给其带来一定的困惑,首先就是光环一直被Hadoop给盖住了,而且由于固有的惯性,大家会理所当然的认为Yarn只是Hadoop里的一个组件,有人会想过把Yarn拿出来单独用么?然而,就像我在之前的一篇课程里,反复强调,Hadoop是一个软件集合,包含分布式存储,资源管理调度,计算框架三个部分。他们之间没有必然的关系,是可以独立开来的。而Yarn 就是一个资源管理调度引擎,其一开始的设计目标就是为了通用,不仅仅是跑MR。现在基于Yarn之上的服务已经非常多,典型的比如Spark。这里还有另外一个误区,MR目前基本算是离线批量的代名词,这回让人误以为Yarn也只是适合批量离线任务的调度。其实不然,我在上面已经给出了分析,Yarn 是完全可以保证长任务的稳定可靠的运行的。如何基于Yarn开发分布式程序本文不会具体教你如何使用Yarn的API,不过如果你想知道Yarn的API,但是又觉得官方文档太过简略,我这里倒是可以给出两个建议:代码使用范例可以参看Spark Yarn相关的代码。算的上是一个非常精简的Yarn的adaptor。买本Yarn相关的书,了解其体系结构也有助于你了解其API的设计。接下来的内容会探讨以下两个主题:基于Yarn开发分布式程序需要做的一些准备工作基于Yarn开发容器调度系统的一些基本思路基于Yarn开发分布式程序需要做的一些准备工作肯定不能撸起袖子就开始干。开始动手前,我们需要知道哪些事情呢?Yarn原生的API太底层,太复杂了如果你想愉快的开发Yarn的应用,那么对Yarn的API进行一次封装,是很有必要的。 Yarn为了灵活,或者为了能够满足开发者大部分的需求,底层交互的API就显得比较原始了。自然造成开发难度很大。这个也不是我一个人觉得,现在Apache的Twill,以及Hulu他们开发的时候Adaptor那一层,其实都是为了解决这个问题。那为什么我没有用Twill呢,第一是文档实在太少,第二是有点复杂,我不需要这么复杂的东西。我觉得,Twill与其开发这么多功能,真的不如好好写写文档。最好是能开发一个解决一类问题的FrameworkYarn只是一个底层的资源管理和调度引擎。一般你需要基于之上开发一套解决特定问题的Framework。以Spark为例,他是解决分布式计算相关的一些问题。而以我开发的容器调度程序,其实是为了解决动态部署Web应用的。在他们之上,才是你的应用。比如你要统计日志,你只要在Spark上开发一个Application 。 比如你想要提供一个推荐系统,那么你只要用容器包装下,就能被容器调度程序调度部署。所以通常而言,基于Yarn的分布式应用应该符合这么一个层次:Yarn -》 Adapter -》 Framework -》 ApplicationAdapter 就是我第一条说的,你自个封装了Yarn的API。 Framework就是解决一类问题的编程框架,Application才是你真正要解决业务的系统。通过这种解耦,各个层次只要关注自己的核心功能点即可。保证你上层的Framework/Application可以移植Spark是个典型,他可以跑在Mesos上,也可以跑在Yarn上,还可以跑在自己上面(Standalone),实时上,泡在Yarn上的,以及跑Standalone模式的,都挺多的。这得益于Spark本身不依赖于底层的资源管理调度引擎。这其实也是我上面说的两条带来的好处,因为有了Adaptor,上层的Framework可以不用绑死在某个资源调度引擎上。而Framework则可以让Applicaiton 无需关注底层调度的事情,只要关注业务即可。另外,你费尽心机开发的Framework上,你自然是希望它能跑在更多的平台上,已满足更多的人的需求,对吧。基于Yarn开发容器调度系统的一些基本思路首先我们需要了解两个概念:哑应用。所谓哑应用指的是无法和分布式系统直接进行交互,分布式系统也仅仅透过容器能进行生命周期的控制,比如关闭或者开启的应用。典型的比如MySQL、Nginx等这些基础应用。他们一般有自己特有的交互方式,譬如命令行或者socket协议或者HTTP协议。伴生组件。因为有了哑应用的存在,分布式系统为了能够和这些应用交互,需要有一个代理。而这个代理和被代理的哑应用,具有相同的生命周期。典型的比如,某个服务被关停后,该事件会被分布式系统获知,分布式系统会将该事件发送给Nginx的伴生组件,伴生组件转化为Nginx能够识别的指令,将停止的服务从Nginx的ProxyBackend列表中剔除。在容器调度系统中,如果Yarn的NodeManager直接去管理Docker则需要Yarn本身去做支持,我觉得这是不妥的。Yarn的职责就是做好资源管理,分配,调度即可,并不需要和特定的某个技术耦合,毕竟Yarn是一个通用型的资源调度管理框架。那基于上面的理论,我们基于Yarn,开发一套框架,这个框架会是典型的 master-slave结构(这是Yarn决定的)。这个框架的 slaves 其实都是Docker 的伴生对象。master 可以通过这些Slave 对容器实现间接的管理。 我们简单描述下他们的流程:用户提交Application,申请资源;Yarn启动Framework的master;Yarn启动Framework的slave;slave 连接上master,并且发送心跳,从而master知道slave的状况slave启动Docker,slave与被启动的这个docker container 一一对应;slave定时监控Container;slave发现container crash,slave自动退出,Yarn获得通知,收回资源;master发现有节点失败,发出新的节点要求,重新在另外一台服务器上启动slave,重复从2开始的步骤。这里还有一个问题,如果slave 被正常杀掉,可以通过JVM ShudownHook 顺带把Container也关掉。 但是如果slave被kill -9 或者异常crash掉了,那么就可能导致资源泄露了。目前是这个信息是由master上报给集群管理平台,该平台会定时清理。你也可以存储该信息,譬如放到Redis或者MySQL中,然后启动后台清理任务即可。了解了这个思路后,具体实施就变得简单了,就是开发一个基于Yarn的master-slave程序即可,然后slave去管理对应的Docker容器,包括接受新的指令。master提供管理界面展示容器信息,运行状态即可。当然,你还可以再开发一套Framework B专门和Nginx交互,这样比如上面的系统做了节点变更,通知B的master,然后B的master 通过自己的伴生组件Slave 完成Nginx的更新,从而实现后端服务的自动变更和通知。

Vue搬迁什么意思

随着前段时间尤大在 vue3 以及 vite 仓库中切换包管理为 pnpm 的 pr 成功 merge,以及 vue 生态中的一些项目例如 VueUse 也切换使用 pnpm,宣告着 vue 生态中项目仓库完成了从原有的 yarn workspace monorepo 到 pnpm workspace monorepo 的迁移。可以看到 vite 核心贡献者以及 vue 团队成员之一的 patak (github.com/patak-js) 在 twitter 上对这次项目迁移的生动描述:“项目如同多米诺骨牌一样倒向了 pnpm”。可以看到这两个的迁移 pr 都是由尤大亲手完成改造,同时 pnpm 作者的本人zkochan(github: github.com/zkochan) 也亲自帮 vite 迁移的 pr 做了 code review。以上几个项目都是基于 monorepo 来做的仓库管理,pnpm 的 workspace 在 monorepo 场景下是有着极好的支持,当然也有非 monorepo 项目的迁移,例如由笔者迁移的 naive-ui 仓库的项目中包管理工具为 pnpm 用于提升 CI 下依赖安装速度的提升因为 vite 目前会在一些场景下使用到 esbuild 这个库:例如目前开发阶段 vite 会使用 esbuild 进行依赖预打包,来将第三方依赖转成 ESM 格式的 bundle 产物。这样的关系使得 esbuild 作为了 vite 的一个底层依赖,前面也提到过 vite 本身仓库是基于 yarn workspace monorepo 搭建的,因此每次在开发 vite 时使用 yarn 安装依赖的过程中,都会去安装 esbuild 以及相关的包

vue运行npm run dev出现的怎么解决

上面提示了,翻译一下(package.json存在,但是 node_modules不存在,你的意思是安装吗?)这个意思是你没有安装依赖项,需要先安装依赖项。运行npm install进行安装。如果嫌npm慢可以使用yarn或者cnpm安装依赖,安装完毕就可以运行了npm start

前端入职需要安装什么环境

一、基础环境

Node.js 是JavaScript运行时,目前前端工程化必不可缺的一个环境。通常我们会选择稳定版本(LTS)进行下载。

NPM 是javascript的包管理工具,也是目前Node.js默认的包管理工具。一般下载了Node.js后会附带npm,不用专门的去下载。

YARN 是Fackbook开源的依赖管理包,和npm是做同样的工作,但相比npm安装依赖的速度会更加迅速。两者都是讲依赖写入package.json中,在使用习惯上是相近的。

Git 是最先进的代码版本控制软件。

二、开发环境

目前前端开发主流的器有 sublimeText、WebStorm、vscode,三种主流器各有特点:

  • sublimeText是一个十分轻巧的器,器是付费软件,可以无限试用。在 macOS 上下载该软件仅需 15.2MB. 需要安装相应的插件,比如你可能需要某个语言的语法高亮,因此你需要在 store 上找到相应插件来提高你开发体验。

  • webStorm 是一个功能强大的器,同时也是一个付费软件,并不像sublimeText那样可以无限试用,由于功能太过于齐全,一些低配置的电脑可能会吃不消。以上特点是群友对webStorm的评价,笔者没有使用该器,不过多评论。

  • vsocde 是由微软开源的一个器,虽然是后起之秀,但开源后该器的设计与体验迅速吸引了一大批用户。它内置了一些前端基础的开发环境,针对Node.js还可以进行短点调试。

  • vscode其中有一个插件叫做 setiings sync , 它可以将你的器配置上传至gist。就算你换了一个全新的设备,下载vscode后,再下载该插件,传入Token后就可以同步你所有的配置,十分的方便~

    vscode的配置可以查看具体教程

浏览器

前端的工作更多时候是与用户打交道,我们的工作产出通常在浏览器页面上呈现。

浏览器通常提供了开发者工具以供开发者调试,目前市面上主流的浏览器主要就是chrome、Safari、IE/Edge、opera、firefox这五种浏览器。国内市场有UC浏览器等,但内核的大多都是采用webkit或者兼容低版本IE内核。

从 statcounter 统计数据来看,目前主要的趋势还是以chrome所使用的webkit内核作为主流,同时chrome的开发者工具对于开发人员十分的友好,因此有很多的开发者选择了该浏览器作为首选的调试工具。chrome还有一个便利就是登陆了谷歌账号后,可以在别的机器上进行同步插件和配置。

vue如何将项目部署到服务器上并且使外网能够访问到

你的服务器是什么系统啊 ,,,linux LINUX、WINDOWS、NETWARE、UNIX。。

在linux

首先服务器安装node git   nginx  vue-cli

安装好nginx 用你的公网ip访问就可以看到 下面的页面

然后进入到下面的路径

vi default 你会看到nginx的默认配置

默认监听80端口 根路径

把你写好的vue项目 上传到github ,通过git clone 克隆到

服务器

路径下面

然后npm/yarn add/install 安装依赖 然后npm run build

vi 打开html 下面的 index.html 可以看到

nginx默认的html

进入sites-enabled 发现 它里面的 default 来自 sites-available的default

所以需要在 sites-available 新建一个文件 你的项目名命名就可以

在你新建的文件

我在site-available新建的文件是note-admin 映射到 sites-enables

注意路径一定要写全

最后重新加载下 nginx -s reload

打开浏览器 公网ip:端口号  或者 域名访问

这就可以了

还有 用express 部署这个 简单些