资讯动态

CentOS 7离线安装Ambari 2.7.3.0搭建大数据平台实战记录

发布时间:2026/10/13 17:20:40 来源:尧图企业网站定制
给某项目组搭一套纯内网环境的大数据平台是我前阵子接到的一个不大不小的活。四台物理机全部没有外网工期两周要交付一套能跑数仓任务的Hadoop集群。在线环境装Ambari本是一两条命令的事但换到CentOS 7离线安装Ambari 2.7.3.0连yum源都要自己动手造整个过程完全是另一种复杂度。这篇实战记录围绕“CentOS 7离线安装Ambari 2.7.3.0搭建大数据平台”展开覆盖软件包准备、本地仓库搭建、数据库与JDK初始化、Ambari Server安装、Agent批量注册、集群向导部署以及我在这个过程中踩过的几个典型坑。适合正在内网环境里搭Hadoop平台的运维工程师或者准备把Ambari这类工具从在线模式迁到离线模式的团队参考。1. 先想清楚为什么这个组合仍然值得离线装1.1 版本停更了但存量需求比想象中大Ambari 2.7.3.0搭配HDP 3.1.0.0是过去几年生产环境里最常见的大数据平台组合之一。官方新版本发布早已停止社区的讨论热度也在慢慢下降但我在实际项目里发现存量系统的数量远比我预期多。很多团队手上跑着的就是Ambari 2.7.3.0业务依赖、元数据结构、调度平台对接都已经被这套组合磨得很顺贸然换到新架构迁移成本不是一个小团队能承受的。另一个现实情况是离线环境里资料的完备程度比“新”更重要。Ambari 2.7.3.0虽然老但它对应的安装文档、报错帖子、踩坑经验沉淀得足够多遇到问题搜起来也更有把握。相比之下一些新版本在内网环境里一旦卡住排查起来经常叫天天不应。所以别被“停止更新”四个字带偏节奏在离线场景下可维护性才是第一位的。1.2 纯内网部署的三个真实约束离线环境不是说没有网那么简单它往往会叠加几个约束。网络隔离是第一个。机器放在独立的网段或者通过安全设备策略隔离外网请求全部被拦截。这就意味着你没法在线执行yum install没法在线下载Ambari的rpm包也没法临时从外部源拉取依赖。软件包运进去的方式是第二个。常见的做法是通过内部共享盘、U盘拷贝、光碟介质或者一台带外网权限的跳板机中转。这个过程一旦开始你手上有什么包后面就只能用什么包。所以离线安装方案里软件包准备阶段的工作量会占掉整个项目相当大的比例。调试成本高是第三个。在线环境下安装失败了大不了换个源重新来一次离线环境里每台机器每次重新执行都需要重新传输软件包、重新验证环境试错成本被放大了很多倍。这也意味着任何一步都应该尽量在不动手之前就想明白。1.3 离线方案的整体链路我这次实际执行的链路大致是准备软件包和依赖包 → 在内网搭建本地yum仓库 → 初始化所有节点的操作系统 → 安装并配置MySQL与JDK → 安装Ambari Server并完成初始化 → 部署Ambari Agent并注册主机 → 通过Ambari Web界面完成HDP集群向导 → 验证HDFS、YARN、Hive等核心服务。后面的章节基本就是按照这条链路往下走的。每一节都会把“为什么这么做”讲清楚再给可以直接抄的步骤。2. 动手前先做装备版本、主机规划和系统初始化2.1 软件包清单和版本匹配Ambari 2.7.3.0不是孤立的它必须和对应版本的HDP、HDP-UTILS放在一起用。版本不匹配后面在界面上选Stack版本时会出现各种诡异问题。我这次用到的核心包是下面这几个都是centos7架构的tar.gz包包名称说明ambari-2.7.3.0-187-centos7.tar.gz包含Ambari Server和Ambari Agent的rpm包及相关repo元数据HDP-3.1.0.0-78-centos7-rpm.tar.gz核心大数据组件如HDFS、YARN、Hive、HBase等HDP-UTILS-1.1.0.22-centos7.tar.gz公共依赖工具包HDP安装时强依赖除了这三个大包还需要额外准备MySQL 5.7的离线安装包我用的rpm方式需要server、client、common、libs等几个rpmOracle JDK 8的Linux x64安装包mysql-connector-java.jar注意这个驱动并不在HDP的源里后面Hive配置元数据库时会用到一些基础工具包比如httpd、vim、unzip、net-tools、ntpdate等建议在能联网的临时机器上通过yum --downloadonly方式全部拉下来再统一拷贝进内网。我踩过一个小坑一开始只准备了Ambari和HDP的大包结果安装过程中yum提示各种依赖缺失比如libtirpc、snappy等小众依赖临时找包非常痛苦。建议在准备阶段就把“装一台最小集群可能涉及的所有rpm”一次备齐特别是CentOS基础源里的依赖包宁多勿缺。2.2 主机角色和资源评估离线安装Ambari时主机规划建议在动手前就定好。我不是说一定要一上来就是大规模集群但角色分工最好提前明确避免中途调整主机名或者组件分配。以这次四台机器为例规划结构如下主机角色数量配置建议部署组件Ambari Server节点1台8核心16G内存起系统盘之外预留100G以上Ambari Server、Ambari Agent、MySQL初期可共用核心Master节点1台8核心32G内存数据盘尽量大NameNode、ResourceManager、HiveServer2、ZooKeeper数据节点2台8核心32G内存数据盘尽量大DataNode、NodeManager、RegionServer等内存方面别太抠。Ambari Server自身占用不少内存加上HDFS、YARN、Hive这些组件四台机器最低配置也需要保证每台8G以上否则部署过程中很容易出现节点失联、服务OOM之类的问题。磁盘上要留意这几个目录Ambari Server的元数据默认落在/var/lib/ambari-serverHDP组件装在/usr/hdpHDFS数据目录单独设置。测试环境我吃过磁盘不足的亏装到一半HDFS DataNode格式化失败排查半天才发现是/var空间满了。2.3 每台机器都要做的系统初始化系统初始化是离线安装里最机械但又最容易出一致性问题的一步。我建议先把所有节点统一做完再开始装Ambari否则越往后越乱。关闭SELinux和防火墙是第一步。Ambari对SELinux的约束很直接enforcing模式下很多脚本执行会被拦。执行sed -i s/SELINUXenforcing/SELINUXdisabled/g /etc/selinux/config systemctl stop firewalld systemctl disable firewalld改完SELinux需要重启或者至少执行setenforce 0临时放行然后用getenforce确认输出为Disabled或Permissive。主机名和/etc/hosts是第二个关键点。Ambari集群里各节点之间的通信非常依赖主机名解析主机名绝对不能是localhost.localdomain这种默认值。我的做法是hostnamectl set-hostname ambari-server echo 192.168.10.10 ambari-server /etc/hosts echo 192.168.10.11 master01 /etc/hosts echo 192.168.10.12 worker01 /etc/hosts echo 192.168.10.13 worker02 /etc/hosts时间同步也别忘了。Ambari Agent向Server注册时过大的时间偏差会导致证书校验失败、注册结果异常。内网环境可以用chrony指向内网时间服务器没有时间服务器的话至少保证所有节点date -s手动校准到同一时间。SSH免密也是必做项后面Ambari向导通过界面推送Agent时会用到。通常只需要配置从Ambari Server到所有目标节点的免密执行ssh-keygen -t rsa -N ssh-copy-id rootmaster01 ssh-copy-id rootworker01 ssh-copy-id rootworker023. 本地仓库离线安装成败的第一道坎3.1 为什么非要做本地yum源Ambari Server和Ambari Agent本质上是rpm包HDP集群组件也一样安装时都是走yum。离线环境下没有外部repo唯一可行的方式就是把下载好的软件包解压到一台内网服务器上通过httpd把这些目录发布出来再在各节点的/etc/yum.repos.d/目录里写指向本地地址的repo文件。理解这一点之后整个离线方案的骨架就清晰了所有节点看到的yum源本质都是同一台repo服务器上的某个目录。3.2 用httpd搭一个仓库目录我拿Ambari Server节点兼作repo服务器。先确认httpd是否安装如果没有从准备的基础rpm包中安装yum install -y httpd systemctl start httpd systemctl enable httpd然后把三个tar.gz包依次解压到/var/www/html/repo目录下。解压的时候要注意每个tar包的结构以实际解压结果为准。常见结构是类似下面这样的mkdir -p /var/www/html/repo tar -xzf ambari-2.7.3.0-187-centos7.tar.gz -C /var/www/html/repo tar -xzf HDP-3.1.0.0-78-centos7-rpm.tar.gz -C /var/www/html/repo tar -xzf HDP-UTILS-1.1.0.22-centos7.tar.gz -C /var/www/html/repo解压之后目录结构大概是/var/www/html/repo/ambari/、/var/www/html/repo/HDP/、/var/www/html/repo/HDP-UTILS/这样的形式。每个子目录下都带有repodata文件夹这是tar包自带好的元数据理论上不需要重新createrepo但后面如果发现yum读不到再自己重建也不迟。权限问题值得专门说一句。httpd默认以apache用户运行如果解压出来的目录属主和权限不对客户端访问时会403。稳妥做法是chmod -R 755 /var/www/html/repo验证是否发布成功在另一台机器上执行curl -I http://192.168.10.10/repo/ambari/centos7/2.7.3.0-187/repodata/repomd.xml返回200就说明源通了。这里URL路径里的版本号一定要以实际目录为准不同版本的tar包解压出来的路径可能略有差别别直接用我这里的路径去套。3.3 repo文件怎么写以及为什么不建议开gpgcheck各节点上创建repo文件我通常写成两个文件一个ambari一个hdp# /etc/yum.repos.d/ambari.repo [ambari] nameambari baseurlhttp://192.168.10.10/repo/ambari/centos7/2.7.3.0-187 gpgcheck0 enabled1# /etc/yum.repos.d/hdp.repo [HDP] nameHDP baseurlhttp://192.168.10.10/repo/HDP/centos7/3.1.0.0-78 gpgcheck0 enabled1 [HDP-UTILS] nameHDP-UTILS baseurlhttp://192.168.10.10/repo/HDP-UTILS/centos7/1.1.0.22 gpgcheck0 enabled1同时务必将原本的CentOS-Base.repo、epel.repo等外网源禁掉。最简单的做法是把它们移到备份目录或者把enabled改成0。不然后果是yum makecache时会尝试请求外网地址白白卡住很久。gpgcheck我直接设为0。离线环境里我们没有rpm签名公钥如果保留gpgcheck1yum安装时会报公钥缺失直接终止。有些repo文件里本来就带gpgkeyhttp://...的外网地址这种在离线环境里只会添乱。写完repo文件后在各节点执行yum clean all yum makecache不报错并且能看到ambari、HDP、HDP-UTILS几个仓库说明本地源基本就绪。4. 数据库与JDKAmbari Server的启动前提4.1 为什么我选了MySQL 5.7而不是MariaDBAmbari Server自身的元数据可以选择MySQL、MariaDB或PostgreSQLHDP 3.1的官方兼容列表里也都支持。但我在离线环境里更推荐MySQL 5.7原因很实际MySQL 5.7与Ambari 2.7.3.0搭配的文档案例最多Hive、Oozie等组件使用MySQL作为元数据库的路径也非常成熟遇到问题容易找到参考。MariaDB虽然兼容性看起来不错但在Ambari 2.7.3.0配合Hive-on-TeZ时我遇到过一些版本相关的接口差异调试起来并不顺畅。PostgreSQL的内嵌模式适合快速跑一个演示环境生产级部署还是建议独立数据库。所以综合来看MySQL 5.7是最稳妥的选择。4.2 MySQL 5.7离线安装与初始化离线安装MySQL的方式有rpm和二进制两种。rpm方式更干净依赖也相对少。先把准备好的mysql-community-*系列rpm放到服务器上然后执行yum install -y mysql-community-common-*.rpm mysql-community-libs-*.rpm mysql-community-client-*.rpm mysql-community-server-*.rpmMySQL 5.7安装完首次启动前建议先改一下/etc/my.cnf把字符集设置写进去。Ambari后期创建Hive等元数据库时对MySQL字符集有明确要求[mysqld] character_set_serverutf8 collation-serverutf8_general_ci这里有个细节默认的utf8即可不要改成utf8mb4。原因后面踩坑章节再展开。启动MySQLsystemctl start mysqld systemctl enable mysqldMySQL 5.7首次启动时会给root生成一个临时密码在日志里找grep temporary password /var/log/mysqld.log用临时密码登录后先把密码改成自己想要的然后要注意MySQL 5.7默认开启了validate_password插件初始密码策略比较严格。如果创建ambari用户时密码不够复杂会被直接拒绝。为了方便操作我通常会先临时调低策略mysql -uroot -p SET GLOBAL validate_password_policyLOW; SET GLOBAL validate_password_length6; ALTER USER rootlocalhost IDENTIFIED BY Root123456;接着创建Ambari需要的数据库和账号CREATE DATABASE ambari CHARACTER SET utf8; CREATE USER ambari% IDENTIFIED BY Ambari123; GRANT ALL PRIVILEGES ON ambari.* TO ambari%; FLUSH PRIVILEGES;如果Ambari Server和MySQL不在同一台机器还需要检查MySQL是否允许远程连接重点是bind-address和root或ambari用户的远程授权。Ambari Server写数据库只需要这一台连接串Agent不直接操作数据库。4.3 JDK 8必须到位并配好JAVA_HOMEAmbari 2.7.3.0与HDP 3.1对JDK版本的要求是JDK 8。我建议这里直接用Oracle JDK 8不要图省事用OpenJDK。实际部署中Hive、HBase等组件在OpenJDK下出现过类库兼容问题排查起来很麻烦而Oracle JDK相对稳定得多。把jdk-8uXXX-linux-x64.rpm上传到服务器后执行rpm -ivh jdk-8uXXX-linux-x64.rpm安装完确认路径和版本java -version默认Oracle JDK安装后路径通常是/usr/java/jdk1.8.0_xxx-amd64把这个路径写进/etc/profileexport JAVA_HOME/usr/java/jdk1.8.0_xxx-amd64 export PATH$JAVA_HOME/bin:$PATH为什么要单独强调JAVA_HOME因为Ambari Server初始化时会扫描JDK路径后面HDP组件启动脚本也会依赖JAVA_HOME。路径不对或者环境变量缺失经常会导致服务启动失败但报错信息又不直观。5. ambari-server从安装到初始化向导5.1 安装ambari-server本体repo源就绪之后安装Ambari Server本身很简单yum install -y ambari-server安装完成确认一下版本rpm -qa | grep ambari同时我建议顺手把ambari-agent也装上。因为Ambari Server节点本身也是集群的一份子后面注册主机时会用到。遇到依赖缺失时直接去本地repo里补装对应rpm。这里就需要用到前文强调的“基础依赖包尽量备全”的准备不然每缺一个依赖都要回跳板机拿包非常影响节奏。5.2 setup交互逐项说明ambari-server安装后必须执行初始化向导ambari-server setup这个交互过程不同build提示语会略有差异但核心问答大致如下提示要不要自定义JDK设置选择自定义不要选自动下载因为离线环境根本下载不了输入JDK路径填/usr/java/jdk1.8.0_xxx-amd64询问数据库类型选择自定义数据库输入MySQL输入数据库主机、端口、库名、用户名、密码即前文创建的ambari库和账号询问是否让Ambari Server自动在数据库上执行DDL脚本如果ambari账号有建表权限就选y如果没有权限只要在MySQL里执行DDL脚本即可。自动执行DDL的脚本路径是/var/lib/ambari-server/resources/Ambari-DDL-MySQL-CREATE.sql。手动执行的方式是mysql -uambari -h192.168.10.10 -p use ambari; source /var/lib/ambari-server/resources/Ambari-DDL-MySQL-CREATE.sql;setup过程中我最容易失误的一点是远程MySQL账号的host授权。如果ambari用户只授权了localhost而Ambari Server和MySQL分开部署DDL执行和后续连接必然失败。授权时统一用ambari%别省事。5.3 启动、看日志、确认服务健康初始化完成后启动服务ambari-server start启动日志在/var/log/ambari-server/ambari-server.log出问题时第一时间看这里比界面上看到的笼统报错有信息量得多。确认服务起来后浏览器访问http://192.168.10.10:8080默认账号密码是admin/admin。能正常登录说明Ambari Server的安装和数据库配置基本通过了。登录后先别急着创建集群下一步要把Agent的注册问题处理掉否则后面向导里所有节点都处于异常状态。6. Agent注册与集群向导真正开始装HDP6.1 先把Agent注册到位Agent有两种注册方式。第一种是手动在各节点安装适合机器数量不多的情况。在每台目标节点上执行yum install -y ambari-agent然后修改/etc/ambari-agent/conf/ambari-agent.ini找到hostname这一行改成Ambari Server的主机名[server] hostnameambari-server启动agentsystemctl start ambari-agent systemctl enable ambari-agent看日志确认注册是否成功tail -f /var/log/ambari-agent/ambari-agent.log第二种方式是在Ambari界面“Hosts”注册时通过SSH自动推送。这种方式要求提前把Server到各节点的SSH免密配好并且各节点能访问本地repo源。界面会自动执行Agent安装并启动比较省事但出问题时排查链路也更长。我实际用下来四台以内的小集群手动安装Agent反而更可控大集群再考虑界面批量推送。6.2 集群向导里最容易出错的几个环节登录Ambari Web界面后点击“Launch Install Wizard”这里有几个环节是离线部署最容易翻车的。集群名要符合规范。只能使用字母、数字和下划线不能带中划线或点。这是我第一次建集群时卡住的地方看起来不起眼但Ambari对集群名校验很严格。仓库设置必须改成Local Repository。向导页面会要求选择HDP版本并显示仓库地址。离线环境里把HDP和HDP-UTILS的base url手动改成本地地址格式和前面repo文件里一致例如http://192.168.10.10/repo/HDP/centos7/3.1.0.0-78 http://192.168.10.10/repo/HDP-UTILS/centos7/1.1.0.22如果地址填错界面上很可能看不到HDP 3.1这个版本选项或者安装进度长时间停在Pending状态。服务选择环节我的建议是不要贪多。第一次部署先把HDFS、YARN、MapReduce2、ZooKeeper、Hive、Tez、Ambari Metrics装起来其他如SmartSense没必要选取消了能省掉很多离线环境下的网络配置问题。组件分配环节NameNode和ResourceManager放在Master节点DataNode和NodeManager放在Worker节点ZooKeeper尽量分布在多个节点上。每个服务下所有组件都必须有归属漏掉任何一个都会导致向导无法继续。元数据库配置环节Hive会要求填写MySQL连接信息。这里需要先手动创建Hive等组件的库和账号CREATE DATABASE hive CHARACTER SET utf8; CREATE USER hive% IDENTIFIED BY Hive123; GRANT ALL PRIVILEGES ON hive.* TO hive%; FLUSH PRIVILEGES;Oozie、Ranger之类如果选了同样按这个套路建库。6.3 部署过程中的跟进技巧向导走到“Deploy”阶段后界面上会按节点逐步执行安装、启动、配置、测试等任务。这个过程比较长不要干等着我自己的经验是先小步走核心组件部署完成验证通过后再补装其他服务看到某个步骤失败先点进去看详细错误日志不要盲目点Retry更直接的方式是登录对应节点手动执行界面上展示的那条命令看真实报错输出。很多时候点Retry只能原地失败手动执行能拿到更清晰的错误信息。部署完成后在界面上看所有服务是否为绿色对勾再用命令验证一遍hdfs dfsadmin -report yarn node -list能看到DataNode和NodeManager在线说明平台核心组件已经起来了。7. 离线装这套平台绕不开的几个坑7.1 MySQL字符集与密码策略一半报错都出在这里Ambari在创建元数据库表结构时对MySQL的字符集很敏感。如果把character_set_server设成utf8mb4Hive建表时经常报“Specified key was too long; max key length is 767 bytes”原因是utf8mb4下索引字段长度超限。这个报错非常容易误导人第一次遇到时我以为是字段类型的问题排查了很久才发现是字符集的事。检查命令很简单SHOW VARIABLES LIKE character_set%;确保character_set_server是utf8而不是utf8mb4。这里还要注意一个点如果MySQL已经装完并且表已经建好中途再改字符集是救不回来的只能重建库。所以my.cnf里的配置一定要在启动MySQL之前写好。另一个跟MySQL相关的坑是密码策略。5.7默认开启validate_password创建弱密码用户会被直接拒绝。安装过程中很多人会随手写一个简单密码结果CREATE USER execute时报错。处理方式前面已经写了临时把validate_password_policy调低创建完用户再恢复。7.2 mysql-connector-java缺失向导卡在“Test Connection”的经典原因Hive等组件配置元数据库时向导里会有一项“Test Connection”。如果一直失败大概率不是网络问题而是缺少MySQL JDBC驱动。Ambari和HDP的软件源里不包含mysql-connector-java.jar原因和GPL协议有关。这个jar需要单独准备然后放到所有可能连接MySQL的节点的/usr/share/java目录下至少Ambari Server节点和Hive所在节点都要有。mkdir -p /usr/share/java cp mysql-connector-java-xxx.jar /usr/share/java/mysql-connector-java.jar放置完成后回到向导里重新测试连接变绿就说明驱动生效了。我第一次装的时候不知道这个机制卡在Hive元数据库测试上小半天一度以为是账号权限写错了。7.3 界面看不到HDP版本或者安装进度一直Pending向导里看不到HDP版本或者部署进度卡在某个节点长时间不推进多半是仓库URL的问题。我遇到过三种情况。第一版本号路径和实际解压目录不一致。tar包解压后实际目录可能是3.1.0.0-78也可能是其他build号填URL时必须去/var/www/html/repo/HDP/centos7/目录下ls确认。第二客户端节点复制了repo文件后没有更新缓存。在界面部署前确保所有节点都执行过yum clean all yum makecache第三tar包自带的repodata元数据损坏或路径不匹配。这种情况可以先确认服务器上curl是否正常返回repomd.xml如果目录结构没问题但yum依然报元数据错误就在repo服务器上手动重建元数据createrepo --update /var/www/html/repo/HDP/centos7/3.1.0.0-78然后客户端重新yum clean all再试。7.4 Agent注册不上的链路排查Agent注册失败是我这次部署里最恼人的问题。现象是所有Agent节点显示为未知主机界面上看不到具体原因。记一下排查顺序基本能覆盖大多数情况。第一步在Agent节点上确认网络能到Server的8440和8441端口telnet ambari-server 8440 telnet ambari-server 8441第二步确认ambari-agent.ini里的hostname填的是Ambari Server的主机名而不是IP。Agent向Server注册时使用主机名解析填IP虽然也能通但后续容易和主机列表里的名字对不上。第三步逐项核对主机名解析。在Agent节点执行hostname hostname -f cat /etc/hosts确保统一使用相同的主机名格式。我遇到的实际案例是Server的hostname被写成了长域名但/etc/hosts里没有对应记录所有Agent都注册失败。加上记录后立刻恢复。第四步检查时间偏差。Server和Agent之间时间差超过几分钟注册时会出现证书校验失败现象同样是Agent不在线。用chronyc或date命令确认各节点时间一致。第五步看Agent日志。/var/log/ambari-agent/ambari-agent.log里会有注册失败的具体异常信息比界面上的“Unknown”切实得多。按照上面这个顺序往下查基本不会漏。一些实际操作中的体会最后分享一点个人体会。离线装Ambari这套流程最累的其实不是装的过程而是准备过程的确定性保障。软件包、依赖、repo路径、MySQL配置、主机名解析每一项都提前验证过后面部署才能顺畅。我第二次给另一个环境搭建时把init脚本和检查清单固化成了文档先在一台机器上做最小验证确认所有环节无误后再批量执行整体耗时比第一次少了将近一半。如果你也是第一次在内网环境装这套东西建议不要一上来就铺开十几台机器先用两台机器把Ambari Server和Agent的链路走通确认数据库、JDK、仓库、注册都没有问题再往下加节点。离线环境里小范围验证是成本最低的试错方式。

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价 →
↑