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

相关推荐
会飞的老朱3 小时前
医药集团数智化转型,智能综合管理平台激活集团管理新效能
大数据·人工智能·oa协同办公
AI_56787 小时前
AWS EC2新手入门:6步带你从零启动实例
大数据·数据库·人工智能·机器学习·aws
CRzkHbaXTmHw7 小时前
探索Flyback反激式开关电源的Matlab Simulink仿真之旅
大数据
七夜zippoe8 小时前
CANN Runtime任务描述序列化与持久化源码深度解码
大数据·运维·服务器·cann
盟接之桥8 小时前
盟接之桥说制造:引流品 × 利润品,全球电商平台高效产品组合策略(供讨论)
大数据·linux·服务器·网络·人工智能·制造
忆~遂愿8 小时前
ops-cv 算子库深度解析:面向视觉任务的硬件优化与数据布局(NCHW/NHWC)策略
java·大数据·linux·人工智能
忆~遂愿9 小时前
GE 引擎与算子版本控制:确保前向兼容性与图重写策略的稳定性
大数据·开发语言·docker
米羊1219 小时前
已有安全措施确认(上)
大数据·网络
人道领域10 小时前
AI抢人大战:谁在收割你的红包
大数据·人工智能·算法
qq_124987075311 小时前
基于Hadoop的信贷风险评估的数据可视化分析与预测系统的设计与实现(源码+论文+部署+安装)
大数据·人工智能·hadoop·分布式·信息可视化·毕业设计·计算机毕业设计