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 小时前
DashBoard安装使用
大数据·开发语言·kubernetes
丸卜6 小时前
Hadoop复习(九)
大数据·hadoop·分布式
IT成长日记7 小时前
Elasticsearch集群最大分片数设置详解:从问题到解决方案
大数据·elasticsearch·最大分片数·shards
HUTAC7 小时前
MapReduce(期末速成版)
大数据·mapreduce
Elastic 中国社区官方博客8 小时前
连接关键点:使用 ES|QL 联接实现更丰富的可观测性洞察
大数据·数据库·sql·elasticsearch·搜索引擎·全文检索
蚂蚁数据AntData8 小时前
⼤模型驱动的DeepInsight Copilot在蚂蚁的技术实践
大数据·人工智能·数据分析·copilot·数据库架构
TDengine (老段)10 小时前
TDengine 的 AI 应用实战——运维异常检测
大数据·数据库·人工智能·物联网·时序数据库·tdengine·涛思数据
MyikJ11 小时前
Java面试实战:从Spring Boot到微服务与AI的全栈挑战
java·大数据·spring boot·微服务·ai·面试·架构设计
AI设计小站12 小时前
AI 赋能名片设计:告别模板化,创造独特视觉风格
大数据·人工智能·设计规范
fanTuanye12 小时前
JavaWeb是什么?总结一下JavaWeb的体系
java·大数据·javaweb·基础·体系