鲲鹏泰山ARM服务器上搭建Ambari集群完整实战
发布时间:2026/10/15 22:33:36 锦皓数字建站

1. 为什么要在鲲鹏泰山arm服务器上搭Ambari这两年ARM生态的服务器越来越多地出现在政企、金融、运营商机房里尤其是鲲鹏、泰山这类国产ARM架构服务器一上就是几十台起步。硬件到位了往上装大数据组件就成了头疼的事HDFS、YARN、Hive、Spark、HBase这一堆东西如果一台台手动部署光配置文件就能把人写吐更别提后续版本升级和节点扩容。Ambari在这时候就派上用场了。它本质上是Hadoop生态的集群管理平台提供Web界面完成组件安装、配置下发、服务启停、节点纳管和告警监控。我这次要聊的核心就是在鲲鹏泰山arm服务器上把Ambari完整搭起来并且让底下的Hadoop组件全部跑在ARM架构上。这活儿不像x86环境那样有现成的发行版全家桶可以一把梭踩坑是必然的但思路理顺之后整个流程完全可以复制到其他ARM服务器集群上。这篇内容适合两类读者一类是正在做ARM服务器迁移或新机房交付的运维工程师另一类是对Ambari体系感兴趣、想在非x86环境里试试水的技术爱好者。我会把选型逻辑、环境准备、搭建步骤、踩坑排查都揉碎了讲保证你照着走至少能省下两到三天的摸索时间。2. 搭建前必须想清楚的关键决策2.1 版本选择Ambari并非越新越好很多人上来就问Ambari装哪个版本我的建议是先把Hadoop组件版本定下来再反推Ambari版本。Ambari 2.7系列对应HDP 3.1.x这是目前社区里适配较稳定的组合。官方对ARM的支持基本是空白所以我们真正要解决的问题不是“装哪个版本”而是“怎么让这个版本在aarch64上跑起来”。我这次使用的是社区修复过的Ambari 2.7.5源码配合HDP 3.1.4组件集整体兼容性经过了多轮验证。这里要特别提醒别一上来就追新Ambari 3.0以后的项目活跃度明显下降而且新版本对组件版本的约束更紧在ARM这种非主流平台上老版本反而更容易找到可用资源。版本选型还牵扯到JDK版本。Ambari 2.7.x支持JDK 8不要自作主张升级到JDK 11或17因为底层很多组件脚本是按Java 8的类库和参数写的。我在测试环境试过JDK 11结果Ambari Server启动正常但部分组件安装时出现ClassNotFound异常白白浪费了大半天。规规矩矩用JDK 8ARM下有华为的bisheng JDK 8可用或者直接用OpenJDK 8的aarch64版本都行。2.2 底层系统与基础依赖准备ARM服务器跟x86服务器在系统层面没有本质区别但银行、政企项目里常见的操作系统版本很杂比如欧拉、麒麟、统信UOS还有纯CentOS 7的ARM移植版。我一般优先选择与CentOS 7兼容性最好的aarch64版本因为在线的yum源和依赖包相对好找编译工具链也更完整。系统装完之后有几项基础依赖必须确认gcc、gcc-c、make、cmake源码编译组件时一定要有python2Ambari 2.7.x的Server端脚本依赖Python 2部分系统默认Python 3需要兼容处理openssl、openssl-develHadoop的RPC通信和HTTPS配置需要ntp或chrony集群时间同步不做好Kerberos认证和HBase会很痛苦lvm或xfs格式的数据盘给NameNode、DataNode数据目录用别把根分区填满我踩过的第一个坑就是Python版本。某ARM系统镜像自带Python 3.6Ambari Server启动脚本跑起来一堆语法错误后来检查才发现是python2解释器缺失。解决方式并不复杂用alternatives命令把python指向Python 2版本同时保留python3的软链避免系统其他组件挂掉。2.3 ARM适配的核心难点repo源就是一切Ambari的工作原理决定了它必须通过软件仓库repo来分发组件包。在x86环境下可以直接使用公共的Ambari和HDP仓库但ARM环境没有官方预编译好的aarch64 rpm包直接配置公网repo肯定装不上因为架构不匹配。解决思路有三条使用某生态厂商发布的ARM适配仓库自行从源码编译所有组件rpm混合方案核心组件用编译好的aarch64包边缘组件直接用源码安装我最终走的是第三条路线。公共repo源里确实有部分aarch64的rpm比如zookeeper、hadoop的某些子包但也有不少依赖包缺失需要从源码编译。这里建议搭建一个本地yum源把所有需要的rpm统一放进去后续不管是新装节点还是扩容都能快速复用。ARM环境最怕的就是在线yum源时好时坏本地化之后稳定性会好很多。3. 完整实操从repo搭建到集群纳管3.1 先把仓库搭牢制作离线Yum源的关键步骤仓库是整个搭建过程的地基我习惯最先做它。先把所有rpm包放到一台充当镜像源的服务器上目录结构按照yum仓库的标准来mkdir -p /data/ambari-repo/ambari/ mkdir -p /data/ambari-repo/hdp/把准备好的Ambari相关rpm和HDP相关rpm分别拷贝到对应目录然后用createrepo工具生成仓库元数据yum install -y createrepo createrepo /data/ambari-repo/ambari/ createrepo /data/ambari-repo/hdp/创建好仓库后通过Nginx或httpd发布出来让所有集群节点都能访问。Nginx配置里只需注意目录别名和autoindex开启server { listen 8080; location /repo/ { alias /data/ambari-repo/; autoindex on; } }客户端节点的repo文件写入/etc/yum.repos.d/ambari.repo[ambari] nameAmbari baseurlhttp://192.168.1.10:8080/repo/ambari/ enabled1 gpgcheck0 [hdp] nameHDP baseurlhttp://192.168.1.10:8080/repo/hdp/ enabled1 gpgcheck0这里有一个容易踩的细节gpgcheck必须设为0因为自制仓库没有有效签名。如果保持默认的1安装时会直接报公钥错误不少人排查半天才发现是这个原因。3.2 初始化Ambari Server仓库就绪后在管理节点上安装Ambari Serveryum install -y ambari-server安装完成后执行配置向导ambari-server setup一路上需要选择JDK、数据库类型和数据库连接信息。数据库我推荐使用MySQL或MariaDB先把数据库建好并创建好对应的账号CREATE DATABASE ambari DEFAULT CHARACTER SET utf8; CREATE USER ambari% IDENTIFIED BY ambari123; GRANT ALL PRIVILEGES ON ambari.* TO ambari%; FLUSH PRIVILEGES;注意是UTF-8编码否则后续Ambari的表结构存储中文注释会出现乱码影响界面显示。setup过程中还需要指定JDK路径把JDK 8的tar包路径填进去即可Ambari会自动配置JAVA_HOME环境变量。执行完setup后还需要初始化数据库schemaambari-server setup --jdbc-dbmysql --jdbc-driver/path/to/mysql-connector-java.jarmysql的JDBC驱动是纯Java实现的所以不存在ARM适配问题直接下载即可。这个步骤经常被漏掉导致点开Ambari页面时报数据库连接错误或驱动加载失败。3.3 启动Server并完成基础配置初始化完成后启动Ambari Serverambari-server start如果一切正常浏览器访问http://管理节点IP:8080就会出现登录页面默认管理员账号是admin/admin。首次登录后建议立即修改默认密码这几乎是所有安全扫描的第一项检查点。这里要说一个重要操作进入Ambari后第一步不是急着创建集群而是先去“Admin”菜单里管理版本定义Version Definition。Ambari默认只会加载它内置的HDP版本定义但这个定义指向的repo地址未必是本地源。需要新建一个VDF文件把HDP版本的repo地址指向我们自己的http://192.168.1.10:8080/repo/hdp/并明确注明基础操作系统为redhat7、架构为aarch64。VDF文件的格式大致如下versions version package_version3.1.4.0/package_version release3.1.4.0-17/release os typeredhat7/type architectureaarch64/architecture repo baseurlhttp://192.168.1.10:8080/repo/hdp//baseurl repoidHDP/repoid /repo /os /version /versionsVDF文件的作用是告诉Ambari“有哪些组件版本可用、从哪里下载”没有它或者repo地址不对后面创建集群时会出现“无法访问仓库”的报错卡在初始化配置那一步走不动。3.4 安装Ambari Agent并让节点入列Ambari Server跑起来之后往集群里加节点的思路很简单在每台worker节点上安装并注册ambari-agent。yum install -y ambari-agent修改/etc/ambari-agent/conf/ambari-agent.ini把hostname指向Ambari Server的IP[server] hostname192.168.1.10 url_port8440然后启动agentsystemctl start ambari-agent systemctl enable ambari-agentagent启动后会和Server端的8440端口保持长连接用来接收指令和上报心跳。此时回到Ambari Web界面进入“Hosts”页面会看到新节点处于“注册中”状态。如果节点没有自动出现可以手动执行hostname -f检查主机名是否加入了DNS或 /etc/hosts 解析。AMBARI的agent注册有一个很隐蔽的坑它要求主节点的主机名必须能通过反向解析如果/etc/hosts里只配了IP没配完整域名注册就会卡住。3.5 通过向导安装HDFS、YARN和Hive节点纳管完成后就是通过“Add Service”向导来选择并安装组件。这一阶段最核心的操作是在“Assign Masters”和“Assign Slaves”页面中合理规划角色分布。一般建议NameNode和ResourceManager部署在管理节点SecondaryNameNode部署在另一台非主节点DataNode和NodeManager在所有worker节点上平铺我在ARM服务器上的实际分配是3台管理节点跑NameNode、ResourceManager、HiveServer2等主角色8台worker节点跑DataNode和NodeManager另外两台跑ZooKeeper保证奇数节点数。向导完成后Ambari会逐台下发安装指令并刷新服务状态。这个阶段最容易出问题的是部分组件包缺失因为我用的本地repo并不完整Hive关联的某些依赖包没有aarch64版本安装会直接失败。此时不要急着点“重试”而是先去/var/log/ambari-agent/ambari-agent.log查看具体是哪个rpm缺失再到源码编译的补包清单里找替代。前前后后我补了大概七八个依赖包才把所有组件装完。4. 实战踩坑与故障排查手记4.1 高频问题速查表症状可能原因解决方向ambari-server start后页面无法访问Java进程未启动、端口8080被占用检查/var/log/ambari-server/ambari-server.log用netstat确认端口节点始终处于注册中状态/etc/hosts主机名反向解析失败确保主机名能通过hostname -i和hostname -f解析到IP安装组件时报package not found本地repo缺rpm包或baseurl错误用yum list检查仓库优先级补充源码编译包agent心跳丢失防火墙隔离8440端口放通8440端口不用关闭防火墙页面提示数据库连接失败mysql驱动未配置或表结构未初始化检查JDBC驱动路径、ambari schema表是否存在HDFS启动时NameNode无法格式化/etc/hosts里主机名带下划线主机名不允许下划线修改为短横线这张表是我在多次部署中提炼出来的问题合集覆盖了从Server端到Agent端、从数据库到组件的常见故障。ARM环境下还会多一类架构相关报错比如“Exec format error”这通常意味着进程尝试加载了x86的二进制文件基本可以断定是repo源里混入了错误架构的包需要去仓库里核对rpm架构标签。4.2 案例分析Hive初始化时找不到libtinfo.so.5有一次在ARM机器上装Hive时初始化Derby数据库这一步一直失败报错找不到libtinfo.so.5。这个库是ncurses的依赖在aarch64系统上默认只有libtinfo.so.6而Hive的老版本脚本仍然要求so.5。排查思路是先用ldd看Hive的启动脚本到底依赖哪些共享库ldd /usr/lib/hive/bin/hive | grep not found看到libtinfo.so.5缺失后最简单的临时处理办法是从系统已有的ncurses-libs中创建一个软链接ln -s /usr/lib64/libtinfo.so.6 /usr/lib64/libtinfo.so.5这种做法虽然有点粗暴但在测试环境里能快速把流程走通。生产环境建议直接升级Hive版本或者重新编译ncurses并提供so.5接口。这个问题在x86上几乎不会遇到因为老系统的库版本兼容性更强而ARM系统普遍比较新动态库版本跳代严重。4.3 定向排查的方法论在ARM环境里遇到的问题很多都是“依赖型问题”也就是A装不上是因为B不兼容B不兼容是因为C找不到。这种链条状的故障最忌讳的就是头疼医头、脚疼医脚。我总结的排查顺序是先看ambari-server日志确认问题发生在服务端还是agent端再进入具体节点的/var/log/ambari-agent/下找对应组件日志确认是包缺失、依赖缺失还是权限/配置问题包缺失就查repo依赖缺失就查系统库权限问题直接找用户和目录属主有一次DataNode起不来日志只报了一个permission denied看起来像HDFS目录权限问题我改了目录权限还是不行。最后发现是/data目录挂在了一个root所属的挂载点上而DataNode进程以hdfs用户运行压根没有写权限。这种问题在x86环境也常见但在ARM服务器上因为挂载盘配置差异更容易被忽视。5. 性能调优与管理经验5.1 系统参数调优ARM服务器跟x86相比CPU指令集和内存带宽模型不一样但操作系统层面的调优思路是通用的。我最先调整的是以下几个参数echo vm.swappiness10 /etc/sysctl.conf echo vm.zone_reclaim_mode0 /etc/sysctl.conf echo never /sys/kernel/mm/transparent_hugepage/enabled echo never /sys/kernel/mm/transparent_hugepage/defragswappiness调低是为了避免系统频繁把进程内存交换到swap这对Hadoop这类内存敏感型应用很重要。透明大页关闭则是老生常谈HBase和HDFS的写入性能会因为THP的延迟分配而出现明显抖动。文件句柄和进程数限制也要一并调大cat /etc/security/limits.conf EOF hdfs - nofile 65536 hdfs - nproc 65536 yarn - nofile 65536 yarn - nproc 65536 hive - nofile 65536 hive - nproc 65536 EOF合理的limits配置能避免运行一段时间后突然出现“Too many open files”的崩溃。这个坑在数据量涨起来之后才会暴露第一次部署时如果忽略了后面扩容时就会很被动。5.2 监控与告警调优Ambari自带的监控面板能实时展示各节点的CPU、内存、磁盘和网络指标。ARM服务器上跑大数据组件时我建议重点关注NameNode的GC耗时和DataNode的磁盘IO延迟。Ambari默认的告警阈值不一定适合ARM环境的性能曲线需要按实际压测结果调整。具体操作是在服务的“Configs”里找到“Advanced”页签调整namenode.gc.time和yarn.nodemanager.local-dirs相关参数。尤其是DataNode多块盘配置时Ambari默认只监控挂载点空间不会自动感知某块盘IO异常。我后来用自定义脚本告警的方式每5分钟检测一次磁盘平均IO延迟一旦超过阈值就触发邮件通知比Ambari默认的“磁盘使用率超80%”要提前很多。5.3 集群扩容与日常维护ARM集群扩容的思路跟x86基本一致新节点装好系统后配置本地repo安装ambari-agent注册进现有集群再通过“Add Host”向导分配角色即可。但有两个细节要特别留意一是新节点的repo源必须与管理节点保持一致避免新旧节点出现组件版本不一致。Ambari虽然能管理配置但它默认不会帮你重新安装已经装过的组件如果版本漂移后续升级会很痛苦。二是同一集群里尽量不要混用x86和ARM节点。异构架构会导致部分组件源码包无法统一而且Hadoop的压缩库、native库在不同架构下差异很大混跑容易出现奇怪的性能问题甚至运行错误。日常维护里最常用的一招是定时清理旧日志。HDFS的NameNode日志和Hive的查询日志增长速度惊人在ARM环境下因为日志收集组件可选范围小很多人会放弃部署日志清理任务。我后来直接在crontab里写了清理脚本保留最近30天的日志磁盘压力明显缓解。这块属于小而关键的维护项最好提前规划。6. 一点个人体会整套流程走下来我最深的感受是ARM服务器搭建Ambari这件事难的不是Ambari本身而是配套组件的arm64生态完整性。只要你肯花时间把本地repo构建得足够完备后续所有安装步骤反而比x86环境更流畅因为少了公网源那种不确定的网络等待。如果非要给后来者一个建议我会说先把仓库构建脚本和VDF文件当成一等公民来维护不要随手复制粘贴到服务器上就不管了。版本号、基础路径、组件清单这些信息一旦混乱排查起来要比x86环境多花好几倍时间。把这些基础做扎实了后面无论扩容、升级还是重建都能节省大量精力。
锦
锦皓数字建站
深耕本土企业品牌数字化升级,专注原创端正雅致商务官网,从视觉设计到稳定运维全程保驾护航。