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 实战指南:打通大数据管理"最后一公里"

相关推荐
Nautiluss34 分钟前
一起玩XVF3800麦克风阵列(八)
大数据·人工智能·嵌入式硬件·github·音频·语音识别
jqpwxt1 小时前
启点创新文旅度假区票务系统,度假区景区商户分账管理系统
大数据·旅游
玄微云1 小时前
选 AI 智能体开发公司?合肥玄微子科技有限公司的思路可参考
大数据·人工智能·科技·软件需求·门店管理
幂律智能1 小时前
幂律智能CTO张惟师受邀参加山南投融汇:AI正从「工具」进化为「虚拟专家」
大数据·人工智能
十六年开源服务商4 小时前
WordPress站内SEO优化最佳实践指南
大数据·开源
搞科研的小刘选手4 小时前
【北京师范大学主办】第三届信息化教育与计算机技术国际学术会议(IECA 2026)
大数据·计算机技术·学术会议·教育学·stem
expect7g5 小时前
Paimon源码解读 -- Compaction-4.KeyValueFileStoreWrite
大数据·flink
老蒋新思维6 小时前
创客匠人 2025 万人峰会核心:AI 驱动知识产品变现革新
大数据·人工智能·网络协议·tcp/ip·创始人ip·创客匠人·知识变现
expect7g6 小时前
Paimon源码解读 -- FULL_COMPACTION_DELTA_COMMITS
大数据·后端·flink
老蒋新思维7 小时前
创客匠人峰会新视角:AI 时代知识变现的 “组织化转型”—— 从个人 IP 到 “AI+IP” 组织的增长革命
大数据·人工智能·网络协议·tcp/ip·创始人ip·创客匠人·知识变现