Spark WARN cluster.ClusterScheduler: Initial job has not accepted any resources;check your cluster

本文针对Spark集群模式下出现的资源未被接受警告进行了详细的解析,包括主机名与IP配置错误、内存不足及端口号被占用等问题,并提供了相应的解决办法。

当我在Spark集群模式执行以下命令时:

root@debian-master:/home/hadoop/spark-0.8.0-incubating-bin-hadoop1# ./run-example org.apache.spark.examples.SparkPi spark://master:7077

出现了这个错误: WARN cluster.ClusterScheduler: Initial job has not accepted any resources; check your cluster UI to ensure that workers are registered and have sufficient memory

可能是你在运行的时候hosts写错了. ”root@debian-master :“说明主机的hostname是debian-master,所以解决方法是用正确的host名(实在不行用ip)执行程序:

root@debian-master:/home/hadoop/spark-0.8.0-incubating-bin-hadoop1# ./run-example org.apache.spark.examples.SparkPi spark://debian-master:7077




其他解决方法:


1,hosts和ip配置不正确

如果接收到异常为:


WARNYarnClientClusterScheduler: Initial job has not accepted any resources;check your cluster UI to ensure that workers are registered and havesufficient memory

 出现这个错误是因为提交任务的节点不能和spark工作节点交互,因为提交完任务后提交任务节点上会起一个进程,展示任务进度,大多端口为4044,工作节点需要反馈进度给该该端口,所以如果主机名或者IP在hosts中配置不正确,就会报

WARN YarnClientClusterScheduler: Initial job has not accepted anyresources; check your cluster UI to ensure that workers are registeredand have sufficient memory错误。
所以请检查主机名和IP是否配置正确。

>> original link




下面是我自己的host配置:

_____________________________________________________________________

root@debian-master:/home/hadoop/spark-0.8.0-incubating-bin-hadoop1# cat /etc/hosts

127.0.0.1    localhost
192.168.137.5    debian-master 
# The following lines are desirable for IPv6 capable hosts
::1     ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters

#hadoop
192.168.137.5 master   
192.168.137.6 slave1
192.168.137.7 slave2
192.168.137.6 debian-slave
192.168.137.7 hadoop-slave

root@debian-master:/home/hadoop/spark-0.8.0-incubating-bin-hadoop1# cat /etc/hostname
debian-master
root@debian-master:/home/hadoop/spark-0.8.0-incubating-bin-hadoop1#
_____________________________________________________________________



2. 内存不足

You get this when either the number of cores or amount of RAM (per node) you request via settingspark.cores.max andspark.executor.memoryresp' exceeds what is available. Therefore even if no one else is usingthe cluster, and you specify you want to use, say 100GB RAM per node,but your nodes can only support 90GB, then you will get this errormessage.

To be fair the message is vague in this situation, it would be more helpful if it said your exceeding the maximum.

>> original link


3.端口号被占用,之前的程序已运行。 

when you already start a spark_shell in another terminal , run a example you will get FAILED SelectChannelConnector@0.0.0.0:4040: java.net.BindException: Address already in use,finally ,you got the problem as title describe...

so ,just exit spark_shell

and run again !


