本教程将带你在 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


安装 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

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

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

下一步

  1. 学习 HDFS 命令hdfs dfs -help
  2. 运行 MapReduce 程序:参考 Hadoop 官方文档
  3. 学习 Spark 编程:Scala/Python/Java
  4. 学习 Flink 流处理:实时数据处理
  5. 安装 Hive:数据仓库工具
  6. 安装 HBase:NoSQL 数据库

参考资料

Logo

码道开发者社区,聚焦华为云码道 CodeArts 代码智能体,沉淀 Agent、Skill、鸿蒙开发实战内容,供开发者查阅资料、交流技术、分享工程实践

更多推荐