Linux下的Hadoop环境搭建
1 | flowchart TD |
🔧 第一阶段:环境准备
- 系统选择:推荐使用 CentOS 7/8 或 Ubuntu 20.04/22.04 LTS,这些版本社区支持完善。假设当前用户名为
hadoop。 - 安装 Java:Hadoop 3.x 需要 JDK 8 或 JDK 11。以安装 OpenJDK 11 为例:
1
2
3sudo apt update
sudo apt install openjdk-11-jdk
java -version # 验证安装 - 配置 SSH 免密登录(集群内通信必需):
1
2
3ssh-keygen -t rsa # 一直按回车
cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
ssh localhost # 测试能否免密登录本机 - 关闭防火墙(仅用于学习测试环境):
1
2
3
4sudo systemctl stop firewalld # CentOS
sudo systemctl disable firewalld
# 或对于 Ubuntu
sudo ufw disable
🗂️ 第二阶段:Hadoop 伪分布式部署
我们以 Hadoop 3.3.x 为例。
-
下载与解压
1
2
3
4wget https://archive.apache.org/dist/hadoop/common/hadoop-3.3.4/hadoop-3.3.4.tar.gz
sudo tar -xzf hadoop-3.3.4.tar.gz -C /usr/local/
sudo mv /usr/local/hadoop-3.3.4 /usr/local/hadoop
sudo chown -R hadoop:hadoop /usr/local/hadoop # 修改所属用户 -
配置环境变量
编辑~/.bashrc文件,在末尾添加:1
2
3export HADOOP_HOME=/usr/local/hadoop
export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
export JAVA_HOME=/usr/lib/jvm/java-11-openjdk-amd64 # 请根据实际路径修改执行
source ~/.bashrc使配置生效。 -
修改 Hadoop 核心配置文件
所有配置文件都在$HADOOP_HOME/etc/hadoop/目录下。hadoop-env.sh:确保JAVA_HOME已正确设置。core-site.xml:配置默认文件系统和临时目录。1
2
3
4
5
6
7
8
9
10<configuration>
<property>
<name>fs.defaultFS</name>
<value>hdfs://localhost:9000</value>
</property>
<property>
<name>hadoop.tmp.dir</name>
<value>/usr/local/hadoop/tmp</value>
</property>
</configuration>hdfs-site.xml:配置 HDFS,副本数设为1(单节点)。1
2
3
4
5
6
7
8
9
10
11
12
13
14<configuration>
<property>
<name>dfs.replication</name>
<value>1</value>
</property>
<property>
<name>dfs.namenode.name.dir</name>
<value>file://${hadoop.tmp.dir}/dfs/name</value>
</property>
<property>
<name>dfs.datanode.data.dir</name>
<value>file://${hadoop.tmp.dir}/dfs/data</value>
</property>
</configuration>mapred-site.xml:配置 MapReduce 使用 YARN。1
2
3
4
5
6<configuration>
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
</configuration>yarn-site.xml:配置 YARN。1
2
3
4
5
6
7
8
9
10<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,...</value>
</property>
</configuration>
-
格式化与启动
1
2
3hdfs namenode -format # 首次运行前必须格式化
start-dfs.sh # 启动 HDFS
start-yarn.sh # 启动 YARN使用
jps命令检查,应出现NameNode、DataNode、ResourceManager、NodeManager等进程。通过浏览器访问http://<服务器IP>:9870(HDFS) 和http://<服务器IP>:8088(YARN) 进行验证。
📊 第三阶段:安装 Hive(数据仓库工具)
Hive 让你能用 SQL 查询 Hadoop 数据。
- 下载安装(以 Hive 3.1.3 为例):
1
2
3wget https://downloads.apache.org/hive/hive-3.1.3/apache-hive-3.1.3-bin.tar.gz
tar -xzf apache-hive-3.1.3-bin.tar.gz -C /usr/local/
sudo mv /usr/local/apache-hive-3.1.3-bin /usr/local/hive - 配置环境变量:在
~/.bashrc中添加HIVE_HOME=/usr/local/hive并更新PATH。 - 配置 Metastore:Hive 的元数据默认存储在 Derby 数据库中(适合测试)。进入
$HIVE_HOME/conf,复制配置模板并初始化:1
2cp hive-default.xml.template hive-site.xml
schematool -initSchema -dbType derby - 启动 Hive:执行
hive命令即可进入交互式命令行。
⚡ 第四阶段:安装 Spark(内存计算引擎)
Spark 可以替代 MapReduce 进行更快的数据处理。
- 下载安装(以 Spark 3.3.2 为例,选择与 Hadoop 3.3+ 预编译的版本):
1
2
3wget https://archive.apache.org/dist/spark/spark-3.3.2/spark-3.3.2-bin-hadoop3.tgz
tar -xzf spark-3.3.2-bin-hadoop3.tgz -C /usr/local/
sudo mv /usr/local/spark-3.3.2-bin-hadoop3 /usr/local/spark - 配置环境变量:在
~/.bashrc中添加SPARK_HOME=/usr/local/spark并更新PATH。 - 配置:进入
$SPARK_HOME/conf,复制配置模板:编辑1
cp spark-env.sh.template spark-env.sh
spark-env.sh,添加export JAVA_HOME=/your/java/home。 - 验证:运行
spark-shell进入 Scala Shell,或运行pyspark进入 Python Shell。
🚨 核心难点与解决方案
在实际部署中,你可能会遇到以下挑战:
| 难点 | 可能原因 | 解决方案 |
|---|---|---|
| SSH 免密登录失败 | 权限过大、authorized_keys 格式问题 |
确保 ~/.ssh 目录权限为 700,文件为 600;使用 ssh -v localhost 查看详细连接日志。 |
| HDFS 启动后 DataNode 未启动 | 多次格式化导致 DataNode 与 NameNode 的 clusterID 不一致 |
清空 hdfs-site.xml 中配置的 dfs.namenode.name.dir 和 dfs.datanode.data.dir 目录,然后重新格式化。 |
| Hive 初始化或连接失败 | hive-site.xml 配置错误、Derby 数据库冲突 |
检查 hive-site.xml 中关键的 JDBC 连接、存储路径配置;确保没有多个 Hive 实例同时访问同一个 Derby 数据库。 |
| Spark 作业提交到 YARN 失败 | 内存配置冲突、依赖包缺失 | 在 spark-submit 中正确设置 --master yarn;根据 YARN 资源池大小,调整 Spark 的 spark.executor.memory 参数,避免请求资源超限。 |
| HDFS 小文件问题 | 大量小文件耗尽 NameNode 内存 | 从源头合并小文件;使用 Hadoop Archive (HAR) 将小文件打包;考虑使用支持小文件合并的引擎(如 Spark)进行预处理。 |
| 整体环境复杂 | Hadoop 生态组件多,集成配置繁琐 | 严格按照组件兼容版本搭配(如 Hadoop 3.3.x + Hive 3.1.x + Spark 3.3.x);可以使用 Docker 或 Ambari 等管理工具简化部署。 |
💡 环境验证与性能调优建议
- 基础验证:在 HDFS 上创建目录、上传文件,运行 Hadoop 自带的 WordCount 示例,用 Hive 创建表并查询。
- 初步调优:
- HDFS:根据数据大小和磁盘性能,调整
dfs.blocksize(如设为 256MB)。 - YARN:根据机器内存,调整
yarn.nodemanager.resource.memory-mb和yarn.scheduler.maximum-allocation-mb,避免内存超分。 - MapReduce/Spark:调整任务并行度(
mapreduce.job.maps/reduces或spark.sql.shuffle.partitions),合理设置 JVM 堆内存。
- HDFS:根据数据大小和磁盘性能,调整
这套环境为你提供了一个坚实的大数据学习与本地实验平台。如果你想针对某个组件(比如 Hive 的性能调优、Spark 与 YARN 的深度集成)进行更深入的探索,我可以为你提供更具体的信息。
