Приложение 1. Поднятие данных из архива в Solr#

Поднятие данных из архива через UI Platform V Audit SE (AUD)#

Для импорта необходимы следующие рабочие сервисы Hadoop:

  • YARN,

  • Apache Oozie,

  • HDFS,

  • Apache Solr,

  • Apache Spark (только при запуске восстановления данных через Spark).

Сервис поднятия данных из архива и записи в Solr требует предварительной настройки кластера.

Инструменты поднятия данных из архива Platform V Audit SE (AUD)#

Выбор инструмента для восстановления данных из архива Platform V Audit SE (AUD) производится через параметр Platform V Audit SE (AUD) oozie.wf.application.path (см. ниже).

Поднятие данных из архива через MapreduceIndexerTool#

За восстановления данных из архива через MapreduceIndexerTool отвечает Oozie workflow, расположенное в директории /audit_resources/Oozie/oozie.

MapreduceIndexerTool — утилита, включенная в дистрибутив Hadoop. Представляет собой исполняемый jar-файл (search-mr-*-job.jar) и предназначена для вычитывания данных из HDFS, формирования из них Solr-индексов и записи их в Solr.

Поднятие данных из архива через Spark#

За восстановление данных из архива через Spark отвечает Oozie workflow, расположенное в директории /audit_resources/spark.

Данный workflow запускает Spark-приложение из директории HDFS /audit_resources/spark/lib/archives-spark-application.jar. Сам jar содержит в себе логику работы приложения по восстановлению данных из архива и минимально возможное количество сторонних классов. Библиотеки классов Spark для работы приложения берутся из дистрибутива Spark и share lib oozie.

Подробно ознакомиться со Spark можно по этой ссылке.

Принцип работы Spark-приложения#

  1. Запуск процесса восстановления данных через UI.

    1. В UI Platform V Audit SE (AUD) пользователь выбирает параметры для восстановления данных (период времени, в который были записаны данные, подлежащие восстановлению, фильтры для событий аудита). Нажимает кнопку запуска.

    2. Создается новая коллекция в Solr, предназначенная для восстановленных данных. Обновляется alias Platform V Audit SE (AUD).

    3. Формируется задача для Oozie по запуску workflow.xml по пути в HDFS (конфигурация аудита "oozie.wf.application.path"). В задачу передаются заданные параметры. Происходит вызов Oozie по адресу oozie.url.

  2. Запуск Spark-приложения на стороне Oozie и YARN. Через workflow.xml происходит запуск Spark-приложения на кластере YARN. Мастером выбирается любой узел yarn. Если в результате инициализации Spark-приложения произойдет ошибка, последует повторный запуск на другом узле yarn. Если второй запуск выдаст ошибку, то восстановление данных будет считаться проваленным с соответствующим статусом FAILED в Oozie.

  3. Работа Spark-приложения.

    1. В Spark-приложения передаются параметры для восстановления из UI Platform V Audit SE (AUD) через аргументы, а также параметры для Spark через системные переменные. Происходит инициирование Spark-сессии.

    2. После инициации создается mapreduce-запрос на кластер HDFS по директориям, переданным через UI Platform V Audit SE (AUD). Формируется перечень "pointer'ов" на события аудита (сами события не загружаются в память мастер-приложения).

    3. Формируются задачи для reduce-запросов. По умолчанию, при работе с HDFS Spark выбирает размер reduce-запроса 128 МБ (по размеру файла HDFS), распределенно сериализует параметры для запроса и отправляет на узлы yarn на выполнение (т.е. каждый узел yarn обрабатывает 128 МБ данных аудита за task).

    4. В результате получения запроса на выполнения YARN создает Solr-клиента, выгружает из HDFS события аудита по заданному перечню "pointers", полученных от мастера, in-memory (т.е. без записи в жесткий диск) и отправляет их в Solr единым batch'ом (т.е. коммит в Solr происходит только после записи всей пачки событий). Если в результате выполнения таски произошла ошибка, к примеру, сбой Solr, тогда будет выброшено исключение, работа по восстановлению данных остановится, а сама job Oozie будет считаться невыполненной. Тем не менее в Solr коллекции будут присутствовать события, которые успели записаться в Solr до момента выброса исключения.

Использование директории, содержащей скрипты Platform V Audit SE (AUD) на HDFS#

Скрипты Platform V Audit SE (AUD), необходимые для импорта данных, помещаются в директорию HDFS по адресу /audit_resources/.

