我在 YARN 上重新平衡 Apache Spark 作业资源时遇到问题 公平安排队列. 对于测试,我已将 Hadoop 2.6(也尝试过 2.7)配置为在 MacOS 上使用本地 HDFS 以伪分布式模式运行.对于作业提交,使用来自 Spark 网站 的“Pre-build Spark 1.4 for Hadoop 2.6 及更高版本"(也尝试了 1.5)分发. 在使用 Hadoop MapReduce 作业的基本配置进行测试时,公平调度程序按预期工作:当集群资源超过某个最大值时,计算公平份额,并根据这些计算抢占和平衡不同队列中作业的资源. > 对 Spark 作业运行相同的测试,在这种情况下,YARN 会正确计算每个作业的公平份额,但不会重新平衡 Spark 容器的资源. 这是我的配置文件: $HADOOP_HOME/etc/hadoop/yarn-site.xml
以下是关于 yarn 的编程技术问答
我有一个正在运行的 Spark 应用程序,它占用了我的其他应用程序不会分配任何资源的所有内核. 我做了一些快速研究,人们建议使用 YARN kill 或/bin/spark-class 来杀死命令.但是,我使用的是 CDH 版本,而/bin/spark-class 甚至根本不存在,YARN kill 应用程序也不起作用. 有人可以跟我一起吗? 解决方案 从 spark 调度程序复制过去的应用程序 ID,例如 application_1428487296152_25597 连接到已启动作业的服务器 yarn application -kill application_1428487296152_25597
我有一个 AWS EMR 集群(emr-4.2.0、Spark 1.5.2),我从 aws cli 提交步骤.我的问题是,如果 Spark 应用程序失败,那么 YARN 会尝试再次运行该应用程序(在同一 EMR 步骤下).我怎样才能防止这种情况发生? 我试图设置 --conf spark.yarn.maxAppAttempts=1,它在 Environment/Spark 属性中设置正确,但它不会阻止 YARN 重新启动应用程序. 解决方案 您应该尝试将 spark.task.maxFailures 设置为 1(默认为 4). 意思: 在放弃工作之前任何特定任务的失败次数.分布在不同任务中的失败总数不会导致作业失败;特定任务必须失败此次数的尝试.应大于或等于 1.允许重试次数 = 此值 - 1.
我的用例: 我们有一个长期运行的 Spark 作业.在这里调用后,LRJ.该作业每周运行一次. 我们有多个可以随时运行的小型作业.这些作业的优先级高于长时间运行的作业. 为了解决这个问题,我们创建了如下的 YARN 队列: 为资源管理创建了 YARN 队列.为长时间运行的作业配置了 Q1 队列,为小型运行的作业配置了 Q2 队列. Config: Q1 : capacity = 50% and it can go upto 100% capacity on CORE nodes = 50% and maximum 100% Q2 : capacity = 50% and it can go upto 100% capacity on CORE nodes = 50% and maximum 100% 我们面临的问题: 当 LRJ 正在进行时,它会获取所有资源.当 LRJ 获得所有资源时,多
使用HDFS://和纱线之间的差异是用群集模式保存和加载保存文件的差异? 解决方案 从你的问题这里,我显然猜测您对HDFS和纱线的理解不正确. yarn是一款通用作业调度框架,HDFS是一个存储框架. 螺母壳中的纱线有主机(资源管理器)和工人(节点管理器), 资源管理器在工人上创建容器以执行MapReduce作业,Spark作业等. 另一方面 HDFS具有主(姓名节点)和工作者(数据节点),以持续和检索文件. 您不需要纱线与HDF进行通信,它是一个独立的实体. 在生产环境中,HDFS工作人员(数据节点)和纱线工作者(节点管理器)安装在单个计算机中,以便处理框架可以从最近的本地数据节点(数据局部)中消耗数据. 在群集模式下使用纱线集群的火花表示纱线集群中的一个工人节点充当客户端以提交火花作业. 因此,使用HDFS://显然将在Spark Executor将从最近的数据节点读取数据时,显然会使Spark工作受益. 纱线和HDFS配置将从客户
我正在尝试提交一个Carpl作业,指定spark-csv包作为依赖项: spark/bin/spark-submit --packages com.databricks:spark-csv_2.10:1.0.3 --deploy-mode cluster --master yarn-cluster script.py 但我得到以下例外(片段) 15/05/05 22:23:46 INFO yarn.Client: Source and destination file systems are the same. Not copying /home/hadoop/.ivy2/jars/spark-csv_2.10.jar Exception in thread "main" java.io.FileNotFoundException: File does not exist: hdfs://172.31.13.205:9000/home/hadoop/.ivy2/jars/
在群集中运行SparkJob过去的某个数据大小(〜2,5gb)我得到"取消作业,因为SparkContext被关闭"或"executor丢失".当看纱线时,我看到被杀的工作是成功的.在500MB的数据上运行时没有问题.我正在寻找解决方案,发现: - "似乎纱线杀死了一些求助者,因为他们要求更多的内存比预期更多." 如何调试它? 命令我提交我的spark作业: /opt/spark-1.5.0-bin-hadoop2.4/bin/spark-submit --driver-memory 22g --driver-cores 4 --num-executors 15 --executor-memory 6g --executor-cores 6 --class sparkTesting.Runner --master yarn-client myJar.jar jarArguments 和sparkcontext设置 val sparkConf = (ne
apache-spark策略更新版本为0.8.1,其中纱线 - 客户端模式可用.我的问题是,纱线客户模式真的意味着什么?在文献中,它说: With yarn-client mode, the application will be launched locally. Just like running application or spark-shell on Local / Mesos / Standalone mode. The launch method is also the similar with them, just make sure that when you need to specify a master url, use “yarn-client” instead 它是什么意思"在本地发射"?在哪里在哪里?在火花群上? 与纱线独立模式的具体差异是什么? 文档不是很详细,非常感谢任何答案或回复,非常感谢! 解决方案 spark应
如果我在yarn-client上运行spark的单个作业,一切都正常工作,但在多个(> 1)上同时作业,我在容器节点上获得以下异常.我正在使用CDH5.3和Spark-Jobserver 的Spark 1.2 java.io.IOException: org.apache.spark.SparkException: Failed to get broadcast_3_piece0 of broadcast_3 at org.apache.spark.util.Utils$.tryOrIOException(Utils.scala:1011) at org.apache.spark.broadcast.TorrentBroadcast.readBroadcastBlock(TorrentBroadcast.scala:164) at org.apache.spark.broadcast.TorrentBroadcast._value$lzycompute(Tor
我正在尝试使 Spark 2.1.0 上的 Hive 2.1.1 在单个实例上工作.我不确定这是正确的方法.目前我只有一个实例,所以无法构建集群. 当我在 hive 中运行任何插入查询时,我收到错误: hive> insert into mcus (id, name) values (1, 'ARM'); Query ID = server_20170223121333_416506b4-13ba-45a4-a0a2-8417b187e8cc Total jobs = 1 Launching Job 1 out of 1 In order to change the average load for a reducer (in bytes): set hive.exec.reducers.bytes.per.reducer= In order to limit the maximum number of reducers: set hive.exec.re
我试图在 Mac OS X EL Captain 10.11 上使用 Java 1.7 SDK 和 Hadoop2.7.1 运行一个简单的 wordcount MapReduce 程序,我在容器日志“stderr"中收到以下错误消息/bin/bash:/bin/java: 没有这样的文件或目录 应用程序日志- 5/11/27 02:52:33 WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable 15/11/27 02:52:33 INFO client.RMProxy: Connecting to ResourceManager at /192.168.200.96:8032 15/11/27 02:52:34 INFO input.FileInputFormat: Tota
我们正在尝试将我们的作业从 Hadoop 1.0.3 迁移到 Hadoop 2(准确地说是 Hadoop 2.8.1,单节点集群).我们正在使用 YARN 来管理我们的 map-reduce 作业.我们注意到的差异之一是每个计划执行的 map 或 reduce 任务都有两个 Linux 进程.例如,对于我们的任何 reduce 任务,我们都会找到以下两个执行过程: hadoop 124692 124690 0 12:33 ?00:00:00/bin/bash -c/opt/java/bin/java -Djava.net.preferIPv4Stack=true -Dhadoop.metrics.log.level=WARN -Xmx5800M -XX:-UsePerfData -Djava.io.tmpdir=/tmp/hadoop-hadoop/nm-local-dir/usercache/hadoop/appcache/application_1510651062679_00
已解决 原来我们需要将validation.jar放在hadoop/share/hadoop/common/lib/中(从https://mvnrepository.com/artifact/javax.validation/validation-api *). 结合文档所说的:在 Druid 的索引任务 json 中将“mapreduce.job.classloader"设置为“true". 你会得到它的工作 :) -- Druid 0.9.2 和 Hadoop 2.7.3 *) 不知道为什么,我可以看到 Druid 将其类路径中的所有 jars 上传到了 Hadoop(并且 validation.jar 在那里).也许对 JVM 如何从自定义类加载器加载 javax.* 库有限制(?) 以下内容出于历史目的,以帮助搜索. 更新更新 我的错.我忘记将 Dockerfile 中的 core-site.xml 等复制到 Druid 安装中的正确位置
我正在使用从源代码构建的最新 hadoop 版本 3.0.0.我已经启动并运行了我的时间线服务,并已将 hadoop 配置为也将其用于作业历史记录.但是,当我在资源管理器 UI 中单击历史记录时,出现以下错误:- HTTP ERROR 404 Problem accessing /jobhistory/job/job_1444395439959_0001. Reason: NOT_FOUND 有人可以指出我在这里缺少什么.以下是我的 yarn-site.xml:- The hostname of the Timeline service web application. yarn.timeline-service.hostname
我在 xml 文件中启用了日志:yarn-site.xml,然后我重新启动了 yarn: sudo service hadoop-yarn-resourcemanager restart sudo service hadoop-yarn-nodemanager restart 我运行了我的应用程序,然后我在 yarn application -list 中看到了 applicationID.所以,我这样做:yarn logs -applicationId ,我得到以下结果: hdfs:///var/log/hadoop-yarn/path/to/application/ does not have any log files 我需要更改一些其他配置吗?还是我以错误的方式访问日志? 谢谢. 解决方案 yarn application -list 将仅列出已提交、接受或中的应用程序RUNNING 状态.
在我们在 Yarn 下运行的 Hadoop 集群中,我们遇到了一个问题,即一些“更聪明"的人能够通过在 pySpark Jupyter 笔记本中配置 Spark 作业来消耗大量资源,例如: conf = (SparkConf() .setAppName("name") .setMaster("yarn-client") .set("spark.executor.instances", "1000") .set("spark.executor.memory", "64g") ) sc = SparkContext(conf=conf) 这会导致这些人从字面上排挤其他不那么“聪明"的人. 有没有办法禁止用户自行分配资源,将资源分配完全交给 Yarn? 解决方案 YARN对多租户集群中的队列容量规划有很好的支持,YARN ResourceManager使用CapacityScheduler 默
问 题 最近我在部署我前端代码的时候,碰到一个问题,在git版本库,为了防止加入一些无关代码和更新导致的N多change,把node_module添加到了.gitignore(相信大部分人都是怎么做的)。 但是在部署的时候,我在部署脚本安装依赖的时候...发现npm install真是巨慢无比啊(已经用了淘宝的源),在阿某云的服务器,带宽不高只有1m,但是每次都是retry,timeout.不是慢,而是完全下载不下来。 后面看了下yarn,好吧介绍是比npm好使很多,有lock文件,保证本地和线上用的同一个版本。并发加载资源。然而...我npm install yarn -g都安装不下来。如下卡在那个位置了。 ports-color extract:node-gyp → gunzTa ▄ ╢███████████████████████████████████████░░░░░░░░░░░░░░░░░░░░░╟ 我目前的思路就是: 使用VPN,感觉也不稳定