Логирование в Sqoop

Обзор

Sqoop записывает выводы команд и события процессов в текстовые логи. Эта информация может быть полезна при диагностике технических проблем.

Компонент Sqoop Metastore хранит логи локально, на хосте, на котором он установлен. Логи имеют расширение .log и расположены в директории /var/log/sqoop/.

Имена файлов с логами имеют следующий формат: sqoop-metastore.log.<дата>, где <дата> — это день, месяц и год создания лога.

Поскольку некоторые команды Sqoop (такие как import или export) используют YARN, информация о выполнении этих команд будет также отображаться в логах и UI-интерфейсах YARN.

По умолчанию клиент Sqoop не создает текстовые логи, а выводит всю информацию о выполнении команд в консоль.

Настройки логирования

Настроить параметры логирования Sqoop можно в файле конфигурации log4j.properties. Он содержит общие настройки логирования, а также настройки компонентов логирования: logger и appender.

Вы можете настроить параметры ведения логирования для Sqoop через файл конфигурации log4j.properties. Sqoop имеет отдельные файлы конфигурации логирования для хранилища метаданных и для клиентов.

Файл log4j.properties для Sqoop Metastore по умолчанию
# Licensed to the Apache Software Foundation (ASF) under one
# or more contributor license agreements.  See the NOTICE file
# distributed with this work for additional information
# regarding copyright ownership.  The ASF licenses this file
# to you under the Apache License, Version 2.0 (the
# "License"); you may not use this file except in compliance
# with the License.  You may obtain a copy of the License at
#
#      http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#

org.apache.sqoop=INFO, console
org.apache.hadoop=INFO, console
org.apache.hive=INFO, console


sqoop.root.logger=INFO,console,DRFA
hive.root.logger=INFO,console,DRFA
sqoop.log.dir=/var/log/sqoop/
sqoop.log.file=sqoop-metastore.log



# Define the root logger to the system property "sqoop.root.logger".
log4j.rootLogger=${sqoop.root.logger}

#
# DRFA
# Daily Rolling File Appender
#

log4j.appender.DRFA=org.apache.log4j.DailyRollingFileAppender
log4j.appender.DRFA.File=${sqoop.log.dir}/${sqoop.log.file}
log4j.appender.DRFA.DatePattern=.yyyy-MM-dd
log4j.appender.DRFA.layout=org.apache.log4j.PatternLayout
log4j.appender.DRFA.layout.ConversionPattern=%d (%t) [%p - %l] %m%n

#
# console
# Add "console" to rootlogger above if you want to use this
#

log4j.appender.console=org.apache.log4j.ConsoleAppender
log4j.appender.console.target=System.err
log4j.appender.console.layout=org.apache.log4j.PatternLayout
log4j.appender.console.layout.ConversionPattern=%d (%t) [%p - %l] %m%n
Файл log4j.properties для Sqoop Client по умолчанию
# Licensed to the Apache Software Foundation (ASF) under one
# or more contributor license agreements.  See the NOTICE file
# distributed with this work for additional information
# regarding copyright ownership.  The ASF licenses this file
# to you under the Apache License, Version 2.0 (the
# "License"); you may not use this file except in compliance
# with the License.  You may obtain a copy of the License at
#
#      http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#

org.apache.sqoop=INFO, console
org.apache.hadoop=INFO, console
org.apache.hive=INFO, console


sqoop.root.logger=INFO,console
hive.root.logger=INFO,console


# Define the root logger to the system property "sqoop.root.logger".
log4j.rootLogger=${sqoop.root.logger}


#
# console
# Add "console" to rootlogger above if you want to use this
#

log4j.appender.console=org.apache.log4j.ConsoleAppender
log4j.appender.console.target=System.err
log4j.appender.console.layout=org.apache.log4j.PatternLayout
log4j.appender.console.layout.ConversionPattern=%d (%t) [%p - %l] %m%n

Параметры, которые вы устанавливаете для logger-компонентов, влияют на то, что Sqoop сообщает системе. Параметры, которые вы устанавливаете для appender-компонентов, влияют на то, какая информация от logger-компонентов попадает в логи.

В конфигурации логирования по умолчанию для Sqoop Client нет FileAppender-компонента, поэтому он выводит все на консоль.

Более подробно об архитектуре Log4j читайте в документации Apache Logging Services.