Данная директория автоматически обновляется при установке новой версии Platform V Audit SE (AUD) на стенд через скрипты развертывания. Соответственно, необходимо только прописать конфигурацию серверной части Platform V Audit SE (AUD) с указанием на данные директории:

  • Для запуска через MapreduceIndexerTool:

    • audit2@oozie.wf.application.path=hdfs://<host активной name node HDFS>:<port>/audit_resources/Oozie/oozie

    • audit2@mapred.resultDir=hdfs://<IP-адрес активной name node HDFS>:<port>/audit_resources/archivedSolrIdx

  • Для запуска через Spark:

    • audit2@oozie.wf.application.path=hdfs://<host активной name node HDFS>:<port>/audit_resources/spark

    • audit2@mapred.resultDir=hdfs://<IP-адрес активной name node HDFS>:<port>/audit_resources/archivedSolrIdx

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

Полный список файлов, которые должны быть в директории:

  • Для работы через MapreduceIndexerTool:

    • ${oozie.wf.application.path}>/createIndex.sh

    • ${oozie.wf.application.path}>/lib

    • ${oozie.wf.application.path}>/lib/log4j.properties

    • ${oozie.wf.application.path}>/lib/prepareDataFromAvroToSolr.conf

    • ${oozie.wf.application.path}>/lib/solr-index-creator.jar

    • ${oozie.wf.application.path}>/workflow.xml

  • Для работы через Spark:

    • ${oozie.wf.application.path}>/lib/archives-spark-application.jar

    • ${oozie.wf.application.path}>/workflow.xml

Для всех директорий и файлов, использующих импорт, выделяются права 777 в связи с тем, что к разным папкам и файлам обращаются внутренние пользователи Hadoop с разными группами и разными операциями (чтение/запись).

Внимание! Для корректной работы импорта данных из архива при больших объемах данных (в особенности!) необходимо выполнить настройку ресурсов на YARN. Это задача для администратора конкретного кластера Hadoop.

Рекомендованные настройки YARN#

  • ApplicationMaster Memory = 1 GiB

  • ApplicationMaster Java Maximum Heap Size = 768 MiB

  • Map Task Memory = 1 GiB

  • Reduce Task Memory = 1 GiB

  • Map Task Maximum Heap Size = 768 MiB

  • Reduce Task Maximum Heap Size = 768 MiB

  • Client Java Heap Size in Bytes = 768 MiB

  • Java Heap Size of JobHistory Server in Bytes = 1 GiB

  • Java Heap Size of NodeManager in Bytes = 256 MiB

  • Container Memory = 8 GiB

  • Container Virtual CPU Cores = 4

  • Java Heap Size of ResourceManager in Bytes = 1 GiB

  • Container Memory Minimum = 0 GiB

  • Container Memory Increment = 128 MiB

  • Container Memory Maximum = 2 GiB

Параметры#

fs.defaultFS#

Обязательность параметра: обязательный.

Описание:

Файловая система hdfs по умолчанию. Указывается по имени IP-адреса активной name node в hdfs.

Пример:

audit2@fs.defaultFS=hdfs://<IP-адрес активной NameNode>:<номер порта>

IP-адрес можно узнать в Ambari:

mapred.resultDir#

Обязательность параметра: обязательный.

Описание:

Полный путь в HDFS по имени IP-адреса активной name node в HDFS.

Папка для промежуточных результатов mapreduce-запросов. Рекомендуется использовать директорию в HDFS, создаваемую при обновлении стенда через скрипты развертывания по адресу /audit_resources/archivedSolrIdx.

Пример:

audit2@mapred.resultDir=hdfs://<IP-адрес активной NameNode>:<номер порта>/audit_resources/archivedSolrIdx

Описание того, как выяснить IP-адрес и порт активной NameNode, приведено выше (см. описание для параметра fs.defaultFS).

Внимание! При тестировании обнаружено, что в некоторых случаях настройка mapred.resultDir работает по имени хоста. Видимо, это связано с конфигурацией хостинга на узле, но заранее конкретно выявить то, какой вариант является правильным, пока не представляется возможным.

Решение проблем с подключением импорта проходит посредством просмотра логов YARN и логов серверной части Platform V Audit SE (AUD).

mapred.check.result.timeout.millis#

Обязательность параметра: необязательный.

Описание: Периодичность обновления результатов работы mapreduce в миллисекундах.

Значение по умолчанию: 15 000.

oozie.url#

Обязательность параметра: обязательный.

Описание: Url-путь к Oozie.

Можно узнать в конфигурации сервиса Oozie.

Пример:

audit2@oozie.url=http://<IP-адрес активной NameNode>:<номер порта>/oozie/

IP-адрес можно узнать в Ambari:

oozie.wf.application.path#

Обязательность параметра: обязательный.

Описание:

Полный путь в HDFS по имени хоста Hadoop. Указывается host-адрес NameNode HDFS, находящейся в активном состоянии. В противном случае job импорта будет падать.

