Логирование в 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 имеет отдельные файлы конфигурации логирования для хранилища метаданных и для клиентов.
# 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
# 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:
-
На странице Clusters выберите нужный кластер.
-
Перейдите на вкладку Services и нажмите на Sqoop.
-
Включите опцию Show Advanced и найдите поле log4j_properties template или log4j-cli.properties template.
-
Внесите необходимые изменения в файл по умолчанию.
-
Подтвердите изменения в конфигурации, нажав Save.
-
В раскрывающемся меню Actions выберите Restart, убедитесь, что для параметра Apply configs from ADCM установлено значение
true
, и нажмите Run.
Уровни логирования
YARN использует для создания логов библиотеку Log4j, которая поддерживает следующие уровни логирования (от наименее информативного к наиболее информативному):
-
FATAL
— сообщает, что операция не может быть выполнена и будет завершена. -
ERROR
— уведомляет, что программа работает неправильно или прекратила работу. -
WARN
— предупреждает о потенциальных проблемах. Это означает, что программа работает не по стандартному сценарию и в будущем могут возникнуть проблемы. -
INFO
— передает информацию о жизненном цикле или состоянии программы. -
DEBUG
— выводит отладочную информацию о внутренних состояниях программы. -
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
добавляют к найденной строке с ошибкой одну строчку до нее и три строчки после.