<think> 我们正在解决两个问题: 1. "Initial job has not accepted any resources" 错误 2. "No custom resources configured for spark.driver" 信息 第一个错误通常是由于集群资源不足或Worker未注册导致的。第二个信息提示我们没有为spark.driver配置自定义资源,但这通常只是一个信息性消息,可能不是根本问题。 根据之前的上下文,我们重点解决第一个错误,因为它是导致任务无法启动的关键。第二个消息可能只是配置提示,在大多数情况下可以忽略,除非确实需要自定义资源。 步骤: 1. 检查Worker是否成功注册到Master - 通过Master UI(通常http://<master-ip>:8080)查看Workers列表,确保有状态为ALIVE的Worker。 - 如果没有,检查Worker节点的日志($SPARK_HOME/logs/)查看注册失败的原因。 2. 检查资源分配 - 确保Worker有足够的资源(CPU和内存)来满足应用程序请求。 - 在提交应用时,通过spark-submit参数指定资源时,不要超过Worker可用的资源。 3. 调整Spark配置 - 在spark-submit命令中,设置合适的资源参数,例如: --executor-memory 512m --total-executor-cores 1 - 如果集群资源紧张,可以适当减少这些值。 4. 检查网络连接 - 确保Master和Worker之间的网络是连通的,特别是Master监听端口(默认7077)是否可达。 5. 检查Spark版本和依赖 - 如果使用了额外的jar包(如引用[2]中提到的),确保这些jar包位于正确的路径,并且与Spark版本兼容。 6. 日志分析 - 查看Driver和Executor的日志,获取更详细的错误信息。 针对第二个消息:“No custom resources configured for spark.driver”,这通常不是一个错误,而只是一个信息。它表示没有为driver配置自定义资源(如GPU等)。如果你没有使用自定义资源,可以忽略此消息。如果你确实需要配置自定义资源,可以在配置中设置,例如: spark.driver.resource.{resourceName}.amount spark.driver.resource.{resourceName}.discoveryScript 但大多数情况下,不需要自定义资源,所以可以忽略。 解决方案步骤: 步骤1:验证Worker注册 - 登录Master节点,检查Master日志,看是否有Worker注册。 - 登录Worker节点,检查Worker日志,看是否成功注册到Master。 步骤2:调整资源请求 - 在提交任务时,确保请求的资源不超过Worker节点的可用资源。例如,如果Worker只有1G内存,那么executor-memory就不能超过1G(通常还要留一些给系统)。 示例spark-submit命令: spark-submit \ --class org.apache.spark.examples.SparkPi \ --master spark://<master-ip>:7077 \ --executor-memory 512m \ --total-executor-cores 1 \ /path/to/examples.jar 步骤3:检查依赖 - 如果应用依赖外部jar包,确保这些包在Driver和Executor都能访问到。可以通过--jars参数指定。 步骤4:查看详细日志 - 在spark-submit命令中添加日志配置,或者查看Spark Web UI中的日志,以获取更准确的错误原因。 步骤5:忽略“No custom resources”消息 - 除非你明确需要自定义资源,否则可以忽略该信息。 如果上述步骤仍不能解决问题,请提供更多日志信息。 下面我们详细展开解决方案。 </think> ### 解决 Spark "Initial job has not accepted any resources" 及 "No custom resources" 问题的完整方案 #### 一、核心问题诊断 1. **资源未分配警告根源** - Worker未注册(网络/配置错误) - 资源请求超过Worker容量($executor\_memory > worker\_memory$) - 主端口(7077)阻塞或Firewall拦截[^1] 2. **"No custom resources"信息解析** ```bash # 此提示表示Spark未启用自定义资源管理(如GPU/FPGA) INFO ResourceUtils: No custom resources configured for spark.driver ``` - **非错误提示**:仅说明未配置特殊硬件资源 - **解决方案**:可安全忽略,除非需GPU等加速 #### 二、分步解决方案 ##### 第一步:修复Worker注册问题 1. **检查集群状态** ```bash # 在Master节点执行 $SPARK_HOME/sbin/start-master.sh $SPARK_HOME/sbin/start-worker.sh spark://master-ip:7077 # 验证Worker状态 curl http://master-ip:8080 | grep "Alive Workers" ``` - 预期输出:`Alive Workers: 1` 2. **关键配置检查 (`spark-env.sh`)** ```bash # 所有节点必须一致 SPARK_MASTER_HOST=master-ip # 需可解析的IP或域名 SPARK_LOCAL_IP=worker-ip # 每台Worker设置自身IP SPARK_WORKER_MEMORY=1g # 不超过物理内存80% ``` 3. **网络连通性测试** ```bash # 在Worker节点执行 telnet master-ip 7077 # 检测主端口 ping master-ip # 检测基础网络 ``` ##### 第二步:解决资源分配问题 1. **资源请求优化(spark-submit示例)** ```bash spark-submit \ --master spark://master-ip:7077 \ --executor-memory 512m \ # ≤Worker内存的50%[^1] --executor-cores 1 \ --total-executor-cores 1 \ # 限制总核心数 --conf "spark.driver.memory=512m" \ --jars /path/to/external_jars/*.jar \ # 外部依赖[^2] your_app.jar ``` 2. **动态资源参数(代码中覆盖)** ```scala new SparkConf() .set("spark.executor.instances", "1") // 固定Executor数 .set("spark.dynamicAllocation.enabled", "false") // 关闭动态分配 .set("spark.task.maxFailures", "10") // 增加容错[^1] ``` ##### 第三步:高级故障排除 1. **日志分析重点** ```log ## 关键错误线索 ## ERROR Worker: Failed to connect to master WARN NettyRpcEndpointRef: Error sending message java.lang.OutOfMemoryError: GC overhead limit exceeded ``` 2. **资源监控公式** $$ \text{可用内存} \geq \text{spark.driver.memory} + \sum{\text{spark.executor.memory}} + \text{系统预留(300MB)} $$ - 示例:2GB节点 → Driver 512m + Executor 512m < 1024m(安全) #### 三、预防措施 | 配置项 | 推荐值 | 作用 | |------------------------|------------------|--------------------------| | `spark.executor.memory`| Worker内存的40% | 防止OOM | | `spark.network.timeout`| `300s` | 避免网络波动超时 | | `spark.worker.cleanup.enabled` | `true` | 自动清理失败任务 | | `spark.logConf` | `true` | 启动时打印完整配置 | > **验证方法**:任务提交后,在Spark UI的`Environment`标签页检查实际生效配置[^1] #### 四、特殊场景处理 **当使用外部依赖时**(如Hudi/Avro): 1. 确保所有节点相同路径存在JAR包[^2] ```bash # 分发依赖到所有节点 scp -r /hadoop/spark/external_jars worker-ip:/hadoop/spark/ ``` 2. 提交时显式指定`--jars`(逗号分隔) ```bash --jars hudi-spark-bundle_2.11-0.5.2-incubating.jar,spark-avro_2.11-2.4.4.jar ``` 通过上述方案,95%的资源分配问题可解决。若仍出现警告,需结合`$SPARK_HOME/logs/master.log`中的`Registering worker`记录深度排查Worker注册流程[^1]。
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值