Управление пользователями и группами Ambari для пользовательских сервисов Ambari

Я уже довольно давно работаю с Custom Ambari Services. Мне удалось установить несколько различных пользовательских компонентов. Я создал несколько пакетов управления и считаю, что имею большой опыт работы с сторонними сервисами в Ambari.

Всякий раз, когда я устанавливаю настраиваемую службу, я получаю пользовательское KeyError, например Elasticsearch:

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 для отключения управления пользователями / группами:

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? Удовлетворение исходной ошибки кажется единственным готовым решением.

Я сам попытался найти объект значения ключа, я также попытался создать группы пользователей, я даже попытался изменить код агента / сервера, выполняющий установку. Далее я попробую еще раз, но подумал, может быть, это будет хороший первый пост для SO.


person steven-matison    schedule 05.06.2020    source источник


Ответы (1)


Застрял с той же ошибкой на несколько часов, вот результат расследования.

Прежде всего, нам нужно знать, что у Ambari есть одна основная группа для всех сервисов в стеке. Во-вторых, создание пользователя довольно скрыто, с одного взгляда вы никогда не угадаете, когда и где будет создание и откуда появятся параметры.

И напоследок, как мы настраиваем params.user_to_groups_dict[user]?

«Основная группа» установлена ​​в <stack_name>/<stack_version>/configuration/cluster-env.xml, для меня это было HDP/3.0/configuration/cluster-env.xml:

  <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>

Этот параметр будет использоваться повсюду в службах для утверждения группы, например, у zookeeper есть env.xml, например:

  <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-env в user_group. Это то соединение, которое мы ищем.

Ответ - настройте пользовательский параметр, например zookeeper user.

Мастер выполняет поиск в стеке и находит нужных пользователей / группы для управления службами, которые вы выбрали с помощью мастера.

Карта, содержащая params.user_to_groups_dict, будет создана во время выполнения мастера кластера и avalialbe в /var/lib/ambari-agent/data/command-xy.json:

    "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\"]"
    },
person ag0n1k    schedule 30.11.2020
comment
Отличная информация, спасибо за то, что поделились, мне нужно потратить некоторое время на исходный пакет управления (используемый для добавления настраиваемой службы / пользователя) и посмотреть, смогу ли я настроить создание пользователя / группы в соответствии с тем, чем вы поделились. Не уверен, сколько времени это займет, поскольку я работаю в другом качестве. Обновит / приму в то время. - person steven-matison; 03.12.2020