环境变量未正确设置是Hadoop安装的常见基础问题,主要影响命令执行和进程启动。常见错误包括未配置JAVA_HOME、HADOOP_HOME,或配置后未执行source命令使变量生效。
/etc/profile或~/.bashrc文件,添加以下内容(根据实际安装路径调整):export JAVA_HOME=/usr/lib/jvm/java-11-openjdk # 或JDK安装路径
export HADOOP_HOME=/opt/hadoop-3.3.6 # Hadoop安装路径
export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
执行source /etc/profile或source ~/.bashrc使配置生效。Hadoop的核心配置文件(core-site.xml、hdfs-site.xml、yarn-site.xml、mapred-site.xml)参数设置不当会导致服务无法启动或功能异常。常见错误包括:
fs.defaultFS格式错误(如未使用hdfs://协议或IP/主机名错误);dfs.replication设置不合理(集群模式下建议设为3,单机模式设为1);dfs.namenode.name.dir/dfs.datanode.data.dir路径不存在或无权限。sudo mkdir -p /opt/hadoop/data/namenode,sudo chown -R hadoop:hadoop /opt/hadoop/data)。Hadoop依赖Java环境,常见错误包括未安装JDK、JAVA_HOME未设置、Java版本不兼容(Hadoop 3.x要求Java 8或11)。
java -version验证Java安装,若未安装则执行sudo yum install -y java-11-openjdk-devel(CentOS 7/8);设置JAVA_HOME环境变量(见上文)。节点间通信需要正确的主机名与IP映射,若/etc/hosts文件配置错误,会导致NameNode无法识别DataNode、ResourceManager无法调度NodeManager等问题。
/etc/hosts文件,添加节点IP与主机名的映射(如单机模式):127.0.0.1 localhost
192.168.1.100 hadoop-namenode
192.168.1.101 hadoop-datanode1
集群模式下需确保所有节点的/etc/hosts文件一致。CentOS默认开启防火墙(firewalld或iptables)和SELinux,会阻止Hadoop节点间的端口通信(如NameNode的50070端口、DataNode的50010端口),导致服务无法启动。
sudo systemctl stop firewalld
sudo systemctl disable firewalld
关闭SELinux(临时):sudo setenforce 0
或修改/etc/selinux/config文件,将SELINUX=enforcing改为SELINUX=disabled(永久)。Hadoop进程需要对其工作目录(如data、logs、conf)有读写权限,若权限不足会导致DataNode无法启动、NameNode格式化失败等问题。
chown命令将Hadoop目录所有权赋予hadoop用户(建议使用专用用户而非root):sudo chown -R hadoop:hadoop /opt/hadoop # Hadoop安装目录
sudo chown -R hadoop:hadoop /opt/hadoop/data # 数据目录
使用chmod命令设置目录权限(如755):sudo chmod -R 755 /opt/hadoop
```。
Hadoop不同版本对配置参数、依赖库(如native库)的要求不同,若版本不匹配会导致启动错误(如IncorrectVersionException)、功能异常(如YARN调度失败)。
libhadoop.so)的版本与Hadoop版本一致;避免混用不同版本的配置文件(如hdfs-site.xml的dfs.namenode.name.dir参数在不同版本中可能有差异)。Hadoop错误信息通常隐藏在日志文件中,若不会查看日志会导致问题排查效率低下。常见日志路径为$HADOOP_HOME/logs(如hadoop-namenode-hadoop-namenode.log)。
tail命令实时查看日志(如tail -f /opt/hadoop/logs/hadoop-namenode-hadoop-namenode.log);通过日志中的关键字(如ERROR、Exception)定位具体问题(如java.net.BindException表示端口冲突)。HDFS数据块损坏会导致数据读取失败(如FileNotFoundException),常见原因包括磁盘故障、突然断电、版本不一致(如DataNode与NameNode的VERSION文件clusterID不匹配)。
hdfs fsck命令检查数据块健康状态(如hdfs fsck / -delete删除损坏块);若VERSION文件clusterID不一致,修改DataNode的VERSION文件(路径为$HADOOP_HOME/data/datanode/current/VERSION),使其与NameNode的VERSION文件一致。DataNode、NodeManager等节点无法启动是常见问题,主要原因包括配置文件错误、权限不足、端口冲突、NameNode未启动(DataNode依赖NameNode)。
jps命令查看进程状态(如NameNode未启动则先启动NameNode);hdfs-site.xml的dfs.datanode.data.dir路径是否正确);hadoop-datanode-hadoop-datanode1.log)定位具体错误(如Permission denied则调整权限)。