尧图网络 高端网站定制 · 原创设计
免费咨询热线
400-888-6620
免费获取方案
VMware虚拟机搭建Hadoop+Spark集群实战指南
1. 为什么选择VMware虚拟机搭建HadoopSpark集群在开始之前我们需要明确一个基本问题为什么要用虚拟机搭建大数据集群我在2018年第一次接触Hadoop时曾经尝试直接在物理机上部署结果因为网络配置错误导致整个实验室的网络瘫痪。这次教训让我深刻认识到虚拟机环境的价值——它提供了完美的沙箱实验环境。VMware Workstation Pro目前最新版为17作为业界领先的虚拟化平台具有几个不可替代的优势完整的快照功能你可以在每个关键步骤后创建系统快照出错时一键回滚网络隔离NAT和仅主机模式能避免对外部网络造成影响资源可控可以精确分配CPU核心和内存模拟真实集群环境硬件兼容避免了真实服务器可能遇到的驱动问题重要提示虽然VMware提供免费试用版但长期使用建议购买正版许可证。网上流传的密钥往往会导致不可预知的问题我在2023年就遇到过因为使用非正版密钥导致虚拟机突然崩溃的情况。2. 环境准备与基础配置2.1 硬件需求建议根据我多年搭建集群的经验推荐以下硬件配置宿主机至少16GB内存32GB更佳因为每个虚拟机节点建议分配4-8GBCPU支持VT-x/AMD-V虚拟化的四核以上处理器存储SSD硬盘至少100GB可用空间Hadoop很吃I/O性能我的当前测试环境配置供参考ThinkPad P15vi7-11800H (8核16线程)64GB DDR4内存1TB NVMe SSDVMware Workstation 17 Pro2.2 软件版本选择版本兼容性是大数据平台永远的痛。经过多次踩坑我总结出以下稳定组合组件推荐版本备注VMware17.0.2最新稳定版操作系统CentOS 7.92026年仍维护的最终7.x版本JavaJDK 8u381Hadoop官方推荐版本Hadoop3.3.62026年LTS版本Spark3.5.1兼容Hadoop 3.3.x的最新稳定版注意CentOS 8已停止维护而CentOS Stream的滚动更新特性不适合生产环境。如果必须用新系统Rocky Linux 9.x是更好的选择。2.3 虚拟机创建规范创建虚拟机时有几个关键设置经常被忽略虚拟磁盘类型选择SCSI非IDE性能更好网络适配器选择NAT模式初期或自定义VMnet开启CPU虚拟化引擎的虚拟化Intel VT-x/EPT选项内存设置中锁定全部内存避免交换我建议的集群规划3个节点1个NameNode 2个DataNode每个节点配置4GB内存2个CPU核心50GB磁盘动态分配桥接网络后期改为专用网络3. 系统级准备工作3.1 CentOS基础配置安装完CentOS后这些操作必不可少# 关闭SELinux避免权限问题 sed -i s/SELINUXenforcing/SELINUXdisabled/g /etc/selinux/config # 关闭防火墙实验环境 systemctl stop firewalld systemctl disable firewalld # 安装必备工具 yum install -y vim net-tools wget curl telnet lrzsz # 设置主机名分别在三个节点执行 hostnamectl set-hostname nn01 # NameNode hostnamectl set-hostname dn01 # DataNode1 hostnamectl set-hostname dn02 # DataNode2 # 配置hosts文件所有节点相同 cat /etc/hosts EOF 192.168.100.101 nn01 192.168.100.102 dn01 192.168.100.103 dn02 EOF3.2 SSH免密登录配置Hadoop集群管理依赖SSH配置步骤所有节点生成密钥ssh-keygen -t rsa将NameNode的公钥分发到所有节点ssh-copy-id nn01 ssh-copy-id dn01 ssh-copy-id dn02测试是否成功ssh dn01 date应该不需要密码常见问题如果遇到Permission denied错误检查以下文件权限~/.ssh 目录权限应为700~/.ssh/authorized_keys 权限应为6003.3 Java环境安装Hadoop对Java版本非常敏感建议这样安装# 下载JDK官网获取最新链接 wget https://download.oracle.com/java/18/latest/jdk-18_linux-x64_bin.rpm # 安装并配置环境变量 rpm -ivh jdk-18_linux-x64_bin.rpm cat /etc/profile EOF export JAVA_HOME/usr/java/default export PATH\$PATH:\$JAVA_HOME/bin EOF source /etc/profile验证安装java -version应该显示正确的版本信息4. Hadoop集群部署实战4.1 Hadoop安装与配置下载和解压Hadoopwget https://archive.apache.org/dist/hadoop/common/hadoop-3.3.6/hadoop-3.3.6.tar.gz tar -zxvf hadoop-3.3.6.tar.gz -C /opt/ mv /opt/hadoop-3.3.6 /opt/hadoop关键配置文件修改所有节点相同hadoop-env.shexport JAVA_HOME/usr/java/default export HADOOP_HOME/opt/hadoop export HADOOP_LOG_DIR/var/log/hadoopcore-site.xmlconfiguration property namefs.defaultFS/name valuehdfs://nn01:9000/value /property property namehadoop.tmp.dir/name value/data/hadoop/tmp/value /property /configurationhdfs-site.xmlconfiguration property namedfs.replication/name value2/value /property property namedfs.namenode.name.dir/name value/data/hadoop/namenode/value /property property namedfs.datanode.data.dir/name value/data/hadoop/datanode/value /property /configurationworkers文件旧版是slavesdn01 dn024.2 集群初始化与启动仅在NameNode执行# 创建数据目录 mkdir -p /data/hadoop/{namenode,datanode,tmp} # 格式化HDFS hdfs namenode -format # 启动集群 start-dfs.sh验证集群状态hdfs dfsadmin -report应该能看到2个活动的DataNode4.3 YARN资源管理配置如果需要运行MapReduce作业还需要配置YARNmapred-site.xmlconfiguration property namemapreduce.framework.name/name valueyarn/value /property /configurationyarn-site.xmlconfiguration property nameyarn.nodemanager.aux-services/name valuemapreduce_shuffle/value /property property nameyarn.resourcemanager.hostname/name valuenn01/value /property /configuration启动YARNstart-yarn.sh5. Spark集群部署与集成5.1 Spark安装配置下载和解压Sparkwget https://archive.apache.org/dist/spark/spark-3.5.1/spark-3.5.1-bin-hadoop3.tgz tar -zxvf spark-3.5.1-bin-hadoop3.tgz -C /opt/ mv /opt/spark-3.5.1-bin-hadoop3 /opt/spark环境变量配置cat /etc/profile EOF export SPARK_HOME/opt/spark export PATH\$PATH:\$SPARK_HOME/bin EOF source /etc/profile关键配置修改spark-env.shexport JAVA_HOME/usr/java/default export HADOOP_CONF_DIR/opt/hadoop/etc/hadoop export SPARK_MASTER_HOSTnn01 export SPARK_WORKER_MEMORY2gworkers文件dn01 dn025.2 启动Spark集群在NameNode执行/opt/spark/sbin/start-all.sh验证集群状态/opt/spark/sbin/spark-shell --master spark://nn01:70775.3 集成测试运行一个简单的WordCount示例val textFile sc.textFile(hdfs://nn01:9000/input/sample.txt) val counts textFile.flatMap(line line.split( )) .map(word (word, 1)) .reduceByKey(_ _) counts.saveAsTextFile(hdfs://nn01:9000/output/wordcount)6. 集群运维与问题排查6.1 常见错误解决方案DataNode无法启动检查日志/var/log/hadoop/hadoop--datanode-.log常见原因clusterID不匹配需要同步NameNode的VERSION文件Spark作业卡住检查资源分配YARN的资源配置是否足够查看Spark UIhttp://nn01:4040磁盘空间不足定期清理HDFS垃圾箱hdfs dfs -expunge6.2 性能优化建议HDFS调优参数!-- hdfs-site.xml -- property namedfs.datanode.max.transfer.threads/name value4096/value /propertySpark内存配置# spark-env.sh export SPARK_EXECUTOR_MEMORY4g export SPARK_DRIVER_MEMORY2gLinux系统调优# 增大文件描述符限制 ulimit -n 655356.3 监控方案基础监控配置Hadoop自带监控http://nn01:9870Spark监控http://nn01:8080简易监控脚本watch -n 5 hdfs dfsadmin -report; yarn node -list我在实际运维中发现当DataNode磁盘使用超过90%时经常会出现各种奇怪的问题。建议设置定期检查脚本当磁盘使用超过85%时自动报警。
RELATED

