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

JDK 17 + Hadoop 3.3.5 + Spark 3.3.2 集群搭建避坑全记录:从虚拟机互信到圆周率测试

JDK 17 + Hadoop 3.3.5 + Spark 3.3.2 集群搭建避坑全记录:从虚拟机互信到圆周率测试

搭建大数据集群环境是每个数据工程师的必修课,但过程中总会遇到各种"坑"。本文将详细记录基于JDK 17、Hadoop 3.3.5和Spark 3.3.2的集群搭建全过程,重点分享那些容易踩坑的环节和解决方案。不同于普通的安装教程,这里会还原真实操作中遇到的报错场景,提供经过验证的解决方法。

1. 环境准备与基础配置

1.1 虚拟机环境搭建

选择CentOS 8.5作为基础系统,建议分配至少4GB内存和20GB存储空间。以下是关键配置步骤:

  • 网络配置:确保所有虚拟机使用桥接模式,获取同一网段的IP地址
  • 软件源设置:使用阿里云镜像加速软件安装
    sed -i 's|mirrorlist=|#mirrorlist=|g' /etc/yum.repos.d/CentOS-* sed -i 's|#baseurl=http://mirror.centos.org|baseurl=http://mirrors.aliyun.com|g' /etc/yum.repos.d/CentOS-*

1.2 JDK 17安装与配置

Hadoop 3.3.x开始支持JDK 17,但需要注意以下要点:

  1. 下载JDK 17 RPM包并安装:

    rpm -ivh jdk-17_linux-x64_bin.rpm
  2. 环境变量配置(/etc/profile)需特别添加JVM参数:

    export JAVA_HOME=/usr/lib/jvm/jdk-17 export PATH=$PATH:$JAVA_HOME/bin export HADOOP_OPTS="--add-opens java.base/java.lang=ALL-UNNAMED"

注意:如果不添加--add-opens参数,后续Hadoop启动时会报java.lang.reflect.InaccessibleObjectException错误

2. 集群SSH互信配置

2.1 主机克隆与基础设置

采用"一主三从"架构,先配置好master节点后克隆出vice1-3节点。克隆后需要:

  1. 修改每台主机的hostname:

    hostnamectl set-hostname master # 分别修改为vice1-3
  2. 更新/etc/hosts文件,确保包含所有节点IP映射:

    192.168.1.101 master 192.168.1.102 vice1 192.168.1.103 vice2 192.168.1.104 vice3

2.2 SSH免密登录配置

执行以下步骤建立互信关系:

  1. 各节点生成密钥对:

    ssh-keygen -t rsa -P '' -f ~/.ssh/id_rsa
  2. 合并所有公钥到authorized_keys:

    cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys # 将其他节点的公钥内容追加到该文件
  3. 设置权限(关键步骤,权限不对会导致免密失败):

    chmod 700 ~/.ssh chmod 600 ~/.ssh/authorized_keys

常见问题排查:

  • 如果仍需输入密码,检查/var/log/secure日志
  • 确保SELinux已禁用:setenforce 0

3. Hadoop集群部署

3.1 关键配置文件调整

Hadoop 3.3.5的配置与之前版本有显著差异,以下是核心配置项:

core-site.xml

<property> <name>fs.defaultFS</name> <value>hdfs://master:9000</value> </property> <property> <name>hadoop.http.staticuser.user</name> <value>root</value> </property>

hdfs-site.xml

<property> <name>dfs.namenode.http-address</name> <value>master:9870</value> <!-- 注意端口变化 --> </property> <property> <name>dfs.replication</name> <value>3</value> </property>

yarn-site.xml

<property> <name>yarn.nodemanager.aux-services</name> <value>mapreduce_shuffle</value> </property> <property> <name>yarn.resourcemanager.hostname</name> <value>master</value> </property>

3.2 启动问题排查

首次启动Hadoop时常见错误及解决方案:

  1. NameNode未格式化

    hdfs namenode -format
  2. 权限问题导致进程启动失败: 在/etc/profile中添加:

    export HDFS_NAMENODE_USER=root export HDFS_DATANODE_USER=root export YARN_RESOURCEMANAGER_USER=root export YARN_NODEMANAGER_USER=root
  3. Web UI无法访问

    • 检查防火墙状态:systemctl stop firewalld
    • 确认端口是否正确(Hadoop 3.x使用9870替代了50070)

4. Spark on YARN集成

4.1 Spark配置要点

使用Spark 3.3.2的without-hadoop版本,需特别注意:

  1. spark-defaults.conf关键配置:

    spark.master yarn spark.eventLog.enabled true spark.eventLog.dir hdfs://master:9000/spark-eventlog spark.serializer org.apache.spark.serializer.KryoSerializer
  2. spark-env.sh必须包含:

    export SPARK_DIST_CLASSPATH=$(/opt/hadoop-3.3.5/bin/hadoop classpath)
  3. 在HDFS上创建事件日志目录:

    hdfs dfs -mkdir /spark-eventlog hdfs dfs -chmod 777 /spark-eventlog

