华为云centos7.9按装ambari 2.7.5 hostname 踩坑记录

华为云centos7.9按装ambari 2.7.5踩坑记录

前言

一般都是废话,本人专业写bug业余运维。起初找了三台不废弃的台式机,开始重装centos系统,开始了HDP3.1.5+Ambari2.7.5安装。
推荐一波好文,一路长绿。跑了一段时间没啥问题,项目开始推线上,兴起冲冲申请费用,开了几台ECS机器8C 16G 。有了前面的经验,这路子熟

  • 配置好免密
  • 修改hostname
  • 装好mysql
    噼里啪啦一顿傻瓜式的操作。初始化机器以及按装agent这一步报错如下:
Command 复制代码
  bash: /var/lib/ambari-agent/bin/ambari-agent: Is a directory
  ("INFO 2024-09-19 17:31:34,198 DataCleaner.py:120 - Data cleanup started
  INFO 2024-09-19 17:31:34,199 DataCleaner.py:122 - Data cleanup finished
  INFO 2024-09-19 17:31:34,199 hostname.py:67 - agent:hostname_script configuration not defined thus read hostname 'localhost.localdomain' using socket.getfqdn().
  ERROR 2024-09-19 17:31:34,199 main.py:269 - Ambari agent machine hostname (localhost.localdomain) does not match expected ambari server hostname (hdp02). Aborting registration. Please check hostname, hostname -f and /etc/hosts file to confirm your hostname is setup correctly
  INFO 2024-09-19 17:31:34,199 ExitHelper.py:57 - Performing cleanup before exiting...
  INFO 2024-09-19 17:31:34,200 AlertSchedulerHandler.py:159 - [AlertScheduler] Stopped the alert scheduler.
  INFO 2024-09-19 17:31:34,200 AlertSchedulerHandler.py:159 - [AlertScheduler] Stopped the alert scheduler.
  INFO 2024-09-19 17:32:44,751 main.py:155 - loglevel=logging.INFO
  INFO 2024-09-19 17:32:44,754 Hardware.py:68 - Initializing host system information.
  INFO 2024-09-19 17:32:44,759 Hardware.py:188 - Some mount points were ignored: /dev, /dev/shm, /run, /sys/fs/cgroup, /run/user/0  

Amabri agent 获取hostname为localhost.localdomain 看了一下 cat /etc/hosts,获取的是本地回环地址。
hostname -f cat /etc/hostname 都没啥问题,可能是没看日历,或者少拜一步,重启 ambari-server ...

报错依旧,可能操作姿势不太对,下定决心重做系统。这次应该没事了...

报错照旧,本着专业写bug的态度,就找了一下hostname.py 这个文件find / -name 'hostname.py' 获取hostname 方式。调用Ambari 开发者确实厉害,提供了很多便利的地方,获取hostname 可以允许自行配置hostname_script。当然本地的三台机器我也是这么傻瓜式的按装的呢,没配置最后走 socket.getfqdn() 获取全局限定域名,源码如下 :

复制代码
def hostname(config):
 global cached_hostname
 if cached_hostname is not None:
   return cached_hostname

 try:
   scriptname = config.get('agent', 'hostname_script')
   try:
     osStat = subprocess32.Popen([scriptname], stdout=subprocess32.PIPE, stderr=subprocess32.PIPE)
     out, err = osStat.communicate()
     if (0 == osStat.returncode and 0 != len(out.strip())):
       cached_hostname = out.strip()
       logger.info("Read hostname '{0}' using agent:hostname_script '{1}'".format(cached_hostname, scriptname))
     else:
       logger.warn("Execution of '{0}' failed with exit code {1}. err='{2}'\nout='{3}'".format(scriptname, osStat.returncode, err.strip(), out.strip()))
       cached_hostname = socket.getfqdn()
       logger.info("Read hostname '{0}' using socket.getfqdn() as '{1}' failed".format(cached_hostname, scriptname))
   except:
     cached_hostname = socket.getfqdn()
     logger.warn("Unexpected error while retrieving hostname: '{0}', defaulting to socket.getfqdn()".format(sys.exc_info()))
     logger.info("Read hostname '{0}' using socket.getfqdn().".format(cached_hostname))
 except:
   cached_hostname = socket.getfqdn()
   logger.info("agent:hostname_script configuration not defined thus read hostname '{0}' using socket.getfqdn().".format(cached_hostname))

 cached_hostname = cached_hostname.lower()
 return cached_hostname

执行 python 输入 import socket 继续输入print(socket.gethostname())

嗯,是配置过的名字。再次输出print(socket.getfqdn()) 哦豁返回的是 location.localdomain, 果然报错日志没骗我,对比一下本地机器的输入输出 本地机器正常。心里有一万个***在奔腾,然后提了个工单,截图如下:


最后说我调用的函数有问题,ambari 确实不是遥遥领先写得坚决不能承认问题 。当然也有决绝方式,不能正常返回就退一步,退一步不行再退一步,修改vim /etc/ambari-agent/conf/ambari-agent.ini 指定一下hostname_script 配置,配置如下:

复制代码
#!/bin/bash  
hostname=$(hostname -f)  # 获取完全限定域名  
echo $hostname

修改 vim /etc/ambari-agent/conf/ambari-agent.ini

复制代码
[agent]  
hostname_script=/path/to/hostname.sh

继续按装,其他节点有问题,就同步一份。后来仔细想了想,不行肯定还有其他地方用到hostname.py 索性直接把 hostname.py改了算了,简单暴力 直接全局替换 socket.getfqdn() -> socket.gethostname()。ambari agent 检查过了 ,装好了(还有其他乱七八问题) 后到了下班点,下班牛马周末继续。

第二天早起看到华为云的工单,然后继续说我的用的函数有问题

, 我专业写bug的是我想用啥就用啥的吗?这解决问题的态度跟我朋友一样,能解决的问题看心情解决一下,解决不了的就先把提问题的解决掉。这两天刷抖音看到的毒鸡汤也有点多,退步换来的只有得寸进尺。最后小哥也给我打电话解释了,他专业业有限,也问过os那边的同事 确定hostname配置没错。他说那总结了一下是调用函数的问题,继续离谱,然后说客户也有很多其他问题,阿里云没问题切换华为云就这问题那问题的。本人只是为了解决问题,既然他们靠不住,自己再试试,业余运维真心不敢乱改源码,尤其这种组件的,后期爆个雷,真的从程序和人一个能跑选后者了。担心的还主要是万一hadoop中间件内部也有用这种方式获取hostname的。bug写多了有点后怕。

查了一下 配置fqdn的文章。直接不让配置的hostname走回环地址,利用

复制代码
nmcli general hostname hadoop-0002.com
nmcli networking off 
nmcli networking on

注意 最好在华为云控制台远程登录,因为涉及到网络重启,有可能执行nmcli networking off 链接有会断。

重新试了一下 惊奇的发现socket.getfqdn()正确返回了 继续重做系统,每台机器都执行一下,最后完美搭建~。

升华

问题是让socket.getfqdn()返回正确的hostname,那么为何不从hosts文件入手或者看一下getfqdn()是如何返回的。推荐一波 看到前面我懵了 直接把hosts文件里的hostname对应的回环地址那一行删掉不就行了

powershell 复制代码
[root@tms-0002 ~]# cat /etc/hosts
::1	localhost	localhost.localdomain	localhost6	localhost6.localdomain6
127.0.0.1	localhost	localhost.localdomain	localhost4	localhost4.localdomain4
127.0.0.1	tms-0002	tms-0002
192.168.11.90 tms01
192.168.11.138 tms02
192.168.11.190 tms03
[root@tms-0002 ~]# vim /etc/hosts
[root@tms-0002 ~]# python
Python 2.7.5 (default, Nov 14 2023, 16:14:06)
[GCC 4.8.5 20150623 (Red Hat 4.8.5-44)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import socket
>>> socket.getfqdn()
'tms-0002'
>>>

没错就是127.0.0.1 tms-0002 tms-0002 这一行。HDP装好了,算求不重新搞了~

总结

回顾一下,其实问题也不是啥大问题,就是因为 华为云初始化机器的时候,hosts文件中多了一行hostname 走回环的配置。前面废话有点多,只是记录一下问题解决的过程。有问题留言第一时间解决~ 吐槽一下幸亏华为云没喊遥遥领先,也不确定是否真联系了,授权也给他们开了,自由登录服务,最后这答复 问题没解决差点给我解决了。

相关推荐
zskj_zhyl1 小时前
从“被动养老”到“主动健康管理”:平台如何重构代际关系?
大数据·人工智能·重构
love530love5 小时前
【笔记】2025 年 Windows 系统下 abu 量化交易库部署与适配指南
大数据·运维·人工智能·windows·笔记·python·conda
数据皮皮侠AI6 小时前
中国城市间地理距离矩阵(2024)
大数据·人工智能·线性代数·算法·矩阵·动态规划·制造
武子康7 小时前
大数据-275 Spark MLib - 基础介绍 机器学习算法 集成学习 随机森林 Bagging Boosting
大数据·算法·机器学习·ai·语言模型·spark-ml·集成学习
G皮T8 小时前
【Elasticsearch】Elasticsearch 核心技术(一):索引
大数据·elasticsearch·kibana·es·索引·索引别名·索引模板
武子康8 小时前
大数据-02-Hadoop集群 XML配置 超详细 core-site.xml hdfs-site.xml 3节点云服务器 2C4G HDFS Yarn Map
大数据·后端
玫瑰色的派大星9 小时前
(八)登录认证与学生写作画像
大数据
Elastic 中国社区官方博客9 小时前
使用 MCP 将代理连接到 Elasticsearch 并对索引进行查询
大数据·数据库·人工智能·elasticsearch·搜索引擎·ai·全文检索
随缘而动,随遇而安9 小时前
第七十篇 从餐厅后厨到电影院选座:生活场景拆解Java并发编程核心
java·大数据·后端·生活
cooldream200910 小时前
华为云Flexus+DeepSeek征文|利用华为云 Flexus 云服务一键部署 Dify 平台开发文本转语音助手全流程实践
大模型·华为云·dify