相关推荐

如何快速解决iPhone USB网络共享驱动问题:Windows用户终极指南 [特殊字符]

如何快速解决iPhone USB网络共享驱动问题:Windows用户终极指南 [特殊字符]

如何快速解决iPhone USB网络共享驱动问题:Windows用户终极指南 🚀 【免费下载链接】Apple-Mobile-Drivers-Installer Powershell script to easily install Apple USB and Mobile Device Ethernet (USB Tethering) drivers on Windows! 项目地址: http…

📅 2026/8/10 19:31:17
MATLAB无头绘图:隐藏窗口批量保存图像的技术详解

MATLAB无头绘图:隐藏窗口批量保存图像的技术详解

1. 项目概述:当绘图窗口“隐身”时,我们如何优雅地保存图像? 在MATLAB的日常使用中,尤其是进行批量数据处理、自动化脚本运行或者在无图形界面的服务器/远程环境中工作时,我们经常会遇到一个看似矛盾的需求&#xff1a…

📅 2026/8/10 7:41:44
Umi-OCR完整指南:三步掌握免费离线文字识别新技能

Umi-OCR完整指南:三步掌握免费离线文字识别新技能

Umi-OCR完整指南:三步掌握免费离线文字识别新技能 【免费下载链接】Umi-OCR OCR software, free and offline. 开源、免费的离线OCR软件。支持截屏/批量导入图片,PDF文档识别,排除水印/页眉页脚,扫描/生成二维码。内置多国语言库。…

