调试Hadoop源代码

个人博客地址:调试Hadoop源代码 | 一张假钞的真实世界

Hadoop版本

Hadoop 2.7.3

调试模式下启动Hadoop NameNode

${HADOOP_HOME}/etc/hadoop/hadoop-env.sh中设置NameNode启动的JVM参数,如下:

复制代码
export HADOOP_NAMENODE_OPTS="-Xdebug -Xrunjdwp:transport=dt_socket,address=8788,server=y,suspend=y"
export HADOOP_NAMENODE_OPTS="-Dhadoop.security.logger=${HADOOP_SECURITY_LOGGER:-INFO,RFAS} -Dhdfs.audit.logger=${HDFS_AUDIT_LOGGER:-INFO,NullAppender} $HADOOP_NAMENODE_OPTS"

使用脚本${HADOOP_HOME}/sbin/start-dfs.sh启动HDFS,如果有以下提示信息则说明调试模式下启动NameNode成功:

复制代码
Listening for transport dt_socket at address: 8788

此时,如果执行jps查看java进程信息会有以下信息,是因为NameNode进程被挂起并处于监听状态,直到收到debug确认信息。

复制代码
$ jps
10638 Jps
10438 -- main class information unavailable
2171 
10508 DataNode

设置断点

找到hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/namenode/NameNode.java并在main函数中设置断点,如下图:

在Eclipse中调试

NameNode.java代码中点击右键,在弹出的菜单中选择Debug As -> Debug Configurations...,在弹出的对话框中双击Remote Java Application,配置内容如图:

配置完成后点击Debug按钮进入调试界面。

相关推荐
数智化管理手记33 分钟前
主数据重复、错漏频发?一站式主数据管理平台如何落地?
大数据·运维·数据库·人工智能·数据挖掘
RFID固定资产管理系统2 小时前
公司RFID管理系统揭秘
大数据·python
TDengine (老段)2 小时前
TDengine Go 与 Rust 连接器 — 高性能异步访问
大数据·数据库·物联网·golang·rust·时序数据库·tdengine
湘美书院--湘美谈教育2 小时前
湘美谈教育互联网逻辑:AI时代的社会学猜想
大数据·人工智能·深度学习·机器学习·生活
易观Analysys3 小时前
中国AI健康管理应用发展报告2026
大数据·人工智能
阿里技术3 小时前
面向复杂业务场景的智能分析 Skills 架构设计与演进实践
大数据
科技圈快迅4 小时前
在机场与高铁站:智能服务机器人正在深度对接业务系统,实现从信息孤岛到移动服务窗口的转变
大数据·人工智能·机器人
牛奶咖啡135 小时前
大数据Hadoop运维应用实践——HIVE与Hadoop实现整合_Hive的配置安装与使用
大数据·hive·hive的配置与安装·metastore服务的配置·hiveserver2服务配置·hive的常用sql操作·beeline的使用
huameinan狮子5 小时前
微服务化的基石——持续集成
大数据·ci/cd·微服务
LONGZETECH5 小时前
工业实训仿真设计实践:电机拆装软件的 DAG 流程建模、工具精度分级与数据体系搭建
大数据·算法·unity·架构·汽车