Mac安装Hadoop完整指南:从环境配置到避坑的详细步骤
1.1 准备环境:检查Java版本与SSH配置
打开终端输入java -version
时,看到输出显示Java 8或Java 11才算符合Hadoop的运行要求。如果系统提示未安装Java,可以通过官网下载AdoptOpenJDK,选择LTS版本进行安装。安装完成后记得重启终端让配置生效。
接着在终端输入ssh localhost
测试SSH连接,首次连接可能需要输入密码。要实现无密码登录,运行ssh-keygen -t rsa
生成密钥对,把公钥追加到授权文件:cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
。此时再执行ssh localhost
应该能直接建立连接,避免后续Hadoop启动时出现权限障碍。
1.2 下载并解压Hadoop安装包
访问Apache Hadoop官网找到稳定版二进制包(比如3.3.6版本),使用wget
命令直接下载到指定目录。解压时推荐用tar -xzvf hadoop-3.3.6.tar.gz
命令释放文件,将解压后的文件夹移动到/usr/local/hadoop路径。如果遇到权限拒绝,可尝试sudo chown -R $USER /usr/local/hadoop
修改目录归属,确保当前用户能自由操作文件。
1.3 配置环境变量(HADOOP_HOME与PATH)
在用户根目录的.bash_profile或.zshrc文件里添加两行关键配置:export HADOOP_HOME=/usr/local/hadoop
和export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
。使用zsh的用户要特别注意,Mac系统默认shell从Catalina版本开始切换为zsh,修改完成后必须执行source ~/.zshrc
激活配置,否则运行hadoop命令时会提示"command not found"。
1.4 验证安装:运行hadoop version命令
在终端直接输入hadoop version
,如果屏幕上显示类似"Hadoop 3.3.6"的版本信息,说明核心组件已正确安装。遇到报错可以检查HADOOP_HOME路径是否包含bin目录,或者用echo $PATH
查看环境变量是否包含Hadoop的执行路径。有时候需要完全关闭终端重新打开,让系统彻底刷新环境变量配置。
2.1 配置Hadoop单节点模式:编辑core-site.xml与hdfs-site.xml
进入$HADOOP_HOME/etc/hadoop
目录,用文本编辑器打开core-site.xml。在configuration标签内添加<property>
块,指定文件系统入口:<name>fs.defaultFS</name>
配合<value>hdfs://localhost:9000</value>
。这个配置决定了HDFS的访问地址,端口号9000是默认通信端口,如果被其他程序占用需要修改。
继续编辑hdfs-site.xml文件,设置HDFS存储路径和副本数。添加<property>
节点定义数据存储目录:<name>dfs.datanode.data.dir</name>
对应的<value>/usr/local/hadoop/hdfs/data</value>
,同时设置dfs.replication
为1(单节点模式)。记得提前创建对应目录并执行chmod 755
授权,否则启动时可能出现"Permission denied"错误。
2.2 首次启动Hadoop时的权限与端口冲突处理
执行start-dfs.sh
启动脚本时,如果遇到"Could not create directory"报错,大概率是存储目录权限不足。尝试用sudo chown -R $USER:$USER /usr/local/hadoop
递归修改目录所有权。当控制台提示端口已被占用(如8088或9000),运行lsof -i :9000
查找占用进程,关闭相关服务或修改Hadoop配置文件中对应的端口号。
部分用户在初始化namenode时会出现格式化失败,这时候需要先执行hdfs namenode -format
强制初始化。格式化成功后删除hdfs目录下的所有临时文件,重新启动集群。如果浏览器访问http://localhost:9870时页面无法加载,检查防火墙设置是否阻止了Hadoop服务的端口通信。
2.3 排查日志错误:NameNode未启动或DataNode连接失败
查看日志是最直接的排错方式,NameNode日志位于$HADOOP_HOME/logs/hadoop-*-namenode-*.log
。当发现"Address already in use"错误,可能是端口冲突或之前的Hadoop进程未完全退出。执行jps
命令查看Java进程,手动用kill -9
终止残留的NameNode或DataNode进程。
DataNode无法连接NameNode时,首先检查core-site.xml中配置的IP和端口是否一致。在DataNode的日志中看到"Connection refused"提示,尝试在NameNode节点执行netstat -an | grep 9000
确认端口监听状态。有时候需要重新格式化NameNode并清空所有DataNode的存储目录,保持集群元数据一致性。
2.4 环境变量失效的修复方法(zsh/bash配置冲突)
输入hadoop
命令突然失效,很可能是shell环境配置混乱。打开终端执行echo $SHELL
确认当前使用的shell类型。zsh用户需要检查~/.zshrc
文件末尾是否有source ~/.bash_profile
语句,或者在.zshrc中直接写入HADOOP_HOME和PATH的配置项。
当同时存在.bash_profile和.zshrc时,建议统一环境变量配置位置。执行nano ~/.zshrc
后添加export PATH="$HADOOP_HOME/bin:$PATH"
,保存后运行exec zsh
重新加载配置。如果PATH变量显示异常,可以用tr ':' '\n' <<< "$PATH"
命令逐行查看路径顺序,确保Hadoop的bin目录出现在系统默认路径之前。