CentOS环境下Hadoop常见问题解决方法
Hadoop的核心配置文件(core-site.xml、hdfs-site.xml、mapred-site.xml)参数设置不当是常见故障根源。需逐一核查:
core-site.xml中的fs.defaultFS(NameNode地址,如hdfs://namenode:9000)、hadoop.tmp.dir(临时目录路径);hdfs-site.xml中的dfs.replication(副本数,单机模式设为1,集群模式根据节点数调整)、dfs.namenode.name.dir(NameNode元数据目录)、dfs.datanode.data.dir(DataNode数据目录);/而非\),参数值无拼写错误。修改后执行source /etc/profile(或对应profile文件)使配置生效。Hadoop服务需对数据目录和安装目录有读写权限,否则会报“Permission denied”错误。解决步骤:
hadoopuser)并赋予权限:sudo useradd -m hadoopuser; sudo chown -R hadoopuser:hadoopuser /opt/hadoop-3.3.6(假设Hadoop安装在/opt);sudo chmod -R 755 /usr/local/hadoop/data/namenode; sudo chmod -R 755 /usr/local/hadoop/data/datanode;setenforce 0)或配置SELinux策略允许Hadoop访问。JAVA_HOME、HADOOP_HOME等环境变量未正确设置会导致Hadoop命令无法识别。解决步骤:
~/.bashrc(或/etc/profile),添加以下内容:export JAVA_HOME=/usr/lib/jvm/java-11-openjdk # 根据实际Java安装路径调整
export HADOOP_HOME=/opt/hadoop-3.3.6 # 根据实际Hadoop安装路径调整
export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
source ~/.bashrc使环境变量生效,验证:echo $JAVA_HOME、hadoop version(应输出Hadoop版本信息)。节点间通信依赖主机名解析,/etc/hosts文件未配置会导致“UnknownHostException”。解决步骤:
/etc/hosts,添加所有节点的IP与主机名映射(如192.168.1.100 namenode; 192.168.1.101 datanode1);ping namenode(应能正常ping通)。VERSION文件中clusterID不一致(NameNode与DataNode的VERSION文件位于current目录下)。解决步骤:
stop-dfs.sh;data目录(rm -rf /usr/local/hadoop/data/datanode/current);hdfs namenode -format;start-dfs.sh。dfs.namenode.name.dir)损坏或权限问题,需检查目录完整性并修复权限。Hadoop依赖多个端口(如NameNode的50070、DataNode的50010),端口冲突或防火墙拦截会导致服务无法访问。解决步骤:
netstat -tuln | grep <端口号>(如netstat -tuln | grep 50070),若端口被占用,修改对应配置文件中的端口号或停止占用进程;firewalld,允许Hadoop端口:sudo firewall-cmd --permanent --zone=public --add-port=50070/tcp # NameNode Web UI
sudo firewall-cmd --permanent --zone=public --add-port=50010/tcp # DataNode数据传输
sudo firewall-cmd --reload
sudo systemctl stop firewalld(生产环境不建议)。Hadoop 3.x要求Java 8或11版本,Java版本不兼容或JAVA_HOME未设置会导致启动失败。解决步骤:
java -version(应输出openjdk version "11.0.xx"或1.8.0_xxx);sudo yum install -y java-11-openjdk-devel;JAVA_HOME环境变量已正确配置(参考“环境变量配置错误”部分)。Hadoop组件启动时需通过SSH访问各节点,未配置免密登录会导致每次启动都需要输入密码。解决步骤:
ssh-keygen -t rsa(直接回车跳过密码);authorized_keys:cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys;chmod 600 ~/.ssh/authorized_keys;ssh localhost(应无需密码直接登录)。