如下,运行spark yarn cluster时出现yarn这样的报错是什么原因

Spark on YARN客户端模式作业运行全过程分析 – 过往记忆
欢迎关注Hadoop、Hive、Hbase、Flume等微信公共账号:iteblog_hadoop。
文章总数:623
浏览总数:6,410,813
评论:3414
分类目录:69 个
注册用户数:1087
最后更新:日
欢迎关注微信公共帐号:iteblog_hadoop
关注互联网头条技术
《 Standalone模式作业运行全过程分析》(未发布)
  在前篇文章中我介绍了 on YARN集群模式(yarn-cluster)作业从提交到运行整个过程的情况(详情见),我们知道Spark on yarn有两种模式:yarn-cluster和yarn-client。这两种模式作业虽然都是在yarn上面运行,但是其中的运行方式很不一样,今天我就来谈谈Spark on YARN
yarn-client模式作业从提交到运行的过程剖析。
  和yarn-cluster模式一样,整个程序也是通过spark-submit脚本提交的。但是yarn-client作业程序的运行不需要通过Client类来封装启动,而是直接通过反射机制调用作业的main函数。下面就来分析:
  1、通过SparkSubmit类的launch的函数直接调用作业的main函数(通过反射机制实现),如果是集群模式就会调用Client的main函数。
  2、而应用程序的main函数一定都有个SparkContent,并对其进行初始化;
  3、在SparkContent初始化中将会依次做如下的事情:设置相关的配置、注册MapOutputTracker、BlockManagerMaster、BlockManager,创建taskScheduler和dagScheduler;其中比较重要的是创建taskScheduler和dagScheduler。在创建taskScheduler的时候会根据我们传进来的master来选择Scheduler和SchedulerBackend。由于我们选择的是yarn-client模式,程序会选择ClientClusterScheduler和ClientSchedulerBackend,并将ClientSchedulerBackend的实例初始化YarnClientClusterScheduler,上面两个实例的获取都是通过反射机制实现的,YarnClientSchedulerBackend类是CoarseGrainedSchedulerBackend类的子类,YarnClientClusterScheduler是TaskSchedulerImpl的子类,仅仅重写了TaskSchedulerImpl中的getRackForHost方法。
  4、初始化完taskScheduler后,将创建dagScheduler,然后通过taskScheduler.start()启动taskScheduler,而在taskScheduler启动的过程中也会调用SchedulerBackend的start方法。在SchedulerBackend启动的过程中将会初始化一些参数,封装在ClientArguments中,并将封装好的ClientArguments传进Client类中,并client.runApp()方法获取Application ID。
  5、client.runApp里面的做是和前面客户端进行操作那节类似,不同的是在里面启动是ExecutorLauncher(yarn-cluster模式启动的是ApplicationMaster)。
  6、在ExecutorLauncher里面会初始化并启动amClient,然后向ApplicationMaster注册该Application。注册完之后将会等待driver的启动,当driver启动完之后,会创建一个MonitorActor对象用于和CoarseGrainedSchedulerBackend进行通信(只有事件AddWebUIFilter他们之间才通信,Task的运行状况不是通过它和CoarseGrainedSchedulerBackend通信的)。然后就是设置addAmIpFilter,当作业完成的时候,ExecutorLauncher将通过amClient设置Application的状态为FinalApplicationStatus.SUCCEEDED。
  7、分配Executors,这里面的分配逻辑和yarn-cluster里面类似,就不再说了。
  8、最后,Task将在CoarseGrainedExecutorBackend里面运行,然后运行状况会通过Akka通知CoarseGrainedScheduler,直到作业运行完成。
  9、在作业运行的时候,YarnClientSchedulerBackend会每隔1秒通过client获取到作业的运行状况,并打印出相应的运行信息,当Application的状态是FINISHED、FAILED和KILLED中的一种,那么程序将退出等待。
  10、最后有个线程会再次确认Application的状态,当Application的状态是FINISHED、FAILED和KILLED中的一种,程序就运行完成,并停止SparkContext。整个过程就结束了。
