在 Debian 上调试 Hadoop,一般可以从 运行日志、配置、环境、进程状态、系统资源 几个方面入手。下面给你一套比较完整的调试思路和常用命令,适合新手和有一定经验的用户。
先确认你是以哪种方式运行 Hadoop:
调试重点不同,伪分布式最常见。
默认路径一般在:
$HADOOP_HOME/logs/
或者:
/var/log/hadoop/
常见日志:
hadoop-*-namenode-*.loghadoop-*-datanode-*.loghadoop-*-resourcemanager-*.loghadoop-*-nodemanager-*.logtail -f $HADOOP_HOME/logs/hadoop-*-namenode-*.log
在日志中搜索:
grep -i error hadoop-*-namenode-*.log
grep -i exception hadoop-*-datanode-*.log
常见错误:
Connection refusedClassNotFoundExceptionPermission deniedDisk fullJAVA_HOME not setjava -version
Debian 下常见路径:
/usr/lib/jvm/java-11-openjdk-amd64
在 hadoop-env.sh 中配置:
export JAVA_HOME=/usr/lib/jvm/java-11-openjdk-amd64
并使生效:
source $HADOOP_HOME/etc/hadoop/hadoop-env.sh
<configuration>
<property>
<name>fs.defaultFS</name>
<value>hdfs://localhost:9000</value>
</property>
</configuration>
<configuration>
<property>
<name>dfs.replication</name>
<value>1</value>
</property>
</configuration>
hdfs getconf -confKey fs.defaultFS
jps
正常应看到:
如果缺失,说明组件没启动成功。
hadoop-daemon.sh start namenode
hadoop-daemon.sh start datanode
hdfs dfsadmin -report
hdfs dfs -ls /
hdfs dfsadmin -safemode get
hdfs dfsadmin -safemode leave
df -h
yarn node -list
yarn jar $HADOOP_HOME/share/hadoop/mapreduce/hadoop-mapreduce-examples-*.jar pi 2 5
如果失败,重点看:
sudo iptables -L
hostname
cat /etc/hosts
必须包含:
127.0.0.1 localhost
ssh localhost
不行就重新配置:
ssh-keygen -t rsa
cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
chmod 600 ~/.ssh/authorized_keys
在 hadoop-env.sh 中加入:
export HADOOP_OPTS="-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5005"
然后用 IntelliJ IDEA / Eclipse 远程调试。
jps 看进程$HADOOP_HOME/logsJAVA_HOME如果你愿意,可以告诉我:
我可以 直接帮你定位具体错误。