两个log4j导致的错误现象

本文介绍了在使用Log4j时遇到的一个常见错误——不同版本的Log4j配置冲突问题,并详细解释了错误原因及如何通过调整Maven依赖排除来解决此问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1. 出错提示

 

log4j:ERROR A "org.apache.log4j.ConsoleAppender" object is not assignable to a "org.apache.log4j.Appender" variable.
log4j:ERROR The class "org.apache.log4j.Appender" was loaded by
log4j:ERROR [org.apache.catalina.loader.StandardClassLoader@15a3d6b] whereas object of type
log4j:ERROR "org.apache.log4j.ConsoleAppender" was loaded by [WebappClassLoader
  delegate: false
  repositories:
    /WEB-INF/classes/
----------> Parent Classloader:
org.apache.catalina.loader.StandardClassLoader@f9c40
].
log4j:ERROR Could not instantiate appender named "S".
Loading jar:file:/scionDevTool/tomcat/mes-portal-server-0.3.4/liferay-portal-5.2.3/tomcat-5.5.27/webapps/ROOT/WEB-INF/lib/portal-impl.jar!/system.properties

 

2.原因是 liferay/common/lib/log4j-1.2.9.jar

另外在应用程序有(pom.xml)

 

      <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-log4j12</artifactId>
            <version>1.4.2</version>
        </dependency>

 

依赖log4j

 

3.解决方法

 

 

<dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-log4j12</artifactId>
            <version>1.4.2</version>
    
            <exclusions>
                <exclusion>
                    <artifactId>log4j</artifactId>
                    <groupId>log4j</groupId>
                </exclusion>
            </exclusions>

  
        </dependency>

 

 

