Ambari 统信 UOS 适配征途:国产化环境下的集群管理破壁与实践总结

Ambari 统信 UOS 适配征途:国产化环境下的集群管理破壁与实践总结

随着国产化替代进程的加速,将 Apache Ambari 这一成熟的 Hadoop 集群管理工具部署到统信 UOS 操作系统环境的需求日益迫切。然而,由于底层操作系统、依赖库、环境配置等方面的显著差异,适配过程面临一系列独特的挑战。本文档系统总结了在 Ambari 适配统信 UOS 过程中遇到的关键问题、技术难点以及相应的解决方案与实践经验。旨在为后续在国产化统信 UOS 平台上顺利部署和管理 Ambari 及 Hadoop 生态组件提供详实参考,加速国产化大数据平台的落地进程。

问题

shell 复制代码
INFO 2025-03-13 15:47:21,825 HeartbeatThread.py:132 - Registration response received
ERROR 2025-03-13 15:47:21,825 HeartbeatThread.py:108 - Exception in HeartbeatThread. Re-running the registration
Traceback (most recent call last):
  File "/usr/lib/ambari-agent/lib/ambari_agent/HeartbeatThread.py", line 95, in run
    self.register()
  File "/usr/lib/ambari-agent/lib/ambari_agent/HeartbeatThread.py", line 135, in register
    self.handle_registration_response(response)
  File "/usr/lib/ambari-agent/lib/ambari_agent/HeartbeatThread.py", line 209, in handle_registration_response
    raise Exception(error_message)
Exception: Registration failed due to: Cannot register host with not supported os type, hostname=hadoop-02, serverOsType=kylin20, agentOsType=uos server20
INFO 2025-03-13 15:47:21,825 transport.py:358 - Receiver loop ended
', None)

解决

/usr/lib/ambari-agent/lib/ambari_commons/resources/os_family.json /usr/lib/ambari-agent/lib/ambari_commons/os_check.py

shell 复制代码
/usr/lib/ambari-agent/lib/ambari_commons/resources/os_family.json
"kylin": {
        "extends" : "redhat",
        "distro": [
          "kylin"
        ],
        "versions": [
          10,
          #加上20
          20
        ]
      },

问题

shell 复制代码
Traceback (most recent call last):
  File "/var/lib/ambari-agent/cache/stack-hooks/before-INSTALL/scripts/hook.py", line 37, in <module>
    BeforeInstallHook().execute()
  File "/usr/lib/ambari-agent/lib/resource_management/libraries/script/script.py", line 352, in execute
    method(env)
  File "/var/lib/ambari-agent/cache/stack-hooks/before-INSTALL/scripts/hook.py", line 33, in hook
    install_packages()
  File "/var/lib/ambari-agent/cache/stack-hooks/before-INSTALL/scripts/shared_initialization.py", line 37, in install_packages
    retry_count=params.agent_stack_retry_count)
  File "/usr/lib/ambari-agent/lib/resource_management/core/base.py", line 125, in __new__
    cls(names_list.pop(0), env, provider, **kwargs)
  File "/usr/lib/ambari-agent/lib/resource_management/core/base.py", line 166, in __init__
    self.env.run()
  File "/usr/lib/ambari-agent/lib/resource_management/core/environment.py", line 160, in run
    self.run_action(resource, action)
  File "/usr/lib/ambari-agent/lib/resource_management/core/environment.py", line 124, in run_action
    provider_action()
  File "/usr/lib/ambari-agent/lib/resource_management/core/providers/packaging.py", line 30, in action_install
    self._pkg_manager.install_package(package_name, self.__create_context())
  File "/usr/lib/ambari-agent/lib/ambari_commons/repo_manager/yum_manager.py", line 242, in install_package
    elif context.is_upgrade or context.use_repos or not self._check_existence(name):
  File "/usr/lib/ambari-agent/lib/ambari_commons/repo_manager/yum_manager.py", line 312, in _check_existence
    return self.rpm_check_package_available(name)
  File "/usr/lib/ambari-agent/lib/ambari_commons/repo_manager/yum_manager.py", line 397, in rpm_check_package_available
    import rpm # this is faster then calling 'rpm'-binary externally.
ImportError: No module named rpm

usr/lib/ambari-agent/lib/ambari_commons/repo_manager/yum_manager.py

python 复制代码
def rpm_check_package_available(self, name):
    import rpm # this is faster then calling 'rpm'-binary externally.
    ts = rpm.TransactionSet()
    packages = ts.dbMatch()

    name_regex = re.escape(name).replace("\\?", ".").replace("\\*", ".*") + '$'
    regex = re.compile(name_regex)

    for package in packages:
      if regex.match(package['name']):
        return True
    return False

修改后

python 复制代码
def rpm_check_package_available(self, name):
    try:
        result = subprocess.run(
            ['rpm', '-q', name],
            stdout=subprocess.PIPE,
            stderr=subprocess.PIPE,
            check=False
        )
        return result.returncode == 0
    except Exception:
        return False

或者

python 复制代码
def rpm_check_package_available(self, name):
    import rpm # this is faster then calling 'rpm'-binary externally.
    ts = rpm.TransactionSet()
    packages = ts.dbMatch()

    name_regex = re.escape(name).replace("\\?", ".").replace("\\*", ".*") + '$'
    regex = re.compile(name_regex)

    for package in packages:
      if regex.match(package['name']):
        return True
    return False
   # command = ['rpm', '-qa']
   # process = subprocess.Popen(command, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
   # output, error = process.communicate()

   # if process.returncode == 0:
   #     packages = output.decode().splitlines()
   # else:
   #     return False

   # name_regex = re.escape(name).replace("\\?", ".").replace("\\*", ".*")
   # regex = re.compile(name_regex)

   # for package in packages:
   #     if regex.match(package):
   #         return True
   # return False

更多问题参考

征服国产生态!Ambari 完美适配银河麒麟 V20 实战指南:打通大数据管理"最后一公里"

相关推荐
科技侃谈几秒前
2026年杭州医疗大模型wisediag相关产品梳理与行业观察
大数据·人工智能
SelectDB技术团队26 分钟前
AB 实验指标计算场景:Apache Doris / SelectDB 的技术能力、选型对比与实践
大数据·数据库·数据分析·apache·用户运营·apache doris·selectdb
湘美书院--湘美谈教育43 分钟前
湘美谈教育湘美书院绥宁文学系列:AI时代的小说,雪峰号
大数据·人工智能·深度学习·机器学习·生活
汤姆yu1 小时前
面向具身智能的物理视频模拟器:蚂蚁灵波LingBot-Video开源模型全解析
java·大数据·人工智能·gpt·开源·大模型·音视频
一枚NPC1 小时前
Timbal AI 音乐创作与商业应用实战指南
大数据·人工智能·机器学习
Daorigin_com1 小时前
合同管理进入“自动驾驶”时代:道本×DeepSeek的三重穿透
大数据·人工智能·深度学习·数据挖掘·数据库开发·业界资讯·改行学it
阿标在干嘛1 小时前
政策快报平台的全文检索:从ES到向量检索的演进
大数据·elasticsearch·全文检索
泰和英杰1 小时前
2026华为数字能源实操考点迭代:数据中心与光伏储能通用排错方法论
大数据
QiLinkOS1 小时前
企业知识产权战略的“X光”透视报告:从“外包代工”到“法律军火库”的终极分野
大数据·人工智能·dna双螺旋归因模型·技术专利避坑指南·qilink·技术专利风险情报·技术专利洞察
IT新视界11 小时前
大数据开发工具-Transwarp Data Studio
大数据