Указывается директория, в которой расположены скрипты для работы архивирования и файл workflow.xml. Рекомендуется использовать директории в HDFS, создаваемые при обновлении стенда через скрипты развертывания по адресам:

  • При использовании MapreduceIndexerTool: oozie.wf.application.path=hdfs://:8020/audit_resources/Oozie/oozie

  • При использовании Spark: oozie.wf.application.path=hdfs://:8020/audit_resources/spark

Пример с использованием MapreduceIndexerTool:

audit2@oozie.wf.application.path=hdfs://<IP-адрес активной NameNode>:<номер порта>/audit_resources/Oozie/oozie

oozie.check.status.timeout.millis#

Обязательность параметра: необязательный.

Описание: Периодичность обновления статусов задач в миллисекундах. Значение по умолчанию: 10 000.

pipeline.job.max#

Обязательность параметра: необязательный.

Описание: Значение по умолчанию: 20.

pipeline.job.min#

Обязательность параметра: необязательный.

Описание: Значение по умолчанию: 5.

Просмотр результата работы задания YARN#

Ниже описан просмотр результата в случае, если задание импорта создалось и нужная задача импорта отображается в UI Platform V Audit SE (AUD) на форме «Администрирование».

Для доступа к логам YARN необходимо зайти в UI YARN через Ambari.

В UI YARN отображаются все выполненные задачи по импорту данных. Каждая задача импорта запускает одну задачу в yarn с именем oozie:launcher:T=shell:W=indexer:A=indexer… (это выполнение скрипта Platform V Audit SE (AUD) createIndex.sh) , а также две задачи с именами org.apache.solr.hadoop.MapReduceIndexerTool/MorphlineMapper (это выполнение двух mapreduce запросов в рамках выполнения скрипта createIndexer.sh).

В случае успешного выполнения импорта у данных задач YARN будет проставлен статус выполнения SUCCEEDED. Результат выполнения KILLED или FAILED хотя бы для одной задачи означает, что импорт данных выполнен некорректно.

Для диагностики проблемы необходимо зайти в задачу oozie:launcher:T=shell:W=indexer:A=indexer и посмотреть логи stderr:

Если лог выводится только в виде, приведенном на рисунке ниже, то необходимо зайти на Ambari по SSH и выполнить запрос yarn logs -containerId container_1626834573894_0001_01_000001.

Диагностика проблем#

Не удается зайти в форму «Администрирование» в UI Platform V Audit SE (AUD)#

Описание:

Не удается зайти в форму «Администрирование» в UI Platform V Audit SE (AUD).

Решение:

Убедиться, что версия Platform V Audit SE (AUD) актуальна. При необходимости, переустановить Platform V Audit SE (AUD). Убедиться с помощью сервиса Объединенный сервис авторизации (AUTZ) продукта Platform V IAM SE (IAM), что ролевая модель Platform V Audit SE (AUD) не ниже актуальной версии. Пользователю должно быть назначено право ASSupport (Сотрудник сопровождения АС) либо PlatformAdmin (Администратор платформы).

Не появляется новая задача в списке после запуска импорта#

Описание:

Не появляется новая задача в списке после запуска импорта на форме «Администрирование».

Решение:

Проблема свидетельствует об одной из следующих неисправностей:

  • не удается создать таблицу Solr;

  • нет подключения к Oozie.

Для устранения неисправности следует:

  1. Проверить состояние Solr кластера, а также значение конфигурации solr.collection.alias. Если значение конфигурации пустое, создание таблицы Solr невозможно.

  2. Убедиться в работоспособности сервиса Oozie и проверить конфигурацию oozie.url на корректность Работоспособность сервиса Oozie проверяется через Ambari:

Состояние задачи FAILED#

Состояние задачи FAILED может указывать на ошибку в работе pipeline или на неработоспособность YARN (например, если для процесса mapreduce недостаточно физической и (или) виртуальной памяти, недостаточно места на диске и т. д.).

Для устранения данной проблемы следует:

  1. Проверить размещение скриптов сервиса в директории HDFS (oozie.wf.application.path), корректность соответствующей конфигурации, корректность конфигурации mapred.resultDir.

  2. Проверить, что настройки в конфигурации заполнены корректно. Для настроек, указанных ниже, должен быть один и тот же <FQDN>:

    • mapred.resultDir=hdfs://<FQDN>:8020/audit_resources/archivedSolrIdx

    • oozie.wf.application.path=hdfs://<FQDN>:8020/audit_resources/Oozie/oozie

  3. Проверить права на папках в HDFS audit_resources/Oozie, audit_resources/archivedSolrIdx:

    • hdfs dfs -chmod 777 /audit_resources/Oozie

    • hdfs dfs -chmod 777 /audit_resources/archivedSolrIdx

    Для папки /user/yarn необходимо присвоить владельца yarn:yarn.

