当前位置: 首页 > 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.wxhsa.cn/company.asp?id=393

相关文章:

  • JBT 10389-2014
  • 生产搭建Rabbitmq
  • 【项目实战】基于i.MX8M Plus的人工智能小车(AGV导航、视觉避障、自动跟随、颜色识别、防跌落)有教程代码
  • unity TimeLine SignalTrack
  • macOS Tahoe 26 RC (25A353) Boot ISO 原版可引导镜像下载
  • 企业如何选型低代码平台?4款产品测评
  • 对于退款/拒付这类逆向订单操作需要创建新的单号么
  • torch版本应该跟cuda、cudacnn的版本一致
  • 小白如何零成本搭建一个属于自己的私人知识库
  • 安装mysql数据库,从下载到配置的详细教程
  • 根据端口找到进程id
  • 双因子验证网站(aspsms.com/en/registration/)无法注册——Capcha Error
  • MathType7下载安装2025最新下载+安装教程(附安装包)
  • mysql导入数据库,从基础命令到高效技巧
  • 基于“北斗+卫星互联网”的低空飞行服务保障基础设施
  • [BJOI2018] 染色 题解
  • 【完结10章】Java大模型工程能力必修课,LangChain4j 入门到实践
  • CVE-2025-30208 Vite开发服务器任意文件读取漏洞
  • Claude Code 从入门到精通:最全配置指南和工具推荐
  • 故障分析:11GR DATAGRUAD环境BROKER配置Fast-Start Failover
  • Cesium Shader内置变量 czm_*
  • IDA Pro 9.2 发布 - 强大的反汇编程序、反编译器和多功能调试器
  • 传统
  • Java 那些基础又关键的事儿
  • 2025-09-10
  • Codeforces Round 1047 (Div. 3)
  • sentinel-1.8.0 安装
  • 数据结构与算法-27.树-并查集
  • wpf XAML设计器在加载用户控件的时候,提示null引用等直接执行了用户控件里构造函数代码的问题
  • 设计模式-策略