hadoop- yarn启动后用jps查看没有resourcemanager
hadoop- yarn启动后用jps查看没有resourcemanager
前言
Hadoop YARN作为现代大数据平台的核心组件之一,其稳定性和性能至关重要。在部署和运维过程中,确保YARN组件,尤其是ResourceManager的顺利启动是日常工作中的一项基本任务。本文将详细介绍如何诊断并解决YARN启动时ResourceManager无法启动的问题。
问题描述
在启动Hadoop YARN时,通过jps命令检查进程,发现没有ResourceManager运行。这通常意味着YARN的ResourceManager启动失败。
日志分析
通过检查ResourceManager的日志文件hadoop-xxx-resourcemanager-.log,发现以下错误:
2024-01-15 11:46:14,440 ERROR org.apache.hadoop.yarn.server.resourcemanager.ResourceManager: Error starting ResourceManager
java.lang.ExceptionInInitializerError
at com.google.inject.internal.cglib.reflect.$FastClassEmitter.<init>(FastClassEmitter.java:67)
at org.apache.hadoop.yarn.webapp.WebApps$Builder.build(WebApps.java:417)
at org.apache.hadoop.yarn.webapp.WebApps$Builder.start(WebApps.java:465)
at org.apache.hadoop.yarn.server.resourcemanager.ResourceManager.startWepApp(ResourceManager.java:1389)
at org.apache.hadoop.yarn.server.resourcemanager.ResourceManager.serviceStart(ResourceManager.java:1498)
at org.apache.hadoop.service.AbstractService.start(AbstractService.java:194)
at org.apache.hadoop.yarn.server.resourcemanager.ResourceManager.main(ResourceManager.java:1700)
Caused by: java.lang.reflect.InaccessibleObjectException: Unable to make protected final java.lang.Class java.lang.ClassLoader.defineClass(java.lang.String,byte[],int,int,java.security.ProtectionDomain) throws java.lang.ClassFormatError accessible: module java.base does not "opens java.lang" to unnamed module @4d7c417d
at java.base/java.lang.reflect.AccessibleObject.checkCanSetAccessible(AccessibleObject.java:354)
at java.base/java.lang.reflect.AccessibleObject.checkCanSetAccessible(AccessibleObject.java:297)
at java.base/java.lang.reflect.Method.checkCanSetAccessible(Method.java:199)
at java.base/java.lang.reflect.Method.setAccessible(Method.java:193)
at com.google.inject.internal.cglib.core.$ReflectUtils$2.run(ReflectUtils.java:56)
at java.base/java.security.AccessController.doPrivileged(AccessController.java:318)
at com.google.inject.internal.cglib.core.$ReflectUtils.<clinit>(ReflectUtils.java:46)
... 29 more
这个错误是由于JDK 8及更高版本中引入的模块化系统导致的。在这些版本中,默认情况下,不允许跨模块的某些反射访问,除非明确允许。
由于使用jdk17作为 hadoop java环境变量 故才引出此问题。
解决方案
修改yarn-env.sh文件:
编辑Hadoop配置文件yarn-env.sh,为JVM添加–add-opens参数以允许所需的反射访问。
export YARN_RESOURCEMANAGER_OPTS="--add-opens java.base/java.lang=ALL-UNNAMED"
export YARN_NODEMANAGER_OPTS="--add-opens java.base/java.lang=ALL-UNNAMED"
清理Hadoop临时文件:
有时候,旧的临时文件可能会干扰Hadoop的正常启动。确保清理这些文件。
# 清理示例命令,具体路径根据实际环境而定
rm -rf /path/to/hadoop/tmp/*
重新启动Hadoop YARN:
在应用了上述更改并清理了临时文件后,重新启动YARN。
stop-yarn.sh
start-yarn.sh
验证ResourceManager是否成功启动:
使用jps命令或直接检查ResourceManager的日志文件,确认ResourceManager是否成功启动。
jps
可以观察日志查看启动情况 如果没有其他的报错的话 应该可以看到 ResourceManager
其他可能的问题
端口被占用
如果启动的端口被占用后,启动也会报错。结合日志观察是否是此问题
配置异常
需要正确的配置 ,才能保证启动成功 结合官方文档进行配置
官方文档: 点我
等等
扩展资料
YARN ResourceManager故障排除
检查配置文件
确保yarn-site.xml中的所有配置项都是正确的,特别是与ResourceManager相关的配置。
资源限制
检查系统资源限制,如内存和CPU使用率,确保ResourceManager有足够的资源运行。
网络问题
验证网络配置,确保ResourceManager可以与NodeManagers通信。
权限问题
确保运行YARN服务的用户有权限访问Hadoop目录和文件。
YARN性能优化
调整队列容量
根据应用需求调整容量队列和公平队列的容量和权重。
优化调度器:
根据作业类型和资源需求选择合适的调度器,如Capacity Scheduler或Fair Scheduler。
内存和CPU调优:
调整JVM选项,为ResourceManager分配适当的内存和CPU资源。
使用CGroups:
如果运行在Linux上,使用CGroups来限制和隔离YARN容器的资源使用。
YARN运维管理
监控系统
使用监控工具,如Apache Ambari、Ganglia或Nagios,来监控YARN集群状态。
日志管理
实施一个集中的日志管理策略,以便于跟踪和分析日志文件。
定期维护
定期进行系统维护和检查,包括清理旧的日志文件和临时文件。
安全加固
应用安全最佳实践,包括使用Kerberos认证和加密通信。
YARN高级特性
NodeLabel和多租户
使用NodeLabel来实现多租户资源隔离。
YARN联邦
配置YARN联邦来支持多个ResourceManager。
YARN原生服务
使用YARN原生服务,如Apache Spark和Apache Tez,来提高计算效率。
总结
通过添加JVM参数–add-opens来允许必要的反射访问,可以解决因JDK 8及更高版本中的模块化限制导致的YARN ResourceManager启动失败问题。此外,定期清理Hadoop的临时文件也是保持系统健康运行的一个好习惯。
good day!!!
开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!
更多推荐
所有评论(0)