首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >自定义Ambari服务的Ambari用户和组管理

自定义Ambari服务的Ambari用户和组管理
EN

Stack Overflow用户
提问于 2020-06-05 14:29:20
回答 1查看 428关注 0票数 0

我已经与自定义安巴里服务工作了相当一段时间。我已经能够安装几个不同的自定义组件。我创建了几个管理包,并认为自己在使第三方服务在安巴里工作方面非常有经验。

每当我安装自定义服务时,我都会得到一个用户KeyError,例如Elasticsearch:

代码语言:javascript
复制
Traceback (most recent call last):
  File "/var/lib/ambari-agent/cache/stack-hooks/before-ANY/scripts/hook.py", line 38, in <module>
    BeforeAnyHook().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-ANY/scripts/hook.py", line 31, in hook
    setup_users()
  File "/var/lib/ambari-agent/cache/stack-hooks/before-ANY/scripts/shared_initialization.py", line 50, in setup_users
    groups = params.user_to_groups_dict[user],
KeyError: u'elasticsearch'
Error: Error: Unable to run the custom hook script ['/usr/bin/python', '/var/lib/ambari-agent/cache/stack-hooks/before-ANY/scripts/hook.py', 'ANY', '/var/lib/ambari-agent/data/command-15.json', '/var/lib/ambari-agent/cache/stack-hooks/before-ANY', '/var/lib/ambari-agent/data/structured-out-15.json', 'INFO', '/var/lib/ambari-agent/tmp', 'PROTOCOL_TLSv1_2', '']

已知的工作是执行python命令以关闭用户/组管理:

代码语言:javascript
复制
python /var/lib/ambari-server/resources/scripts/configs.py -u admin -p admin -n [CLUSTER_NAME] -l [CLUSTER_FQDN] -t 8080 -a set -c cluster-env -k  ignore_groupsusers_create -v true

但是,如果要再次安装本机服务,则会使群集处于不受欢迎的状态。如果我执行python命令来打开用户/组管理,那么下一个本机服务安装将再次在第三方用户密钥对象错误上失败。

是否有包含ambari管理的用户和组的列表或键值对象的数据库表?满足原始错误的似乎是唯一的交钥匙解决方案。

我尝试自己定位键值对象,我还尝试创建用户组,甚至尝试修改执行安装的代理/服务器代码。接下来,我会尝试更多,但我想,也许这将是一个很好的第一次这样做。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-11-30 21:54:33

同样的错误持续了几个小时,这是调查的结果。

首先,我们需要知道Ambari有一个用于堆栈中所有服务的主组。第二,用户的创建是非常隐藏的,您永远不会猜到创建的时间、地点和参数来自何处。

对于最后一个问题,我们是如何设置params.user_to_groups_dict[user]

“主组”设置在<stack_name>/<stack_version>/configuration/cluster-env.xml中,对我来说是HDP/3.0/configuration/cluster-env.xml

代码语言:javascript
复制
  <property>
    <name>user_group</name>
    <display-name>Hadoop Group</display-name>
    <value>hadoop</value>
    <property-type>GROUP</property-type>
    <description>Hadoop user group.</description>
    <value-attributes>
      <type>user</type>
      <overridable>false</overridable>
    </value-attributes>
    <on-ambari-upgrade add="true"/>
  </property>

该参数将在任何服务中用于声明组,例如动物园管理员有env.xml,如:

代码语言:javascript
复制
  <property>
    <name>zk_user</name>
    <display-name>ZooKeeper User</display-name>
    <value>sdp-zookeeper</value>
    <property-type>USER</property-type>
    <description>ZooKeeper User.</description>
    <value-attributes>
      <type>user</type>
      <overridable>false</overridable>
      <user-groups>
        <property>
          <type>cluster-env</type>
          <name>user_group</name>
        </property>
      </user-groups>
    </value-attributes>
    <on-ambari-upgrade add="true"/>
  </property>

value-attributes中有一个神奇的东西:user-groups,它有一个属性链接到cluster-envuser_group参数。这就是我们正在寻找的连接。

答案是设置用户参数,就像动物园管理员用户.

向导搜索堆栈,并找到正确的用户/组来管理与向导一起选择的服务。

包含params.user_to_groups_dict的映射将在运行时创建,集群向导和avalialbe位于/var/lib/ambari-agent/data/command-xy.json

代码语言:javascript
复制
    "clusterLevelParams": {
        "stack_version": "3.0",
        "not_managed_hdfs_path_list": "[\"/tmp\"]",
        "hooks_folder": "stack-hooks",
        "stack_name": "HDP",
        "group_list": "[\"sdp-hadoop\",\"users\"]",
        "user_groups": "{\"httpfs\":[\"hadoop\"],\"ambari-qa\":[\"hadoop\",\"users\"],\"hdfs\":[\"hadoop\"],\"zookeeper\":[\"hadoop\"]}",
        "cluster_name": "test",
        "dfs_type": "HDFS",
        "user_list": "[\"httpfs\",\"hdfs\",\"ambari-qa\",\"sdp-zookeeper\"]"
    },
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62217699

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档