当前位置: 首页 > news >正文

生产搭建Hadoop

数据存储依赖:Hadoop 包含 HDFS(分布式文件系统)和 MapReduce(计算框架)等组件,而 Spark 本身主要是一个计算引擎,没有自带分布式文件系统。在很多场景下,Spark 会依赖 HDFS 来存储海量数据。

前提检查
确认 Spark 已正常运行(jps 能看到 Master 和 Worker 进程)
记录 Spark 占用的端口(默认:Master 7077/8080,Worker 8081)
确保服务器有足够内存(建议至少 8GB,避免两者内存竞争)

步骤 1:下载并安装 Hadoop

下载 Hadoop 3.3.6(稳定版本)

wget https://archive.apache.org/dist/hadoop/common/hadoop-3.3.6/hadoop-3.3.6.tar.gz

解压到 /opt 目录

sudo tar -zxvf hadoop-3.3.6.tar.gz -C /opt/
sudo mv /opt/hadoop-3.3.6 /opt/hadoop

设置权限(替换为你的用户名)

sudo chown -R root:root /opt/hadoop

步骤 2:配置 Hadoop 环境变量

编辑环境变量文件

vim ~/.bashrc

添加以下内容(与 Spark 环境变量区分开)

export HADOOP_HOME=/opt/hadoop
export HADOOP_CONF_DIR=$HADOOP_HOME/etc/hadoop
export PATH=$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$PATH

生效配置

source ~/.bashrc

验证安装(显示版本即正常)

hadoop version
export JAVA_HOME=/usr/lib/jvm/java-11-openjdk-arm64
export PATH=$JAVA_HOME/bin:$PATH
配置完Java后【~/.bashrc】,hadoop version才正常

步骤 3:修改 Hadoop 配置文件(核心:避免端口冲突)
需要修改 4 个关键配置文件,重点调整可能与 Spark 冲突的端口:

3.1 配置 core-site.xml

vim $HADOOP_HOME/etc/hadoop/core-site.xml 【添加内容(使用 9000 端口,与 Spark 不冲突):】



fs.defaultFS
hdfs://172.18.48.186:9000



hadoop.tmp.dir
/opt/hadoop/tmp

mkdir -p /opt/hadoop/tmp # 创建临时目录
chmod 755 /opt/hadoop/tmp # 赋予权限

3.2 配置 hdfs-site.xml

vim $HADOOP_HOME/etc/hadoop/hdfs-site.xml 【添加内容(单节点伪分布式配置):】

dfs.replication1dfs.namenode.http-address0.0.0.0:9870dfs.datanode.address0.0.0.0:9865

3.3 配置 mapred-site.xml

直接创建并编辑 mapred-site.xml

vim $HADOOP_HOME/etc/hadoop/mapred-site.xml 【添加内容(指定 MapReduce 运行在 YARN 上):】

mapreduce.framework.nameyarnmapreduce.jobhistory.webapp.address0.0.0.0:19888

3.4 配置 yarn-site.xml

vim $HADOOP_HOME/etc/hadoop/yarn-site.xml 【添加内容(关键:修改 YARN 端口避免与 Spark 冲突):】

yarn.nodemanager.aux-servicesmapreduce_shuffleyarn.resourcemanager.hostname0.0.0.0yarn.resourcemanager.webapp.address0.0.0.0:8088yarn.nodemanager.resource.memory-mb4096 yarn.scheduler.maximum-allocation-mb4096

步骤 4:配置 SSH 免密登录(Hadoop 启动需要)

生成 SSH 密钥(一路回车即可)

ssh-keygen -t rsa -P ""

将公钥添加到授权列表

cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
chmod 600 ~/.ssh/authorized_keys

测试免密登录本地(首次需输入 yes)

ssh localhost

步骤 5:初始化 HDFS 并启动 Hadoop

格式化 HDFS(仅首次执行)

hdfs namenode -format

启动 HDFS

start-dfs.sh

(可选)启动 YARN(若需使用 MapReduce 等依赖 YARN 的组件)

start-yarn.sh

步骤 6:验证 Hadoop 启动且与 Spark 无冲突

查看进程(应包含以下进程,且与 Spark 的 Master/Worker 共存)

jps

预期结果(包含但不限于):

NameNode、DataNode、ResourceManager、NodeManager、Master、Worker

访问网页控制台验证端口是否正常

HDFS 管理界面:http://localhost:9870

YARN 管理界面:http://localhost:8088

Spark Master 界面:http://localhost:8080(之前已存在)