本博客文章除特别声明,全部都是原创!
尊重原创,转载请注明: 转载自
下面文章您可能感兴趣后使用快捷导航没有帐号?
查看: 2317|回复: 4
请教Spark Streaming的例子NetworkWordCount在yarn上面运行时的问题
新手上路, 积分 21, 距离下一级还需 29 积分
论坛徽章:0
在spark官网上面关于spark streaming有这么一个例子,按照例子做也是没有问题的:
2.jpg (34.43 KB)
15:44 上传
之后我想把这个例子放到yarn上面去做,然后我用一下的命令:$ ./bin/spark-submit --class org.apache.spark.examples.streaming.NetworkWordCount --master yarn-cluster --num-executors 2 --driver-memory 512m --executor-memory 512m --executor-cores 1 lib/spark-examples*.jar localhost 9999
之后我在applications上面去看logs,一个stderr,一个stdout,然后按照例子来说,我在9999端口去输入数据的时候,应该在stdout会输出wordcount的结果,但是在stdout中永远只有一行,如下:
1.jpg (109.49 KB)
15:42 上传
不知道为什么,暂时自己也没找到解决办法,麻烦各位解答,我是spark的初学者,请各位帮忙,感激不尽!
[img]file:///C:UsersLuanPCAppDataRoamingTencentUsersQQWinTempRichOle9($3R[GQ1XETID(U$P1N22U.jpg[/img]
新手上路, 积分 21, 距离下一级还需 29 积分
论坛徽章:0
而且我在9999端口去输入数据的时候,在stderr中确实能看见数据过来了,如下:
3.jpg (50.72 KB)
15:49 上传
就是不知道为什么在stdout中不现实。求解!
新手上路, 积分 21, 距离下一级还需 29 积分
论坛徽章:0
没有高手能解决一下这个问题吗?顶!
新手上路, 积分 1, 距离下一级还需 49 积分
论坛徽章:0
我用run-example单机跑也没有结果,将run-example中的local[*]改为2以后可以,把--executor-cores 设为2试试吧中国领先的IT技术网站
51CTO旗下网站
别再比较Hadoop和Spark了,那不是设计人员的初衷
直接比较Hadoop和Spark有难度,因为它们处理的许多任务都一样,但是在一些方面又并不相互重叠。Hadoop和Spark并不是非此即彼的关系,也不是说一方是另一方的简易替代者。两者彼此兼容,这使得这对组合成为一种功能极其强大的解决方案,适合诸多大数据应用场合。
作者:云头条编译来源:| 14:35
对Hadoop与Spark孰优孰劣这个问题,最准确的观点就是,设计人员旨在让Hadoop和Spark在同一个团队里面协同运行。
直接比较Hadoop和Spark有难度,因为它们处理的许多任务都一样,但是在一些方面又并不相互重叠。
比如说,Spark没有文件管理功能,因而必须依赖Hadoop分布式文件系统(HDFS)或另外某种解决方案。将Hadoop
MapReduce与Spark作一番比较来得更明智,因为它们作为数据处理引擎更具有可比性。
过去几年,随着数据科学趋于成熟,也日益需要用一种不同的方法来处理大数据。Hadoop在一些业务应用领域的表现比后起之秀Spark更胜一筹, 不过Spark在大数据领域有其一席之地,这归功于它具有速度快、易于使用的优点。本文剖析了两大平台的一系列常见属性,包括性能、容错、成本、易用性、 数据处理、兼容性和安全性。
Hadoop和Spark方面要记住的最重要一点就是,它们并不是非此即彼的关系,因为它们不是相互排斥,也不是说一方是另一方的简易替代者。两者彼此兼容,这使得这对组合成为一种功能极其强大的解决方案,适合诸多大数据应用场合。
Hadoop的定义
Hadoop是Apache.org的一个项目,其实是一种软件库和框架,以便使用简单的编程模型,跨计算器集群对庞大数据集(大数据)进行分布式 处理。Hadoop可灵活扩展,从单一计算机系统,到提供本地存储和计算能力的数千个商用系统,它都能轻松支持。实际上,Hadoop就是大数据分析领域 的重量级大数据平台。
Hadoop由协同运行、构建Hadoop框架的多个模块组成。Hadoop框架的主要模块包括如下:
Hadoop Common
Hadoop分布式文件系统(HDFS)
Hadoop YARN
Hadoop MapReduce
虽然上述四个模块构成了Hadoop的核心,不过还有其他几个模块。这些模块包括:Ambari、Avro、Cassandra、Hive、
Pig、Oozie、Flume和Sqoop,它们进一步增强和扩展了Hadoop的功能,得以扩大到大数据应用领域,处理庞大数据集。
许多使用大数据集和分析工具的公司使用Hadoop。它已成为大数据应用系统中事实上的标准。设计Hadoop的初衷是处理这项任务:搜寻和搜索数 十亿个网页,将这些信息收集到数据库中。正是由于渴望搜寻和搜索互联网,才有了Hadoop的HDFS及分布式处理引擎MapReduce。
如果数据集变得极其庞大或极其复杂,以至于当前的解决方案无法在数据用户认为合理的时间段内有效地处理信息,Hadoop对公司就会大有用处。
MapReduce是一种出色的文本处理引擎,它理应如此,因为搜寻互联网和搜索互联网(它的首要任务)都是基于文本的任务。
Spark的定义
Spark开发人员声称它是&一种用于数据大规模处理的快速通用引擎&。相比之下,如果说Hadoop的大数据框架好比是800磅重的大猩猩,Spark就好比是130磅重的猎豹。
虽然批评Spark的内存处理技术的人士承认,Spark确实速度很快(最多比Hadoop
MapReduce快100倍),但他们可能并不愿意承认它在磁盘上运行起来速度最多快10倍。Spark还可以执行批量处理,然而它真正擅长的是处理流工作负载、交互式查询和基于机器的学习。
相比MapReduce基于磁盘的批量处理引擎,Spark赖以成名之处是其数据实时处理功能。Spark与Hadoop及其模块兼容。实际上,在Hadoop的项目页面上,Spark就被列为是一个模块。
Spark有自己的页面,因为虽然它可以通过YARN(另一种资源协调者)在Hadoop集群中运行,但是它也有一种独立模式。它可以作为
Hadoop模块来运行,也可以作为独立解决方案来运行;这样一来,很难直接比较两者。然而随着时间的推移,一些大数据科学家预计Spark会出现分叉,可能会取代Hadoop,尤其是在更快速地访问处理的数据至关重要的情况下。
Spark是一种集群计算框架,这意味着它更多地与MapReduce竞争,而不是与整个Hadoop生态系统竞争。比如说,Spark没有自己的分布式文件系统,但可以使用HDFS。
Spark使用内存,也可以使用磁盘进行处理,而MapReduce完全基于磁盘。MapReduce和Spark的主要区别在于,MapReduce使用持久存储,而Spark使用弹性分布式数据集(RDDS),下面容错部分有更详细的解释。
网上不缺关于Spark与MapReduce相比有多快的信息。对两者进行比较有个问题,那就是它们处理数据的方式不一样,数据处理部分有介绍。Spark之所以如此快速,原因在于它在内存中处理一切数据。没错,它还可以使用磁盘来处理未全部装入到内存中的数据。
Spark的内存处理为来自多个来源的数据提供了近乎实时分析的功能:营销活动、机器学习、物联网传感器、日志监控、安全分析和社交媒体网站。另 外,MapReduce使用批量处理,其实从来就不是为惊人的速度设计的。它的初衷是不断收集来自网站的信息,不需要这些数据具有实时性或近乎实时性。
众所周知,Spark以性能见长,但是它也因易用性而小有名气,原因是它随带易于使用的API,支持Scala(原生语言)、Java、Python和Spark
SQL。Spark SQL非常类似于SQL 92,所以几乎不需要经历一番学习,马上可以上手。
Spark还有一种交互模式,那样开发人员和用户都可以获得查询和其他操作的即时反馈。MapReduce没有交互模式,不过有了Hive和Pig等附加模块,采用者使用MapReduce来得容易一点。
MapReduce和Spark都是Apache项目,这意味着它们是开源免费软件产品。虽然软件不需要成本,但是派人用硬件运行任何一种平台带来了成本。这两种产品都设计成可以在商用硬件上运行,比如所谓的低成本白盒服务器系统。
MapReduce和Spark在同样的硬件上运行,那么这两种解决方案的成本差异体现在哪里?MapReduce使用常规数量的内存,因为数据处 理基于磁盘,所以公司得购买速度更快的磁盘和大量磁盘空间来运行MapReduce。MapReduce还需要更多的系统,将磁盘输入/输出分布到多个系 统上。
Spark需要大量内存,但是可以使用常规数量的常规转速磁盘。一些用户抱怨会产生临时文件,需要清理。这些临时文件通常保存7天,以便加快针对同 一数据集的任何处理。磁盘空间相对便宜,由于Spark不使用磁盘输入/输入用于处理,已使用的磁盘空间可以用于SAN或NAS。
然而,由于需要大量内存在内存中处理一切数据,Spark系统的成本更高,这点没错。但是Spark的技术同时减少了所需的系统数量。所以,最后的 情形是,系统成本较高,但是数量大大减少。也许到时候,Spark实际上可以降低每个计算单位的成本,尽管内存方面有额外的要求。
举例说明,&Spark已证明在数据多达PB的情况下也轻松自如。它被用于在数量只有十分之一的机器上,对100TB数据进行排序的速度比Hadoop
MapReduce快3倍。&这一成绩让Spark成为2014年Daytona GraySort基准。
MapReduce和Spark相互兼容;MapReduce通过JDBC和ODC兼容诸多数据源、文件格式和商业智能工具,Spark具有与MapReduce同样的兼容性。
MapReduce是一种批量处理引擎。MapReduce以顺序步骤来操作,先从集群读取数据,然后对数据执行操作,将结果写回到集群,从集群读 取更新后的数据,执行下一个数据操作,将那些结果写回到结果,依次类推。Spark执行类似的操作,不过是在内存中一步执行。它从集群读取数据后,对数据 执行操作,然后写回到集群。
Spark还包括自己的图形计算库GraphX​​。GraphX让用户可以查看与图形和集合同样的数据。用户还可以使用弹性分布式数据集(RDD),改变和联合图形,容错部分作了讨论。
至于容错,MapReduce和Spark从两个不同的方向来解决问题。MapReduce使用TaskTracker节点,它为
JobTracker节点提供了心跳(heartbeat)。如果没有心跳,那么JobTracker节点重新调度所有将执行的操作和正在进行的操作,交 给另一个TaskTracker节点。这种方法在提供容错性方面很有效,可是会大大延长某些操作(即便只有一个故障)的完成时间。
Spark使用弹性分布式数据集(RDD),它们是容错集合,里面的数据元素可执行并行操作。RDD可以引用外部存储系统中的数据集,比如共享式文件系统、HDFS、HBase,或者提供Hadoop
InputFormat的任何数据源。Spark可以用Hadoop支持的任何存储源创建RDD,包括本地文件系统,或前面所列的其中一种文件系统。
RDD拥有五个主要属性:
计算每个分片的函数
依赖其他RDD的项目列表
面向键值RDD的分区程序(比如说RDD是散列分区),这是可选属性
计算每个分片的首选位置的列表(比如HDFS文件的数据块位置),这是可选属性
RDD可能具有持久性,以便将数据集缓存在内存中。这样一来,以后的操作大大加快,最多达10倍。Spark的缓存具有容错性,原因在于如果RDD的任何分区丢失,就会使用原始转换,自动重新计算。
按照定义,MapReduce和Spark都可以使用HDFS来扩展。那么,Hadoop集群能变得多大呢?
据称雅虎有一套42000个节点组成的Hadoop集群,可以说扩展无极限。最大的已知Spark集群是8000个节点,不过随着大数据增多,预计集群规模也会随之变大,以便继续满足吞吐量方面的预期。
Hadoop支持Kerberos身份验证,这管理起来有麻烦。然而,第三方厂商让企业组织能够充分利用活动目录Kerberos和LDAP用于身份验证。同样那些第三方厂商还为传输中数据和静态数据提供数据加密。
Hadoop分布式文件系统支持访问控制列表(ACL)和传统的文件权限模式。Hadoop为任务提交中的用户控制提供了服务级授权(Service Level
Authorization),这确保客户拥有正确的权限。
Spark的安全性弱一点,目前只支持通过共享密钥(密码验证)的身份验证。Spark在安全方面带来的好处是,如果你在HDFS上运行Spark,它可以使用HDFS
ACL和文件级权限。此外,Spark可以在YARN上运行,因而能够使用Kerberos身份验证。
总结Hadoop vs Spark
乍一看,对任何大数据应用而言,使用Spark似乎是默认选择。然而,事实并非如此。MapReduce已在大数据市场取得了进展,尤其受到这种公司企业的追捧:需要由商用系统对庞大数据集加以控制。Spark的速度、灵活性和相对易用性对MapReduce的低操作成本来说是绝对补充。
实际上,Spark与MapReduce是一种相互共生的关系。Hadoop提供了Spark所没有的功能特性,比如分布式文件系统,而Spark
为需要它的那些数据集提供了实时内存处理。完美的大数据场景正是设计人员当初预想的那样:让Hadoop和Spark在同一个团队里面协同运行。
【编辑推荐】【责任编辑: TEL:(010)】
大家都在看猜你喜欢
热点热点热点热点热点
24H热文一周话题本月最赞
讲师:5人学习过
讲师:1人学习过
讲师:4人学习过
精选博文论坛热帖下载排行
本书是程序员面试宝典系列中的一册,也是上一本《程序员面试宝典》的姊妹书。本书对程序设计面试中Java常见的题型和常用解答技巧进行了介绍...
订阅51CTO邮刊spark on yarn提交任务时一直显示ACCEPTED - 开源中国社区
当前访客身份:游客 [
当前位置:
spark on yarn提交任务时一直显示ACCEPTED,过一个小时后就会出现任务失败,但在提交时shell终端显示的日志并没有报错,logs文件夹中也没有日志产生。
任务提交命令为
&bin/spark-submit --class org.apache.spark.examples.JavaWordCount\ &&& --master yarn-client \ &&& --num-executors 25 \ &&& --executor-memory 1g \ &&& --executor-cores 1 \ &&& lib/spark-examples-1.0.1-hadoop2.2.0.jar \ && &hdfs://192.168.1.11:9000/test
spark-env.sh配置如下:
export SPARK_JAR=hdfs://192.168.1.11:9000/test1/spark-assembly-1.0.1-hadoop2.2.0.jar export SPARK_YARN_APP_JAR=hdfs://192.168.1.11:9000/test1/spark-examples-1.0.1-hadoop2.2.0.jar export HADOOP_CONF_DIR=/hadoop/etc/hadoop export SPARK_EXECUTOR_INSTANCES=1000 export SPARK_EXECUTOR_CORES=1 export SPARK_EXECUTOR_MEMORY=10000M export SPARK_DRIVER_MEMORY=20000M export SPARK_YARN_APP_NAME=spark
共有1个答案
<span class="a_vote_num" id="a_vote_num_
该问题最后终于解决了,总结一下如下:
http://my.oschina.net/mkh/blog/310158
更多开发者职位上
有什么技术问题吗?
闵开慧的其它问题
类似的话题

我要回帖

更多关于 spark yarn 部署 的文章

 

随机推荐