📅 2026/8/10 13:44:50
MORE NEWS

更多资讯

📰

Hindsight:轻量级LLM调用可观测性工具

1. 项目概述:Hindsight 不是“事后诸葛亮”,而是一套可落地的 LLM 应用观测与调试基础设施你有没有遇到过这样的场景:一个调用 OpenAI API 的 Python 脚本,在本地跑得好好的,一上 Docker 就报401 Unauthorized: incorr…

📰

AI课堂“最后一公里”怎么破?全链路落地服务解析

我做了十几年教育信息化项目,最怕听到一句话:“我们学校那套AI课堂系统,一年到头就用了两回。”这句话意味着什么?意味着采购清单上躺着一笔不算小的预算,教室角落立着崭新设备,培训照片挂在宣传栏里&#…

📰

Http请求模拟与报文返回全攻略:联调、异常复现与延迟注入实战

简介:资源为Http请求模拟报文返回工具,面向需要接口调试、前端联调与自动化测试的开发者和测试人员,可在无真实后端时模拟自定义HTTP响应。工具基于HTTP协议捕获客户端请求,按URL、方法类型、请求头等条件匹配规则,返回…

📰

央企知识库落地全链路:从RAG到安全合规的真实经验

项目启动会上,我作为技术顾问刚坐下,业务负责人就开门见山:“能不能直接做个问答入口,把我们全公司的制度文件都喂进去,以后大家不用再翻OA了?”旁边的信息化同事紧跟着补了一句:“但数据绝对不…

📰

让Coding Agent自己拿主意:Jev如何为Claude Code和Codex提供决策规划层

这几天我一直在折腾 Claude Code 和 Codex 这两个 Coding Agent,工具倒是装了一大堆,实际用下来却发现一个尴尬的问题:Agent 看起来很聪明,但真到了要下决定的时刻,它反而开始“反复横跳”——改一行代码都要停下来问你…

📰

AI日报制作全攻略:从信息筛选到结构化写作的工程实践

1. 一份 AI 日报的定位与内容框架设计1.1 为什么选择“日报”这种形态做 AI 日报这件事,我前后坚持了两年多,中间断更过三次,也重构过四版模板。最开始我以为日报就是“把今天看到的大新闻列出来”,结果做到第三周就发现&#xff…

TODAY

今日更新

THIS WEEK

本周精选

THIS MONTH

本月热门

读完文章,想聊聊您的网站?

告诉我们您的行业与需求,资深顾问一对一梳理方案与报价,全程免费。

📞 💬