关键冲突处理
如果出现端口冲突(启动失败或进程异常退出):
查看错误日志($HADOOP_HOME/logs/ 或 $SPARK_HOME/logs/)
找到冲突的端口,修改对应配置文件:
Spark 端口修改:$SPARK_HOME/conf/spark-env.sh 中设置 SPARK_MASTER_WEBUI_PORT 等
Hadoop 端口修改:在上述 4 个 XML 配置文件中调整对应端口参数
通过以上步骤,即可在同一台服务器上同时运行 Spark Standalone 和 Hadoop 伪分布式集群,且两者能协同工作(例如 Spark 可以读取 HDFS 上的数据)。

从日志来看,HDFS 格式化已经成功(关键日志:Storage directory /opt/hadoop/tmp/dfs/name has been successfully formatted),但启动 start-dfs.sh 时报错,原因是 Hadoop 不允许直接用 root 用户启动服务,且未配置对应的用户环境变量。
解决方法是在 Hadoop 的启动脚本配置中,添加 root 用户的环境变量声明,具体步骤如下

声明 HDFS 和 YARN 各组件的运行用户为 root

vim $HADOOP_HOME/etc/hadoop/hadoop-env.sh

配置 HDFS 组件运行用户(解决 namenode/datanode 启动报错)

export HDFS_NAMENODE_USER="root"
export HDFS_DATANODE_USER="root"
export HDFS_SECONDARYNAMENODE_USER="root"

配置 YARN 组件运行用户(后续启动 YARN 时会用到,提前配置避免后续报错)

export YARN_RESOURCEMANAGER_USER="root"
export YARN_NODEMANAGER_USER="root"

重新启动HDFS服务 start-dfs.sh

jps 只看到NameNode没看到DataNode

vim $HADOOP_HOME/etc/hadoop/hadoop-env.sh 【export JAVA_HOME=/usr/lib/jvm/java-11-openjdk-arm64】

查看 DataNode 启动日志,定位失败原因
tail -n 100 /opt/hadoop/logs/hadoop-root-datanode-iZwz92800vffoao9eb64l1Z.log

常见原因:
端口被占用(如 9864 端口被其他进程占用)
之前格式化 HDFS 后,/opt/hadoop/tmp 目录残留旧数据导致冲突

stop-dfs.sh
rm -rf /opt/hadoop/tmp
hdfs namenode -format
start-dfs.sh

9864端口换成9865

启动历史服务器

mapred --daemon start historyserver

1. 开放 9870 端口(TCP 协议,HDFS Web 服务用 TCP)

ufw allow 9870/tcp
ufw allow 8088/tcp

2. 重启防火墙使配置生效

ufw reload

3. 验证端口是否已开放(输出 "9870/tcp ALLOW Anywhere" 即成功)

ufw status

HDFS 管理界面:http://localhost:9870

YARN 管理界面:http://localhost:8088

Spark Master 界面:http://localhost:8080(之前已存在)

http://www.rkmt.cn/news/1801.html

相关文章:

  • 生产搭建Rabbitmq
  • macOS Tahoe 26 RC (25A353) Boot ISO 原版可引导镜像下载
  • 企业如何选型低代码平台?4款产品测评
  • torch版本应该跟cuda、cudacnn的版本一致
  • 安装mysql数据库,从下载到配置的详细教程
  • [BJOI2018] 染色 题解
  • 金蝶云星空学习记录1
  • (简记)虚树
  • AI测试平台自动遍历:低代码也能玩转全链路测试
  • Cesium Shader内置变量 czm_*
  • IDA Pro 9.2 发布 - 强大的反汇编程序、反编译器和多功能调试器
  • Java 那些基础又关键的事儿
  • Codeforces Round 1047 (Div. 3)
  • 设计模式-策略
  • 数据库基本查询语句
  • 《Python数据结构与算法分析》代码
  • jmeter测试mysql
  • Docker容器
  • models中integer、char、Boolean、text、datetime字段类型的常用参数设置
  • PVE跨集群迁移虚机
  • 告别资料混乱!PJMan 让项目文件管理,简单到不用找
  • CRMEB标准版PHP订单列表功能解析与实战应用
  • vue3不允许缓存组件keep-alive直接包裹router-view
  • Python中的枚举类
  • Hall 定理相关
  • docker save load 案例
  • 数据结构与算法-25.红黑树
  • Python 虚拟环境使用和打包成exe程序
  • linux调优工具的简单介绍
  • 多线程同步问题-从语法到硬件