Чтобы изменить log4j.properties на всех хостах одновременно, используйте ADCM:

  1. На странице Clusters выберите нужный кластер.

  2. Перейдите на вкладку Services и нажмите на Sqoop.

  3. Включите опцию Show Advanced и найдите поле log4j_properties template или log4j-cli.properties template.

  4. Внесите необходимые изменения в файл по умолчанию.

  5. Подтвердите изменения в конфигурации, нажав Save.

  6. В раскрывающемся меню Actions выберите Restart, убедитесь, что для параметра Apply configs from ADCM установлено значение true, и нажмите Run.

Уровни логирования

YARN использует для создания логов библиотеку Log4j, которая поддерживает следующие уровни логирования (от наименее информативного к наиболее информативному):

  1. FATAL — сообщает, что операция не может быть выполнена и будет завершена.

  2. ERROR — уведомляет, что программа работает неправильно или прекратила работу.

  3. WARN — предупреждает о потенциальных проблемах. Это означает, что программа работает не по стандартному сценарию и в будущем могут возникнуть проблемы.

  4. INFO — передает информацию о жизненном цикле или состоянии программы.

  5. DEBUG — выводит отладочную информацию о внутренних состояниях программы.

  6. TRACE — выводит сообщения, отслеживающие ход выполнения программы.

Logger Log4j также принимает значения уровня логирования: OFF — для отключения логирования, и ALL — для разрешения всех типов сообщений.

Включение одного уровня логирования включит этот уровень и все уровни до него. Например, если установлен уровень логирования WARN, то в логи будут попадать только WARN, ERROR и FATAL, но не INFO, DEBUG и TRACE.

Вывод в консоль

Sqoop выводит информацию о процессе выполнения команд в консоль. Это может создавать большое количество записей.

Вы можете сохранять вывод команд в файлах, добавив к команде такие параметры, как 1><имя-файла>.out и 2><имя-файла>.err.

Например:

$ sqoop eval --connect jdbc:postgresql://127.0.0.1:5432/books --username <user> --password <password> --query "SELECT * FROM book LIMIT 3" 1>select.out 2>select.err

Эта команда сохраняет информацию о процессе выполнения запроса SELECT в файле select.out, а результат запроса — в файле select.err.

Пример select.out:

-------------------------------------------------------------
| id          | title                | author_id   | public_year |
-------------------------------------------------------------
| 1           | Mrs. Dalloway        | 1           | 1925   |
| 2           | To the Lighthouse    | 1           | 1927   |
| 3           | To Kill a Mockingbird | 2           | 1960   |
-------------------------------------------------------------

Пример select.err:

SLF4J: Class path contains multiple SLF4J bindings.
SLF4J: Found binding in [jar:file:/usr/lib/hadoop/lib/slf4j-reload4j-1.7.35.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: Found binding in [jar:file:/usr/lib/sqoop/lib/slf4j-reload4j-1.7.35.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: See http://www.slf4j.org/codes.html#multiple_bindings for an explanation.
SLF4J: Actual binding is of type [org.slf4j.impl.Reload4jLoggerFactory]
2024-06-18 13:52:09,940 (main) [INFO - org.apache.sqoop.Sqoop.<init>(Sqoop.java:94)] Running Sqoop version: 1.4.7_arenadata2
2024-06-18 13:52:09,997 (main) [WARN - org.apache.sqoop.tool.BaseSqoopTool.applyCredentialsOptions(BaseSqoopTool.java:1153)] Setting your password on the command-line is insecure. Consider using -P instead.
2024-06-18 13:52:10,066 (main) [INFO - org.apache.sqoop.manager.SqlManager.initOptionDefaults(SqlManager.java:98)] Using default fetchSize of 1000

Поиск по логам

Чтобы найти в логах интересующую вас информацию, например, сообщения об ошибках, подключитесь к хосту с компонентом, логи которого вы хотите просмотреть, и воспользуйтесь командой grep.

Например:

$ cat /var/log/sqoop/sqoop-metastore.log.2024-06-14 | grep -i -A3 -B1 error

Эта команда анализирует лог компонента Sqoop Metastore на предмет наличия сообщений, содержащих слово error. Опция -i позволяет игнорировать различия в регистре, а опции -A3 -B1 добавляют к найденной строке с ошибкой одну строчку до нее и три строчки после.

Нашли ошибку? Выделите текст и нажмите Ctrl+Enter чтобы сообщить о ней