Состояние задачи SUSPENDED#

Проблема может указывать на то, что в Ambari в HDFS переопределена активная NameNode.

Для устранения данной проблемы следует:

  1. Остановить NameNode (Active).

  2. Проверить настройку mapred.resultDir в конфигурации модуля audit2-admin. Она должна быть такой же, как NameNode (Active) для HDFS в Ambari. Если это не так, то нужно либо исправить значение параметра и рестартовать модуль audit2-admin, либо в Ambari в HDFS переопределить NameNode (Standby) в NameNode (Active).

В импортированных события отсутствуют названия, узел пользователя, логин пользователя#

Для устранения проблемы следует проверить, что в ZooKeeper, к которому подключен Solr, отсутствует старая схема Solr /configs/audit-events/schema.xml. В случае ее наличия, необходимо удалить данную схему.

Резервирование сегментов (shards)#

  1. Проверить что в Solr имеются коллекции с необходимыми именами, например "audit-events".

  2. Открыть WebUI SOLR, перейти в пункт CLOUD -> GRAPH.

  3. Создать реплику ядра SOLR для всех shards, расположенных в резервируемом хосте, c помощью HTTP API SOLR, подставляя правильные значения IP/SHARD_NAME в ссылке http://IP:8983/solr/admin/collections?action=ADDREPLICA&collection=audit-events&shard=SHARD_NAME

  4. В отдельной вкладке открыть WebUI SOLR, перейти в пункт CLOUD -> GRAPH и дождаться, когда новые ядра получат статус "Active"/

  5. Зайти на master node в кластере (на ней установлен Ambari) по SSH и выполнить команды:

    export HADOOP_USER_NAME=hdfs
    hdfs fsck /
    
  6. По результату проверки будет предоставлен отчет о состоянии директорий на HDFS, находящихся в корне "/" файловой системы. Необходимо обратить внимание на строчку "Under-replicated blocks", она должна быть равна нулю. Если этот параметр отличается от нуля, то выполнить команды:

    • принудительно выставить всем файлам необходимый фактор репликации (его можно найти в конфигурации сервиса HDFS в Ambari):

    hdfs dfs -setrep -R <rep> /
    
    • запустить балансировку:

    hdfs balancer
    
  7. Проверить, что не осталось нереплицированных блоков.

  8. Зайти в конфигурацию сервисов Flume, в названии которых есть SOLR.

  9. Найти все три параметра «solr.nodes» и удалить из них IP-адрес резервируемого хоста.

  10. Перезагрузить сервисы Flume, в названии которых есть SOLR.

  11. Проверить, что в данных Flume нет ошибок в логах.

  12. Проверить работоспособность UI Platform V Audit SE (AUD).

Настройка SSL при импортировании#

В случае включения SSL на Solr UI Platform V Audit SE (AUD) устанавливает защищенное соединение настройками:

  • archives.solr.ssl.enabled = true

  • archives.solr.ssl.hostname.verification.enabled = true

  • archives.solr.ssl.truststore.type = JKS

  • archives.solr.ssl.truststore.location = [путь до сертификатов Solr, на сервере, где размещен YARN]

  • archives.solr.ssl.truststore.password = [пароль]

  • archives.solr.ssl.keystore.type = JKS

  • archives.solr.ssl.keystore.location = [путь до сертификатов Solr, на сервере, где размещен YARN]

  • archives.solr.ssl.keystore.password = [пароль] Сертификаты keystore и truststore для Solr необходимо разместить в папке сервера, где размещен YARN. У папки должны быть права не ниже 775.

Адреса агентов YARN можно узнать через UI Ambari:

Добавлен http-клиент для работы с Oozie на Apache httpclient и feign (по аналогии с proxy-клиент).

Добавлены новые настройки в серверную часть Platform V Audit SE (AUD):

  • stringProperty name="archives.oozie.ssl.truststore.location" required="false" defaultValue=""/

  • stringProperty name="archives.oozie.ssl.truststore.password" required="false" protected="true" defaultValue=""/

  • stringProperty name="archives.oozie.ssl.keystore.location" required="false" defaultValue=""/

  • stringProperty name="archives.oozie.ssl.keystore.password" required="false" protected="true" defaultValue=""/

  • stringProperty name="archives.oozie.ssl.key.password" required="false" protected="true" defaultValue=""/

Настройка MapReduce для поднятия из архива#

Информацию о настройке MapReduce можно найти по этой ссылке.