4.2 圆周率测试问题排查

执行Spark Pi测试时常见问题:

  1. ClassNotFound异常: 确保spark-submit命令包含完整的jar路径:

    spark-submit --master yarn --class org.apache.spark.examples.SparkPi \ /opt/spark/examples/jars/spark-examples_2.12-3.3.2.jar 100
  2. 资源不足错误: 调整executor内存配置:

    spark-submit --master yarn --num-executors 2 --executor-memory 1g ...
  3. 查看日志技巧

    • 通过YARN Web UI(8088端口)查看应用日志
    • 直接查看容器日志:
      yarn logs -applicationId <app_id>

5. 性能调优与维护建议

5.1 内存配置优化

针对JDK 17和Hadoop/Spark的配合,推荐以下JVM参数:

组件参数推荐值说明
NameNode-Xmx2-4G根据元数据量调整
DataNode-Xmx1-2G通常不需要太大
Spark Driverspark.driver.memory2-4G控制驱动进程内存
Spark Executorspark.executor.memory4-8G每个执行器内存

5.2 日常维护命令

常用监控和维护命令集合:

  • HDFS健康检查

    hdfs dfsadmin -report hdfs fsck / -files -blocks
  • YARN应用管理

    yarn application -list yarn application -kill <app_id>
  • Spark历史日志: 启动历史服务器:

    ${SPARK_HOME}/sbin/start-history-server.sh

经过完整测试的集群应该能够稳定运行批处理和交互式作业。在实际项目中,建议进一步配置监控系统(如Prometheus+Grafana)来跟踪集群健康状态。

http://www.jsqmd.com/news/909745/

相关文章:

  • 从‘鸡同鸭讲’到‘无缝对话’:手把手重构一个qiankun微前端的通信层
  • 基于NodeMCU与WS2812B的智能氛围灯DIY:从硬件连接到网页控制
  • 如何永久保存你的微信聊天记忆:WeChatMsg一站式数据管理指南
  • C51项目中代码与数据空间占用的精确计算方法
  • UE4玻璃和水面材质实战:用SurfaceForwardShading和SurfaceTranslucencyVolume打造真实折射反射(附性能对比)
  • 基于Teensy 4.1的离线硬件数据保险库:Serpent-CBC加密实践
  • HARNESS:阿拉伯语专属轻量语音模型的迭代自蒸馏与双语预训练实践
  • Claude用户从新手到高手的7天行为路径图:基于127万条真实交互数据的深度还原
  • 2026年物流园重卡充电桩排名:充电效率、并发补能与平台开放性横向对比 - 科技焦点
  • RK3568+串口mark,space校验设置
  • 从WS2812B到ESP8266:打造智能发光领带的物联网全栈实践
  • K8s持久化存储太贵?试试JuiceFS CSI Driver,成本直降80%的实战配置指南
  • 徐州黄金上门回收实测 福运来黄金回收领跑六强逐鹿谁更省心 - 黄金回收
  • 信道容量迭代算法:从理论公式到代码实现的完整指南
  • 2026年|知网5.0文章AIGC检测爆红?亲测10大降AI软件红黑榜(附去AI痕迹指南) - 降AI实验室
  • 基于Arduino与3D打印的DIY模拟赛车方向盘制作全攻略
  • MATLAB三元相图进阶玩法:用STernary类绘制带等高线、气泡图和凸包的数据可视化
  • 文档获取工具终极指南:如何免费下载百度文库等30+平台资源
  • 基于CircuitPython的交互式旋转木马:从硬件到代码的创客实践
  • 探索VSCode Mermaid插件:用代码重构技术文档可视化工作流
  • 用PyTorch复现f-AnoGAN:一个工业缺陷检测的实战项目(附完整代码与数据集处理)
  • 避坑指南:在Linux服务器上部署Docker版Jitsi Meet时,你可能遇到的5个典型问题及解决
  • 给电赛萌新的保姆级教程:用CubeMX+Keil5从零点亮STM32F407(附避坑指南)
  • 【小白必学】OpenClaw 2.7.5 实用 Skill 技能推荐 办公效率提升指南(包含安装包)
  • Agent 一接浏览器权限弹窗就开始误点允许:从 Permission State 到 Prompt Deferral 的工程实战
  • 告别Putty!用Tabby打造你的现代化SSH终端:从下载安装到SFTP传文件保姆级教程
  • 告别吃灰!用这3款免费软件,把你的旧iPad变成Windows电脑的第二块屏幕
  • 量子多体系统中的矩阵乘积态(MPS)与SVD技术解析
  • 用C++刷题太枯燥?看我用Python优雅复现2023 GLPT天梯赛L2‘堆宝塔’与‘赛场安排’算法题
  • 秋衣面料革命,AI造出黑科技