ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

VMware虚拟机搭建Hadoop+Spark集群实战指南

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%时自动报警。
返回列表