Mac 安装 Hadoop 大数据框架完整教程
·
本教程将带你在 macOS 上从零开始搭建完整的大数据环境,包括 Hadoop、Spark 和 Flink。
环境准备
1. 安装 Homebrew
# 如果没有安装 Homebrew,先安装
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
2. 安装 Java (JDK 8 或 11)
# 安装 OpenJDK 11
brew install openjdk@11
# 配置环境变量
echo 'export PATH="/opt/homebrew/opt/openjdk@11/bin:$PATH"' >> ~/.zshrc
echo 'export JAVA_HOME="/opt/homebrew/opt/openjdk@11"' >> ~/.zshrc
# 如果使用 bash,修改 ~/.bash_profile
echo 'export PATH="/opt/homebrew/opt/openjdk@11/bin:$PATH"' >> ~/.bash_profile
echo 'export JAVA_HOME="/opt/homebrew/opt/openjdk@11"' >> ~/.bash_profile
# 重新加载配置
source ~/.zshrc # 或 source ~/.bash_profile
# 验证安装
java -version
3. 配置 SSH 免密登录(重要!)
# 1. 生成 SSH 密钥(如果没有)
ssh-keygen -t ed25519 -C "your_email@example.com"
# 一路回车,使用默认设置
# 2. 将公钥添加到 authorized_keys
cat ~/.ssh/id_ed25519.pub >> ~/.ssh/authorized_keys
# 3. 设置正确的权限
chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys
chmod 600 ~/.ssh/id_ed25519
# 4. 启动 SSH 服务
sudo systemsetup -setremotelogin on
# 5. 测试免密登录
ssh localhost
# 应该能直接登录,不需要密码
exit
安装 Hadoop
1. 下载 Hadoop
# 创建工作目录
mkdir ~/bigdata
cd ~/bigdata
# 下载 Hadoop 3.3.6(推荐稳定版本)
curl -O https://dlcdn.apache.org/hadoop/common/hadoop-3.3.6/hadoop-3.3.6.tar.gz
# 解压
tar -xzf hadoop-3.3.6.tar.gz
mv hadoop-3.3.6 hadoop
# 删除压缩包
rm hadoop-3.3.6.tar.gz
2. 配置环境变量
# 编辑 ~/.zshrc(或 ~/.bash_profile)
vim ~/.zshrc
添加以下内容:
# Hadoop 环境变量
export HADOOP_HOME=~/bigdata/hadoop
export HADOOP_CONF_DIR=$HADOOP_HOME/etc/hadoop
export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
# Hadoop 原生库(解决警告)
export HADOOP_OPTS="-Djava.library.path=$HADOOP_HOME/lib/native"
保存后重新加载:
source ~/.zshrc
3. 配置 Hadoop
3.1 修改 hadoop-env.sh
vim ~/bigdata/hadoop/etc/hadoop/hadoop-env.sh
添加或修改:
# Java 路径
export JAVA_HOME=/opt/homebrew/opt/openjdk@11
# Hadoop 用户
export HADOOP_OS_TYPE=${HADOOP_OS_TYPE:-$(uname -s)}
3.2 修改 core-site.xml
vim ~/bigdata/hadoop/etc/hadoop/core-site.xml
<configuration>
<property>
<name>fs.defaultFS</name>
<value>hdfs://localhost:9000</value>
</property>
<property>
<name>hadoop.tmp.dir</name>
<value>/Users/你的用户名/bigdata/hadoop/tmp</value>
</property>
</configuration>
注意: 将 你的用户名 替换为你的实际用户名。
3.3 修改 hdfs-site.xml
vim ~/bigdata/hadoop/etc/hadoop/hdfs-site.xml
<configuration>
<property>
<name>dfs.replication</name>
<value>1</value>
</property>
<property>
<name>dfs.namenode.name.dir</name>
<value>/Users/你的用户名/bigdata/hadoop/data/namenode</value>
</property>
<property>
<name>dfs.datanode.data.dir</name>
<value>/Users/你的用户名/bigdata/hadoop/data/datanode</value>
</property>
</configuration>
3.4 修改 mapred-site.xml
vim ~/bigdata/hadoop/etc/hadoop/mapred-site.xml
<configuration>
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
<property>
<name>mapreduce.application.classpath</name>
<value>$HADOOP_MAPRED_HOME/share/hadoop/mapreduce/*:$HADOOP_MAPRED_HOME/share/hadoop/mapreduce/lib/*</value>
</property>
</configuration>
3.5 修改 yarn-site.xml
vim ~/bigdata/hadoop/etc/hadoop/yarn-site.xml
<configuration>
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<property>
<name>yarn.nodemanager.env-whitelist</name>
<value>JAVA_HOME,HADOOP_COMMON_HOME,HADOOP_HDFS_HOME,HADOOP_CONF_DIR,CLASSPATH_PREPEND_DISTCACHE,HADOOP_YARN_HOME,HADOOP_MAPRED_HOME</value>
</property>
</configuration>
4. 创建必要的目录
mkdir -p ~/bigdata/hadoop/tmp
mkdir -p ~/bigdata/hadoop/data/namenode
mkdir -p ~/bigdata/hadoop/data/datanode
5. 格式化 HDFS
hdfs namenode -format
看到 "Storage directory ... has been successfully formatted" 表示成功。
6. 启动 Hadoop
# 启动 HDFS
start-dfs.sh
# 启动 YARN
start-yarn.sh
# 查看进程
jps
你应该看到以下进程:
- NameNode
- DataNode
- SecondaryNameNode
- ResourceManager
- NodeManager
7. 访问 Web UI
- HDFS: http://localhost:9870
- YARN: http://localhost:8088
安装 Spark
1. 下载 Spark
cd ~/bigdata
# 下载 Spark 3.5.0(预编译 Hadoop 3.3 版本)
curl -O https://dlcdn.apache.org/spark/spark-3.5.0/spark-3.5.0-bin-hadoop3.tgz
# 解压
tar -xzf spark-3.5.0-bin-hadoop3.tgz
mv spark-3.5.0-bin-hadoop3 spark
# 删除压缩包
rm spark-3.5.0-bin-hadoop3.tgz
2. 配置环境变量
编辑 ~/.zshrc:
# Spark 环境变量
export SPARK_HOME=~/bigdata/spark
export PATH=$PATH:$SPARK_HOME/bin:$SPARK_HOME/sbin
# Spark 配置
export PYSPARK_PYTHON=python3
重新加载:
source ~/.zshrc
3. 配置 Spark
cd $SPARK_HOME/conf
# 复制配置模板
cp spark-env.sh.template spark-env.sh
cp spark-defaults.conf.template spark-defaults.conf
编辑 spark-env.sh:
vim spark-env.sh
添加:
export JAVA_HOME=/opt/homebrew/opt/openjdk@11
export HADOOP_CONF_DIR=~/bigdata/hadoop/etc/hadoop
export SPARK_MASTER_HOST=localhost
export SPARK_MASTER_PORT=7077
编辑 spark-defaults.conf:
vim spark-defaults.conf
添加:
spark.master spark://localhost:7077
spark.eventLog.enabled true
spark.eventLog.dir hdfs://localhost:9000/spark-logs
spark.history.fs.logDirectory hdfs://localhost:9000/spark-logs
4. 创建 Spark 日志目录
# 在 HDFS 创建日志目录
hdfs dfs -mkdir -p /spark-logs
5. 启动 Spark
# 启动 Spark Master
start-master.sh
# 启动 Spark Worker
start-worker.sh spark://localhost:7077
# 启动 History Server(可选)
start-history-server.sh
6. 访问 Spark Web UI
- Spark Master: http://localhost:8080
- Spark History Server: http://localhost:18080
7. 测试 Spark
# 启动 Spark Shell
spark-shell
# 在 Scala Shell 中测试
val data = 1 to 1000
val distData = sc.parallelize(data)
distData.count()
// 输出: res0: Long = 1000
:quit // 退出
安装 Flink
1. 下载 Flink
cd ~/bigdata
# 下载 Flink 1.18.0
curl -O https://dlcdn.apache.org/flink/flink-1.18.0/flink-1.18.0-bin-scala_2.12.tgz
# 解压
tar -xzf flink-1.18.0-bin-scala_2.12.tgz
mv flink-1.18.0 flink
# 删除压缩包
rm flink-1.18.0-bin-scala_2.12.tgz
2. 配置环境变量
编辑 ~/.zshrc:
# Flink 环境变量
export FLINK_HOME=~/bigdata/flink
export PATH=$PATH:$FLINK_HOME/bin
重新加载:
source ~/.zshrc
3. 配置 Flink
cd $FLINK_HOME/conf
# 编辑 flink-conf.yaml
vim flink-conf.yaml
修改以下配置:
jobmanager.rpc.address: localhost
jobmanager.rpc.port: 6123
jobmanager.memory.process.size: 1600m
taskmanager.memory.process.size: 1728m
taskmanager.numberOfTaskSlots: 2
parallelism.default: 1
4. 启动 Flink
# 启动 Flink 集群
start-cluster.sh
# 查看进程
jps
# 应该看到 StandaloneSessionClusterEntrypoint 和 TaskManagerRunner
5. 访问 Flink Web UI
- Flink Dashboard: http://localhost:8081
6. 测试 Flink
# 运行示例程序
flink run $FLINK_HOME/examples/streaming/WordCount.jar
# 查看结果
cat $FLINK_HOME/log/flink-*-taskexecutor-*.out
验证测试
完整的环境测试
# 1. 查看所有 Java 进程
jps
# 应该看到:
# - NameNode
# - DataNode
# - SecondaryNameNode
# - ResourceManager
# - NodeManager
# - Master (Spark)
# - Worker (Spark)
# - StandaloneSessionClusterEntrypoint (Flink)
# - TaskManagerRunner (Flink)
# 2. 测试 HDFS
hdfs dfs -mkdir /test
hdfs dfs -ls /
echo "Hello Hadoop" > test.txt
hdfs dfs -put test.txt /test
hdfs dfs -cat /test/test.txt
rm test.txt
# 3. 测试 Spark
spark-submit --class org.apache.spark.examples.SparkPi \
--master spark://localhost:7077 \
$SPARK_HOME/examples/jars/spark-examples_*.jar 10
# 4. 测试 Flink
flink run $FLINK_HOME/examples/batch/WordCount.jar \
--input file://$FLINK_HOME/README.txt \
--output file:///tmp/flink-output
cat /tmp/flink-output
常见问题
1. SSH 连接失败
问题: ssh localhost 需要输入密码
解决方案:
ssh-keygen -t ed25519
cat ~/.ssh/id_ed25519.pub >> ~/.ssh/authorized_keys
chmod 600 ~/.ssh/authorized_keys
2. Hadoop 启动失败
问题: NameNode 启动失败
解决方案:
# 检查日志
cat $HADOOP_HOME/logs/hadoop-*-namenode-*.log
# 清理并重新格式化
stop-dfs.sh
rm -rf ~/bigdata/hadoop/tmp/*
rm -rf ~/bigdata/hadoop/data/*
hdfs namenode -format
start-dfs.sh
3. 端口冲突
问题: 端口被占用
解决方案:
# 查看端口占用
lsof -i :9000
lsof -i :8088
lsof -i :8080
# 杀掉占用端口的进程
kill -9 <PID>
4. Java 版本问题
问题: 不兼容的 Java 版本
解决方案:
# 安装 JDK 11(推荐)
brew install openjdk@11
# 或安装 JDK 8
brew install openjdk@8
# 验证
java -version
5. M1/M2 芯片兼容性
问题: Apple Silicon 架构警告
解决方案:
# 在 hadoop-env.sh 中添加
export HADOOP_OPTS="-Djava.library.path=$HADOOP_HOME/lib/native"
# 忽略原生库警告(不影响功能)
停止服务
# 停止 Hadoop
stop-yarn.sh
stop-dfs.sh
# 停止 Spark
stop-worker.sh
stop-master.sh
stop-history-server.sh
# 停止 Flink
stop-cluster.sh
启动脚本(可选)
创建一个便捷的启动脚本:
vim ~/bigdata/start-all.sh
内容:
#!/bin/bash
echo " 启动 Hadoop..."
start-dfs.sh
start-yarn.sh
echo " 启动 Spark..."
start-master.sh
start-worker.sh spark://localhost:7077
echo " 启动 Flink..."
start-cluster.sh
echo " 所有服务已启动!"
echo " Web UI:"
echo " - HDFS: http://localhost:9870"
echo " - YARN: http://localhost:8088"
echo " - Spark: http://localhost:8080"
echo " - Flink: http://localhost:8081"
jps
赋予执行权限:
chmod +x ~/bigdata/start-all.sh
停止脚本:
vim ~/bigdata/stop-all.sh
#!/bin/bash
echo " 停止 Flink..."
stop-cluster.sh
echo " 停止 Spark..."
stop-worker.sh
stop-master.sh
echo " 停止 Hadoop..."
stop-yarn.sh
stop-dfs.sh
echo " 所有服务已停止!"
chmod +x ~/bigdata/stop-all.sh
下一步
- 学习 HDFS 命令:
hdfs dfs -help - 运行 MapReduce 程序:参考 Hadoop 官方文档
- 学习 Spark 编程:Scala/Python/Java
- 学习 Flink 流处理:实时数据处理
- 安装 Hive:数据仓库工具
- 安装 HBase:NoSQL 数据库
参考资料
- Hadoop 官方文档: https://hadoop.apache.org/docs/stable/
- Spark 官方文档: https://spark.apache.org/docs/latest/
- Flink 官方文档: https://flink.apache.org/
更多推荐



所有评论(0)