在使用Spark on YARN时,常见的问题可能包括:
-
资源不足错误:当YARN集群中的资源不足以支持Spark应用程序时,会出现此错误。可以通过增加YARN集群的资源或减少Spark应用程序的资源请求来解决此问题。
-
应用程序无法启动:这可能是由于安全设置、配置错误或Spark应用程序文件损坏等原因引起的。需要检查日志并排除故障。
-
容器退出或失败:这可能是由于内存或CPU限制、磁盘空间不足或节点故障等原因导致的。可以通过检查容器和节点级别的日志来诊断问题。
-
资源泄漏:在长时间运行的Spark应用程序中,可能会出现资源泄漏,例如内存泄漏或文件句柄泄漏。需要进行代码审查和性能测试,并调整应用程序的配置参数。
-
系统性能下降:如果YARN集群或Spark应用程序出现系统性能下降,则需要检查各种指标,例如CPU使用率、磁盘I/O和网络延迟等,并尝试优化Spark应用程序的配置参数。
maxRunningApps 参数
maxRunningApps是YARN队列的一个参数,用于控制队列中最大同时运行的应用程序数。
当队列中正在运行的应用程序数量达到该参数指定的值时,队列将拒绝提交更多的应用程序,
直到有应用程序完成并释放资源。该参数可以帮助避免队列中过多的应用程序同时运行,从而导致资源争用和性能问题。
YARN配置文件(yean-site.xml)对任务的影响
yarn.resourcemanager.hostname
指定 YARN 的 ResourceManager 的主机名或 IP 地址。此配置项在集群中的所有节点上必须保持一致。
yarn.resourcemanager.address
指定 YARN 的 ResourceManager 的地址,格式为“hostname:port”。
yarn.nodemanager.vmem-check-enabled
是否启用虚拟内存检查。如果启用,则会在启动 NodeManager 时检查虚拟内存是否足够。
yarn.nodemanager.local-dirs
指定 NodeManager 使用的本地目录。如果有多个目录,用逗号分隔。
yarn.app.mapreduce.am.task.timeout
其中,value的值表示任务最大允许执行时间,单位是毫秒。例如,上面的配置设置任务最大允许执行时间为300000毫秒,即5分钟。
yarn.nodemanager.resource.memory-mb
指定每个NodeManager可以使用的最大内存(以MB为单位),影响Spark任务的内存分配。
yarn.scheduler.minimum-allocation-mb
指定最小的内存分配量(以MB为单位),影响Spark任务的内存分配。
yarn.scheduler.maximum-allocation-mb
指定最大的内存分配量(以MB为单位),影响Spark任务的内存分配。
yarn.nodemanager.resource.cpu-vcores
指定 NodeManager 的可用虚拟核心数。
yarn.application.classpath
指定应用程序使用的类路径。如果应用程序需要使用特定的库或依赖项,则可以将其添加到该配置项中。
yarn.log-aggregation-enable
指定是否启用日志聚合。如果启用,则 NodeManager 会将应用程序的日志聚合到一个文件中,并将其上传到 HDFS。
yarn.timeline-service.enabled
指定是否启用时间线服务。如果启用,则可以跟踪应用程序的历史和状态信息。
yarn.nodemanager.local-dirs
指定NodeManager本地目录的路径,用于存储Spark任务的数据和日志。
yarn.nodemanager.log-dir
指定NodeManager日志目录的路径,用于存储Spark任务的日志。
yarn.nodemanager.aux-services
指定NodeManager需要启动的辅助服务,例如mapreduce_shuffle,用于支持Spark任务的数据传输。
yarn.nodemanager.aux-services.mapreduce_shuffle.class
指定mapreduce_shuffle服务的实现类,用于支持Spark任务的数据传输。
yarn.nodemanager.remote-app-log-dir
指定应用程序日志存储的远程目录,用于存储Spark任务的日志。