Apache Drill не может запустить: noclassdeffounderror - org.apache.hadoop.security.securityutilJAVA

Программисты JAVA общаются здесь
Anonymous
Apache Drill не может запустить: noclassdeffounderror - org.apache.hadoop.security.securityutil

Сообщение Anonymous »

В настоящее время я пытаюсь настроить Apache Drill с помощью поддержки плагинов S3 (Minio), но сбои буровых устройств во время запуска или использования плагинов со следующей ошибкой: < /p>
Exception in thread "main" java.lang.NoClassDefFoundError: Could not initialize class org.apache.hadoop.security.SecurityUtil
at org.apache.hadoop.security.UserGroupInformation.initialize(UserGroupInformation.java:316)
at org.apache.hadoop.security.UserGroupInformation.ensureInitialized(UserGroupInformation.java:304)
...
< /code>
Сообщение об ошибке "JSON не Thang". Также появляется прямо перед сбоем, который, по -видимому, является внутренним журналом Drill, но не связана с основной причиной. />[*]Java version: openjdk version "11.0.27" 2025-04-15
[*]Storage plugin configured for: s3a:// with MinIO backend
[*]Relevant change: I added a custom storage plugin JSON with type: file and connection s3a:// (bucket via workspace)

Что я попробовал:

[*] Проверьте, что Minio Endpoint Works (curl http: //: 9000 return 403 accessded, что ожидается без учетных данных)
Правильно < /li>
Раздел «Удаленные форматы», чтобы исключить проблемы с плагинами json < /li>
Журналы Drillbit Не дают гораздо больше информации, чем Java Stacktrace < /li>
< /ul>
подозрения /отладки: < /strong>
это связано с зависимостью или нагрузкой на класс или нагрузке. На основании ошибки класс org.apache.hadoop.security.securityutil не инициализируется. Я нашел в Интернете некоторые намеки на то, что это может быть: < /p>

Отсутствие hadoop Jar < /li>
Конфликт в классе (например, смешивание несовместимых версий Hadoop) < /li>
Проблема совместимости Java? /> Вопросы: < /strong> < /p>

Мне нужно добавить дополнительные библиотеки Hadoop вручную для тренировки (для s3a)? /> Могу ли я заставить тренировку для пропуска SecurityUtil (я не использую kerberos)? < /li>
Поможет ли использование конфигурации fs.s3a.impl конфигурации?{
"type": "file",
"enabled": true,
"connection": "s3a://",
"config": {
"fs.s3a.access.key": "...",
"fs.s3a.secret.key": "...",
"fs.s3a.endpoint": "...",
"fs.s3a.path.style.access": "true",
"fs.s3a.connection.ssl.enabled": "false"
},
"workspaces": {
"root": {
"location": "...",
"writable": false
}
}
}
< /code>
Рад предоставить больше журналов или попробовать предложенные решения. Заранее спасибо!

Подробнее здесь: https://stackoverflow.com/questions/796 ... security-s
sqrtly
Сообщения: 2
Зарегистрирован: 28.05.2025
Re: Apache Drill не может запустить: noclassdeffounderror - org.apache.hadoop.security.securityutil

Сообщение sqrtly »

Конфликт версий Hadoop
Drill поставляется со своими версиями Hadoop, но если у вас в системе есть другие версии (например, через HADOOP_HOME), это может вызвать конфликты.
Что сделать:
Убедитесь, что Drill использует свои встроенные библиотеки, а не системные. Для этого:
Проверьте, что HADOOP_HOME не установлен в переменных окружения.
Удалите любые конфликтующие JAR-файлы из $DRILL_HOME/jars/.

Если вы не используете Kerberos, можно попробовать отключить инициализацию SecurityUtil.
Что сделать:
Добавьте в $DRILL_HOME/conf/drill-env.sh:
sh
export DRILL_JAVA_OPTS="-Dhadoop.security.authentication=simple $DRILL_JAVA_OPTS"
Это заставит Hadoop использовать простую аутентификацию.
Проверка конфигурации S3
Ваша конфигурация плагина выглядит корректной, но можно добавить дополнительные параметры для надёжности:
json
{
"type": "file",
"enabled": true,
"connection": "s3a://bucket-name",
"config": {
"fs.s3a.access.key": "minio-access-key",
"fs.s3a.secret.key": "minio-secret-key",
"fs.s3a.endpoint": "http://minio-host:9000",
"fs.s3a.path.style.access": "true",
"fs.s3a.connection.ssl.enabled": "false",
"fs.s3a.impl": "org.apache.hadoop.fs.s3a.S3AFileSystem",
"fs.s3a.aws.credentials.provider": "org.apache.hadoop.fs.s3a.SimpleAWSCredentialsProvider"
}
}
Ключевые моменты:
Явно укажите fs.s3a.impl.
Убедитесь, что fs.s3a.endpoint указан без s3a:// (просто http://host:port).

Хотя Drill работает с Java 11, убедитесь, что используется OpenJDK без проблем с совместимостью. Попробуйте:
bash
java -version
Если версия Java слишком новая (например, 17), Drill может работать нестабильно.

Проверьте логи Drillbit:
Запустите Drill в debug-режиме:
bash
./drillbit.sh start --debug
Ищите ошибки загрузки классов в логах ($DRILL_HOME/log/drillbit.log).
Попробуйте обновить Drill:
Если вы используете старую версию Drill, обновитесь до актуальной (например, 1.20+).

Вернуться в «JAVA»