<think>嗯,用户之前已经遇到了在Hadoop环境中使用jps命令只显示ResourceManager和JPS的问题,并且已经按照建议检查了防火墙,但问题依旧存在。现在用户反馈说防火墙已经关闭,但问题仍然存在,仍然只有两个进程。我需要深入思考可能的原因,并给出进一步的排查步骤。 首先,用户已经排除了防火墙的问题,所以需要排除其他可能性。之前的建议包括了服务未完全启动、配置错误、端口冲突和权限问题。现在需要在这些基础上进一步分析,或者考虑其他可能被忽视的因素。 可能的原因有哪些呢? 1. **Hadoop服务启动顺序或脚本问题**:用户可能没有正确启动所有服务,或者启动脚本存在问题。例如,是否同时启动了HDFS和YARN?或者是否在正确的节点上启动服务? 2. **配置文件错误**:特别是与DataNode、NodeManager相关的配置是否正确。例如,workers文件是否配置了正确的主机名,导致DataNode无法启动? 3. **日志文件中的错误信息**:用户可能没有仔细检查日志,或者日志中存在未被注意到的错误,比如无法绑定端口、权限拒绝、配置参数错误等。 4. **Java环境问题**:Hadoop依赖Java环境,如果Java版本不兼容或者环境变量配置错误,可能导致某些进程无法启动。 5. **资源限制**:例如,内存不足导致进程被杀死,或者系统限制了最大用户进程数,导致无法启动更多进程。 6. **主机名解析问题**:Hadoop节点之间需要通过主机名进行通信,如果/etc/hosts文件配置不正确,或者DNS解析有问题,可能导致DataNode或NodeManager无法连接到NameNode或ResourceManager。 7. **SSH无密码登录配置**:Hadoop的启动脚本可能依赖SSH无密码登录到各个节点,如果配置不正确,可能导致无法启动远程节点的进程。 接下来需要针对这些可能性逐一分析,并提供具体的检查步骤和解决方案。 首先,检查Hadoop的启动日志是关键,特别是NameNode和DataNode的日志,以及ResourceManager和NodeManager的日志。用户需要查看这些日志中的错误信息,以确定具体的失败原因。 另外,检查workers文件的内容是否正确,确保所有DataNode的主机名都被正确列出,并且能够通过SSH无密码登录到这些节点。 此外,确认Java版本是否符合Hadoop的要求,环境变量如JAVA_HOME是否正确设置,以及Hadoop的配置文件是否在所有节点上同步更新,避免配置不一致的问题。 可能还需要检查系统的资源使用情况,如内存和磁盘空间,确保没有资源不足的情况导致进程无法启动。 最后,验证Hadoop的格式化步骤是否正确执行,如果NameNode未被正确格式化,DataNode可能无法正常启动。</think>--- ### 当防火墙已关闭但 `jps` 仍只显示 `ResourceManager` 和 `JPS` 时,需进一步排查以下方向: --- ### 一、核心排查流程 #### 1. 验证服务启动范围 - **现象**:`ResourceManager` 属于 YARN 服务,但 `NameNode` 和 `DataNode` 未出现,说明 HDFS 未启动。 - **操作**: ```bash # 强制启动 HDFS 服务(在部署 NameNode 的主机上执行) start-dfs.sh # 查看 HDFS 进程是否启动 jps | grep -E 'NameNode|DataNode|SecondaryNameNode' ``` - 若仍无输出,检查日志(见下文)。 --- #### 2. 分析关键日志 - **NameNode 日志**: ```bash tail -n 100 $HADOOP_HOME/logs/hadoop-*-namenode-*.log ``` - **关注**:端口绑定失败、权限拒绝、格式化错误(如重复格式化)。 - **DataNode 日志**: ```bash tail -n 100 $HADOOP_HOME/logs/hadoop-*-datanode-*.log ``` - **典型错误**: ```log ERROR org.apache.hadoop.hdfs.server.datanode.DataNode: Invalid directory in dfs.datanode.data.dir: /path/to/data ``` 表示数据目录权限或路径配置错误。 --- #### 3. 检查节点通信 - **验证主机名解析**: ```bash # 在所有节点执行,确保主机名与IP映射正确 cat /etc/hosts ping <NameNode主机名> # 在 NameNode 上测试与 DataNode 的通信 ssh <DataNode主机名> jps # 确保能返回 DataNode 进程 ``` - **修复 SSH 无密码登录**: ```bash # 在 NameNode 上生成密钥并分发 ssh-keygen -t rsa ssh-copy-id -i ~/.ssh/id_rsa.pub hadoop@<DataNode主机名> ``` --- ### 二、高频问题解决方案 #### 场景1:DataNode 未启动 - **可能原因**: - `workers` 文件未配置 DataNode 主机名。 - 数据目录 `dfs.datanode.data.dir` 权限不足。 - **修复**: ```bash # 检查 workers 文件内容 cat $HADOOP_HOME/etc/hadoop/workers # 修正数据目录权限(假设数据目录为 /data/hadoop) chown -R hadoop:hadoop /data/hadoop chmod 755 /data/hadoop ``` --- #### 场景2:NameNode 未启动 - **可能原因**: - NameNode 未格式化或重复格式化。 - `fs.defaultFS`(`core-site.xml`)配置错误。 - **修复**: ```bash # 停止所有服务后重新格式化(谨慎操作!) hdfs namenode -format # 检查 core-site.xml 配置 <property> <name>fs.defaultFS</name> <value>hdfs://<NameNode主机名>:9000</value> # 确保主机名可解析 </property> ``` --- #### 场景3:NodeManager 未启动 - **可能原因**: - `yarn.resourcemanager.hostname`(`yarn-site.xml`)指向错误主机。 - 资源限制(内存不足)。 - **修复**: ```bash # 检查 yarn-site.xml 配置 <property> <name>yarn.resourcemanager.hostname</name> <value><ResourceManager主机名></value> </property> # 检查 YARN 内存配置(yarn-site.xml) <property> <name>yarn.nodemanager.resource.memory-mb</name> <value>8192</value> # 根据物理内存调整 </property> ``` --- ### 三、终极验证步骤 1. **全集群重启**: ```bash stop-all.sh start-all.sh ``` 2. **进程验证**: ```bash # 在 NameNode 主机验证 jps | grep NameNode # 在 DataNode 主机验证 jps | grep DataNode # 在 ResourceManager 主机验证 jps | grep NodeManager ``` 3. **Web UI 验证**: - HDFS 状态:`http://<NameNode主机名>:9870` - YARN 状态:`http://<ResourceManager主机名>:8088` --- ### 四、排查流程图 ```mermaid graph TD A[防火墙已关闭] --> B{检查HDFS服务状态} B -->|NameNode/DataNode未启动| C[查看HDFS日志] C --> D{发现权限错误?} D -->|是| E[修复目录权限] D -->|否| F{发现端口冲突?} F -->|是| G[修改端口配置] F -->|否| H{主机名解析错误?} H -->|是| I[修正/etc/hosts] H -->|否| J[检查SSH无密码登录] J --> K[验证密钥分发] ```
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值