Часто задаваемые вопросы о Data Lakehouse
Проблемы с сертификатами
-
При выполнении запроса возникает ошибка
curl 77: Problem with the SSL CA cert.. Это означает, что системный сертификат устарел и его необходимо обновить локально.- Последний сертификат CA можно скачать с
https://curl.se/docs/caextract.html. - Поместите скачанный
cacert-xxx.pemв каталог/etc/ssl/certs/, например:sudo cp cacert-xxx.pem /etc/ssl/certs/ca-certificates.crt.
- Последний сертификат CA можно скачать с
-
При выполнении запроса возникает ошибка:
ERROR 1105 (HY000): errCode = 2, detailMessage = (x.x.x.x)[CANCELLED][INTERNAL_ERROR]error setting certificate verify locations: CAfile: /etc/ssl/certs/ca-certificates.crt CApath: none.yum install -y ca-certificates
ln -s /etc/pki/ca-trust/extracted/openssl/ca-bundle.trust.crt /etc/ssl/certs/ca-certificates.crt
Kerberos
-
При подключении к Hive Metastore с аутентификацией Kerberos возникает ошибка
GSS initiate failed.Обычно это связано с неверными данными аутентификации Kerberos. Для устранения проблемы выполните следующие действия:
-
В версиях до 1.2.1 в библиотеке libhdfs3, от которой зависит Doris, не была включена поддержка gsasl. Обновитесь до версии 1.2.2 или более поздней.
-
Убедитесь, что для каждого компонента заданы правильные keytab и principal, а файл keytab существует на всех узлах FE и BE.
hadoop.kerberos.keytab/hadoop.kerberos.principal: используются для доступа к Hadoop HDFS; укажите соответствующие значения для HDFS.hive.metastore.kerberos.principal: используется для Hive Metastore.
-
Попробуйте заменить IP-адрес в principal доменным именем (не используйте подстановку
_HOSTпо умолчанию). -
Убедитесь, что файл
/etc/krb5.confсуществует на всех узлах FE и BE.
-
-
При подключении к базе данных Hive через Hive Catalog возникает ошибка:
RemoteException: SIMPLE authentication is not enabled. Available:[TOKEN, KERBEROS].Если ошибка возникает при выполнении запроса, а
show databasesиshow tablesработают без проблем, выполните следующие два действия:- Поместите
core-site.xmlиhdfs-site.xmlв каталогиfe/confиbe/conf. - Выполните команду Kerberos
kinitна узле BE, перезапустите BE, затем повторите запрос.
- Поместите
-
Если при запросе к таблице, для которой настроен Kerberos, возникает ошибка
GSSException: No valid credentials provided (Mechanism level: Failed to find any Kerberos Ticket), проблему обычно решает перезапуск узлов FE и BE.- Перед перезапуском всех узлов добавьте
-Djavax.security.auth.useSubjectCredsOnly=falseв параметр JAVA_OPTS в"${DORIS_HOME}/be/conf/be.conf", чтобы получать сведения об учётных данных JAAS через базовый механизм, а не через приложение. - Решения распространённых ошибок JAAS приведены в разделе Устранение неполадок JAAS.
- Перед перезапуском всех узлов добавьте
-
Для устранения ошибки
Unable to obtain password from userпри настройке Kerberos в Catalog:- Убедитесь, что используемый principal присутствует в выводе klist, выполнив
klist -kt your.keytab. - Проверьте, не пропущены ли в конфигурации Catalog такие параметры, как
yarn.resourcemanager.principal. - Если эти проверки не выявили проблем, причиной может быть то, что версия JDK, установленная системным менеджером пакетов, не поддерживает некоторые алгоритмы шифрования. Попробуйте установить JDK вручную и задать переменную окружения
JAVA_HOME. - Kerberos обычно использует шифрование AES-256. Для Oracle JDK необходимо установить JCE. Некоторые дистрибутивы OpenJDK автоматически предоставляют JCE с неограниченной криптографической стойкостью, поэтому отдельная установка не требуется.
- Версии JCE соответствуют версиям JDK; скачайте подходящий zip-пакет JCE и распакуйте его в каталог
$JAVA_HOME/jre/lib/securityв зависимости от версии JDK:
- Убедитесь, что используемый principal присутствует в выводе klist, выполнив
-
Если при доступе к HDFS с KMS возникает ошибка
java.security.InvalidKeyException: Illegal key size, обновите JDK до версии >= Java 8 u162 или установите соответствующие JCE Unlimited Strength Jurisdiction Policy Files. -
Если при настройке Kerberos в Catalog возникает ошибка
SIMPLE authentication is not enabled. Available:[TOKEN, KERBEROS], поместите файлcore-site.xmlв каталог"${DORIS_HOME}/be/conf".Если при доступе к HDFS возникает ошибка
No common protection layer between client and server, убедитесь, что значения свойствhadoop.rpc.protectionна клиенте и сервере совпадают.<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
<property>
<name>hadoop.security.authentication</name>
<value>kerberos</value>
</property>
</configuration> -
Если при использовании Broker Load с настроенным Kerberos возникает ошибка
Cannot locate default realm.:Добавьте параметр конфигурации
-Djava.security.krb5.conf=/your-pathвJAVA_OPTSв скриптеstart_broker.shдля Broker Load. -
При использовании конфигурации Kerberos в Catalog нельзя одновременно использовать свойство
hadoop.username. -
Доступ к Kerberos с JDK 17
При запуске Doris с JDK 17 и обращении к сервисам Kerberos могут возникать проблемы из-за использования устаревших алгоритмов шифрования. Необходимо добавить свойство
allow_weak_crypto=trueвkrb5.confили обновить алгоритм шифрования в Kerberos.Подробнее см.: https://seanjmullan.org/blog/2021/09/14/jdk17#kerberos
JDBC Catalog
-
Ошибка при подключении к SQLServer через JDBC Catalog:
unable to find valid certification path to requested targetДобавьте параметр
trustServerCertificate=trueвjdbc_url. -
При подключении к базе данных MySQL через JDBC Catalog китайские иероглифы отображаются некорректно или условия запросов с китайскими иероглифами работают неправильно
Добавьте
useUnicode=true&characterEncoding=utf-8вjdbc_url.Примечание: начиная с версии 1.2.3 эти параметры добавляются автоматически при подключении к базе данных MySQL через JDBC Catalog.
-
Ошибка при подключении к базе данных MySQL через JDBC Catalog:
Establishing SSL connection without server's identity verification is not recommendedДобавьте
useSSL=trueвjdbc_url. -
При синхронизации данных MySQL с Doris через JDBC Catalog возникает ошибка синхронизации дат. Проверьте, соответствует ли версия MySQL пакету драйвера MySQL. Например, для MySQL 8 и более поздних версий требуется драйвер
com.mysql.cj.jdbc.Driver. -
Если отдельное поле слишком велико, при выполнении запроса на стороне BE возникает ошибка нехватки памяти Java (OOM).
Когда JDBC Scanner читает данные через JDBC, переменная сеанса
batch_sizeопределяет количество строк, обрабатываемых в JVM за один пакет. Если отдельное поле слишком велико, значениеfield_size * batch_size(приблизительное, с учётом статической памяти JVM и накладных расходов на копирование данных) может превысить лимит памяти JVM, что приведёт к OOM.Способы решения:
- Уменьшите значение
batch_size, выполнивset batch_size = 512;. Значение по умолчанию: 4064. - Увеличьте память JVM для BE, изменив параметр
-XmxвJAVA_OPTS. Например:-Xmx8g.
- Уменьшите значение
Hive Catalog
-
При обращении к таблице Iceberg или Hive через Hive Catalog возникает ошибка:
failed to get schemaилиStorage schema reading not supportedПопробуйте следующие способы:
-
Поместите jar-пакет среды выполнения
icebergв каталогlib/Hive. -
Задайте в
hive-site.xml:metastore.storage.schema.reader.impl=org.apache.hadoop.hive.metastore.SerDeStorageSchemaReaderПосле настройки необходимо перезапустить Hive Metastore.
-
Добавьте
"get_schema_from_table" = "true"в свойства Catalog.Этот параметр поддерживается начиная с версий 2.1.10 и 3.0.6.
-
-
Ошибка при подключении к Hive Catalog:
Caused by: java.lang.NullPointerExceptionЕсли в fe.log содержится следующая трассировка стека:
Caused by: java.lang.NullPointerException
at org.apache.hadoop.hive.ql.security.authorization.plugin.AuthorizationMetaStoreFilterHook.getFilteredObjects(AuthorizationMetaStoreFilterHook.java:78) ~[hive-exec-3.1.3-core.jar:3.1.3]
at org.apache.hadoop.hive.ql.security.authorization.plugin.AuthorizationMetaStoreFilterHook.filterDatabases(AuthorizationMetaStoreFilterHook.java:55) ~[hive-exec-3.1.3-core.jar:3.1.3]
at org.apache.hadoop.hive.metastore.HiveMetaStoreClient.getAllDatabases(HiveMetaStoreClient.java:1548) ~[doris-fe.jar:3.1.3]
at org.apache.hadoop.hive.metastore.HiveMetaStoreClient.getAllDatabases(HiveMetaStoreClient.java:1542) ~[doris-fe.jar:3.1.3]
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[?:1.8.0_181]Для устранения проблемы попробуйте добавить
"metastore.filter.hook" = "org.apache.hadoop.hive.metastore.DefaultMetaStoreFilterHookImpl"в операторCREATE CATALOG. -
Если после создания Hive Catalog команда
show tablesработает корректно, но при выполнении запроса возникаетjava.net.UnknownHostException: xxxxxДобавьте следующее в PROPERTIES для Catalog:
'fs.defaultFS' = 'hdfs://<your_nameservice_or_actually_HDFS_IP_and_port>' -
У таблиц в формате ORC в Hive 1.x схема базового файла ORC может содержать системные имена столбцов, такие как
_col0,_col1,_col2и т. д. В этом случае задайте дляhive.versionзначение 1.x.x в конфигурации Catalog, чтобы сопоставить их с именами столбцов таблицы Hive.CREATE CATALOG hive PROPERTIES (
'hive.version' = '1.x.x'
); -
Если при запросе данных таблицы через Catalog возникают ошибки Hive Metastore, такие как
Invalid method name, задайте параметрhive.version. -
Если при запросе к таблице в формате ORC FE сообщает об ошибке
Could not obtain blockилиCaused by: java.lang.NoSuchFieldError: types, это может быть связано с тем, что по умолчанию FE обращается к HDFS для получения сведений о файлах и их разбиения на части. В некоторых случаях FE не может получить доступ к HDFS. Проблему можно решить, добавив параметр"hive.exec.orc.split.strategy" = "BI". Другие варианты: HYBRID (по умолчанию) и ETL. -
В Hive значения полей партиционирования таблицы Hudi доступны, а в Doris нет. Сейчас Doris и Hive используют разные способы выполнения запросов к Hudi. Для Doris необходимо добавить поля партиционирования в структуру файла avsc таблицы Hudi. В противном случае Doris будет выполнять запрос с пустым partition_val (даже если задано
hoodie.datasource.hive_sync.partition_fields=partition_val).{
"type": "record",
"name": "record",
"fields": [{
"name": "partition_val",
"type": [
"null",
"string"
],
"doc": "Preset partition field, empty string when not partitioned",
"default": null
},
{
"name": "name",
"type": "string",
"doc": "Name"
},
{
"name": "create_time",
"type": "string",
"doc": "Creation time"
}
]
} -
Если при запросе к внешней таблице Hive возникает ошибка
java.lang.ClassNotFoundException: Class com.hadoop.compression.lzo.LzoCodec not found, найдитеhadoop-lzo-*.jarв окружении Hadoop, поместите его в каталог"${DORIS_HOME}/fe/lib/"и перезапустите FE. Начиная с версии 2.0.2 этот файл можно помещать в каталогcustom_lib/FE (если его нет, создайте вручную), чтобы избежать потери файла при обновлении кластера из-за замены каталогаlib. -
Если при создании таблицы Hive указан serde
org.apache.hadoop.hive.contrib.serde2.MultiDelimitserDe, а при обращении к таблице возникает ошибкаstorage schema reading not supported, добавьте следующую конфигурацию в файлhive-site.xmlи перезапустите сервис HMS:<property>
<name>metastore.storage.schema.reader.impl</name>
<value>org.apache.hadoop.hive.metastore.SerDeStorageSchemaReader</value>
</property> -
Ошибка:
java.security.InvalidAlgorithmParameterException: the trustAnchors parameter must be non-empty. Полное сообщение об ошибке в журнале FE выглядит следующим образом:org.apache.doris.common.UserException: errCode = 2, detailMessage = S3 list path failed. path=s3://bucket/part-*,msg=errors while get file status listStatus on s3://bucket: com.amazonaws.SdkClientException: Unable to execute HTTP request: Unexpected error: java.security.InvalidAlgorithmParameterException: the trustAnchors parameter must be non-empty: Unable to execute HTTP request: Unexpected error: java.security.InvalidAlgorithmParameterException: the trustAnchors parameter must be non-empty
org.apache.doris.common.UserException: errCode = 2, detailMessage = S3 list path exception. path=s3://bucket/part-*, err: errCode = 2, detailMessage = S3 list path failed. path=s3://bucket/part-*,msg=errors while get file status listStatus on s3://bucket: com.amazonaws.SdkClientException: Unable to execute HTTP request: Unexpected error: java.security.InvalidAlgorithmParameterException: the trustAnchors parameter must be non-empty: Unable to execute HTTP request: Unexpected error: java.security.InvalidAlgorithmParameterException: the trustAnchors parameter must be non-empty
org.apache.hadoop.fs.s3a.AWSClientIOException: listStatus on s3://bucket: com.amazonaws.SdkClientException: Unable to execute HTTP request: Unexpected error: java.security.InvalidAlgorithmParameterException: the trustAnchors parameter must be non-empty: Unable to execute HTTP request: Unexpected error: java.security.InvalidAlgorithmParameterException: the trustAnchors parameter must be non-empty
Caused by: com.amazonaws.SdkClientException: Unable to execute HTTP request: Unexpected error: java.security.InvalidAlgorithmParameterException: the trustAnchors parameter must be non-empty
Caused by: javax.net.ssl.SSLException: Unexpected error: java.security.InvalidAlgorithmParameterException: the trustAnchors parameter must be non-empty
Caused by: java.lang.RuntimeException: Unexpected error: java.security.InvalidAlgorithmParameterException: the trustAnchors parameter must be non-empty
Caused by: java.security.InvalidAlgorithmParameterException: the trustAnchors parameter must be non-emptyПопробуйте обновить сертификат CA на узле FE с помощью
update-ca-trust(CentOS/RockyLinux), затем перезапустите процесс FE. -
Ошибка BE:
java.lang.InternalError. Если вbe.INFOпоявляется ошибка, похожая на следующую:W20240506 15:19:57.553396 266457 jni-util.cpp:259] java.lang.InternalError
at org.apache.hadoop.io.compress.zlib.ZlibDecompressor.init(Native Method)
at org.apache.hadoop.io.compress.zlib.ZlibDecompressor.<init>(ZlibDecompressor.java:114)
at org.apache.hadoop.io.compress.GzipCodec$GzipZlibDecompressor.<init>(GzipCodec.java:229)
at org.apache.hadoop.io.compress.GzipCodec.createDecompressor(GzipCodec.java:188)
at org.apache.hadoop.io.compress.CodecPool.getDecompressor(CodecPool.java:183)
at org.apache.parquet.hadoop.CodecFactory$HeapBytesDecompressor.<init>(CodecFactory.java:99)
at org.apache.parquet.hadoop.CodecFactory.createDecompressor(CodecFactory.java:223)
at org.apache.parquet.hadoop.CodecFactory.getDecompressor(CodecFactory.java:212)
at org.apache.parquet.hadoop.CodecFactory.getDecompressor(CodecFactory.java:43)Причина в конфликте встроенной в Doris библиотеки
libz.aс системнойlibz.so. Для устранения проблемы сначала выполнитеexport LD_LIBRARY_PATH=/path/to/be/lib:$LD_LIBRARY_PATH, затем перезапустите процесс BE. -
При вставке данных в Hive возникает ошибка
HiveAccessControlException Permission denied: user [user_a] does not have [UPDATE] privilege on [database/table].После вставки данных необходимо обновить соответствующую статистику, а для этой операции требуется привилегия ALTER. Поэтому предоставьте этому пользователю привилегию ALTER в Ranger.
-
При запросе к файлам ORC возникает ошибка вида
Orc row reader nextBatch failed. reason = Can't open /usr/share/zoneinfo/+08:00.Сначала проверьте настройку
time_zoneтекущего сеанса. Рекомендуется использовать название часового пояса, привязанное к региону, напримерAsia/Shanghai.Если часовой пояс сеанса уже установлен в
Asia/Shanghai, но запрос по-прежнему завершается ошибкой, значит, файл ORC был создан с часовым поясом+08:00. Этот часовой пояс необходим при разборе нижнего колонтитула ORC во время выполнения запроса. В таком случае можно попробовать создать в каталоге/usr/share/zoneinfo/символическую ссылку, указывающую с+08:00на эквивалентный часовой пояс. -
При запросе к таблице Hive, использующей JSON SerDe (например,
org.openx.data.jsonserde.JsonSerDe), возникает ошибка:failed to get schemaилиStorage schema reading not supportedКогда таблица Hive хранит данные в формате JSON (для ROW FORMAT SERDE задано
org.openx.data.jsonserde.JsonSerDe), Hive Metastore может не получить информацию о схеме таблицы стандартным способом. В результате при запросе из Doris возникает следующая ошибка:errCode = 2, detailMessage = failed to get schema for table xxx in db xxx.
reason: org.apache.hadoop.hive.metastore.api.MetaException:
java.lang.UnsupportedOperationException: Storage schema reading not supportedЧтобы решить проблему, добавьте
"get_schema_from_table" = "true"в свойства Catalog. Этот параметр указывает Doris получать схему непосредственно из метаданных таблицы Hive, а не через Schema Reader базового хранилища.CREATE CATALOG hive PROPERTIES (
'type' = 'hms',
'hive.metastore.uris' = 'thrift://x.x.x.x:9083',
'get_schema_from_table' = 'true'
);Этот параметр поддерживается начиная с версий 2.1.10 и 3.0.6.
-
При запросах к таблицам Hive Catalog планирование выполняется крайне медленно, возникает ошибка
nereids cost too much time, а каждое обращение к HMS стабильно занимает много времени (например, около 10 секунд).Анализ первопричины:
Обычно проблема не связана с медленным выполнением самого HMS RPC. Чаще всего причина заключается в неверной конфигурации DNS на узле Doris FE. На этапе инициализации Hive Metastore Client выполняется разрешение имён хостов. Если настроенный DNS-сервер недоступен или не отвечает, при каждом установлении нового клиентского соединения с HMS приходится ждать истечения тайм-аута разрешения DNS (обычно 10 секунд). Это существенно замедляет получение метаданных.
Характерные признаки:
- Сетевое соединение работает: порт HMS доступен, но обращение к метаданным в Doris остаётся крайне медленным.
- Постоянная задержка: задержка стабильно достигает фиксированного порога тайм-аута (например, 10 секунд).
- Обходные решения не помогают: увеличение тайм-аута клиента HMS в свойствах Catalog лишь скрывает ошибку, но не устраняет фиксированную задержку в 10 секунд при каждом подключении.
Порядок диагностики:
Выполните следующие команды на узле Doris FE, чтобы проверить DNS и разрешение имён хостов:
# Check current DNS server configuration
cat /etc/resolv.conf
# Test if the DNS server is reachable and measure resolution latency
ping <nameserver_ip>
dig @<nameserver_ip> example.com
dig @<nameserver_ip> -x <hms_ip>Способы решения (выберите один):
- Исправьте конфигурацию DNS (рекомендуется): исправьте записи
nameserverв/etc/resolv.confна узле Doris FE, чтобы служба DNS была доступна и отвечала быстро. Если DNS не требуется в вашей локальной сети, попробуйте закомментировать неработающие серверы имён. - Настройте статическое сопоставление имён хостов: добавьте сопоставления IP-адресов и имён хостов узлов HMS в
/etc/hostsна узле FE. - Приведите свойства Catalog к рекомендуемому виду: при создании Catalog настоятельно рекомендуется указывать в свойстве
hive.metastore.urisимя хоста, которое успешно разрешается, вместо IP-адреса.
-
Запросы к таблицам Hive Catalog иногда надолго зависают или сразу завершаются ошибкой тайм-аута оптимизатора
nereids cost too much time, но последующие запросы сразу же работают нормально.Описание проблемы:
Обычно это происходит после того, как Catalog некоторое время не использовался. Если при вызове HMS RPC повторно используется устаревшее соединение из пула, запрос зависает до истечения Socket Timeout (по умолчанию 10 с). Из-за внутреннего механизма повторных попыток Hive Client суммарное время ожидания может достигать 20-30 секунд при нескольких повторных попытках. Это сильно замедляет этап планирования запроса и часто вызывает ошибку тайм-аута оптимизатора Doris FE
nereids cost too much time. После удаления и повторного создания соединения производительность возвращается к норме.Анализ первопричины:
Doris поддерживает пул клиентов для каждого HMS Catalog, чтобы повторно использовать соединения. В сложных сетевых окружениях (например, между VPC, через межсетевые экраны или шлюзы NAT) сетевые устройства часто удаляют неактивные TCP-соединения без уведомления после истечения
idle timeout. Поскольку эти устройства обычно не отправляют пакеты FIN/RST для уведомления конечных узлов, Doris по-прежнему считает соединение действительным. При повторном использовании такого «зомби-соединения» необходимо дождаться полного истечения Socket Timeout, прежде чем будет обнаружен сбой и запущена повторная попытка.Порядок диагностики:
- Проверьте, есть ли между Doris FE и HMS межсетевые экраны, шлюзы NAT или балансировщики нагрузки.
- Используйте инструмент диагностики Pulse (hms-tools). Если инструмент показывает быстрое установление сетевого соединения, но после длительного простоя при выполнении RPC наблюдаются стабильные задержки, кратные 10 с, это подтверждает удаление неактивных соединений без уведомления.
Решение:
В свойствах Catalog задайте время жизни соединения немного меньше тайм-аута простоя сетевого устройства. Рекомендуется использовать встроенное свойство Hive для времени жизни сокета:
CREATE CATALOG hive_catalog PROPERTIES (
"type" = "hms",
"hive.metastore.uris" = "thrift://<hms_host>:<port>",
-- Set a value shorter than your network's idle timeout (e.g., 300s)
"hive.metastore.client.socket.lifetime" = "300s"
);Если параметр задан, HMS Client проверяет возраст соединения перед отправкой RPC. Если он превышает
lifetime, клиент заранее переподключается, что позволяет избежать длительных зависаний и тайм-аутов оптимизатора из-за устаревших соединений.
HDFS
-
Если при обращении к HDFS 3.x возникает ошибка
java.lang.VerifyError: xxx, учтите, что в версиях до 1.2.1 Doris зависит от Hadoop версии 2.8. Необходимо обновить Hadoop до 2.10.2 или обновить Doris до версии новее 1.2.2. -
Использование Hedged Read для ускорения медленного чтения из HDFS. В некоторых случаях высокая нагрузка на HDFS увеличивает время чтения реплик данных в конкретной HDFS, что снижает общую эффективность запросов. HDFS Client предоставляет функцию Hedged Read. Если запрос на чтение не возвращает результат в течение заданного времени, эта функция запускает ещё один поток для чтения тех же данных. Используется результат, полученный первым.
Примечание: эта функция может увеличить нагрузку на кластер HDFS, поэтому используйте её осмотрительно.
Включить эту функцию можно следующим образом:
CREATE CATALOG regression PROPERTIES (
'type' = 'hms',
'hive.metastore.uris' = 'thrift://172.21.16.47:7004',
'dfs.client.hedged.read.threadpool.size' = '128',
'dfs.client.hedged.read.threshold.millis' = '500'
);dfs.client.hedged.read.threadpool.sizeзадаёт количество потоков для Hedged Read, совместно используемых одним HDFS Client. Обычно узлы BE совместно используют один HDFS Client для кластера HDFS.dfs.client.hedged.read.threshold.millisзадаёт порог времени чтения в миллисекундах. Если запрос на чтение не возвращает результат до достижения этого порога, запускается Hedged Read.После включения функции соответствующие параметры можно увидеть в Query Profile:
TotalHedgedRead: количество запусков Hedged Read.HedgedReadWins: количество успешных Hedged Read (случаев, когда дополнительный запрос был запущен и вернул результат быстрее исходного).Обратите внимание: эти значения накапливаются для одного HDFS Client, а не для отдельного запроса. Один HDFS Client может повторно использоваться несколькими запросами.
-
Couldn't create proxy provider class org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProviderВ скриптах запуска FE и BE переменная окружения
HADOOP_CONF_DIRдобавляется в CLASSPATH. ЕслиHADOOP_CONF_DIRзадана неверно, например указывает на несуществующий или неправильный путь, может загрузиться не тот файлxxx-site.xml, что приведёт к чтению неверной информации.Проверьте правильность настройки
HADOOP_CONF_DIRили удалите эту переменную окружения. -
BlockMissingExcetpion: Could not obtain block: BP-XXXXXXXXX No live nodes contain current blockВозможные способы решения:
-
Проверьте состояние файла с помощью
hdfs fsck file -files -blocks -locations. -
Проверьте доступность DataNodes с помощью
telnet.В журнале ошибок может появиться следующее сообщение:
No live nodes contain current block Block locations: DatanodeInfoWithStorage[10.70.150.122:50010,DS-7bba8ffc-651c-4617-90e1-6f45f9a5f896,DISK]Сначала можно проверить доступность
10.70.150.122:50010из кластера Doris.Кроме того, в некоторых случаях кластер HDFS использует две сети с внутренними и внешними IP-адресами. В таком случае для связи нужны доменные имена, а в свойства Catalog необходимо добавить:
"dfs.client.use.datanode.hostname" = "true".Также проверьте, установлено ли для этого параметра значение true в файле
hdfs-site.xml, размещённом вfe/confиbe/conf. -
Проверьте журналы DataNode.
Если возникает следующая ошибка:
org.apache.hadoop.hdfs.server.datanode.DataNode: Failed to read expected SASL data transfer protection handshake from client at /XXX.XXX.XXX.XXX:XXXXX. Perhaps the client is running an older version of Hadoop which does not support SASL data transfer protectionэто означает, что в HDFS включено шифрование передачи данных, а на клиенте оно не включено, что и вызывает ошибку.
Используйте любой из следующих способов решения:
- Скопируйте
hdfs-site.xmlиcore-site.xmlвfe/confиbe/conf. (Рекомендуется) - В
hdfs-site.xmlнайдите соответствующий параметр конфигурацииdfs.data.transfer.protectionи задайте его в Catalog.
- Скопируйте
-
-
При запросе к таблице Hive Catalog возникает ошибка:
RPC response has a length of xxx exceeds maximum data lengthНапример:
RPC response has a length of 1213486160 exceeds maximum data lengthЗначение
1213486160в шестнадцатеричной системе равно0x48545450, что соответствует строке ASCII"HTTP". Это означает, что Doris FE попытался подключиться к порту RPC HDFS NameNode, но получил HTTP-ответ.Причина в том, что порт HDFS NameNode в Catalog или в
hdfs-site.xmlнастроен неверно: вместо порта RPC указан порт HTTP. HDFS NameNode обычно предоставляет два типа портов:- Порт RPC (по умолчанию:
8020или9000): используется для взаимодействия с клиентами HDFS (именно этот порт нужен Doris). - Порт HTTP (по умолчанию:
9870или50070): используется для веб-интерфейса NameNode.
Проверьте настройку порта HDFS NameNode в свойствах Catalog или в
hdfs-site.xmlв каталогахfe/confиbe/conf. Убедитесь, что указан порт RPC (dfs.namenode.rpc-address), а не порт HTTP (dfs.namenode.http-address). - Порт RPC (по умолчанию:
DLF Catalog
-
Если при использовании DLF Catalog во время чтения данных JindoFS на BE возникает ошибка
Invalid address, добавьте в/etc/hostsсопоставление доменного имени из журналов с IP-адресом. -
Если нет разрешения на чтение данных, укажите пользователя с необходимыми разрешениями с помощью свойства
hadoop.username. -
Метаданные в DLF Catalog должны соответствовать метаданным DLF. При управлении метаданными через DLF новые импортированные партиции Hive могут не синхронизироваться с DLF, что приводит к расхождениям между метаданными DLF и Hive. Чтобы решить проблему, убедитесь, что DLF полностью синхронизирует метаданные Hive.
Другие проблемы
-
После сопоставления типа Binary с типом Doris результаты запроса содержат нечитаемые символы
В Doris нет встроенной поддержки типа Binary, поэтому типы Binary из различных озёр данных и баз данных обычно сопоставляются с типом String. Тип String может отображать только печатные символы. Если необходимо запросить содержимое данных Binary, используйте функцию
TO_BASE64(), чтобы преобразовать их в кодировку Base64 перед дальнейшей обработкой. -
Анализ файлов Parquet
При запросах к файлам Parquet иногда требуется проверить их метаданные, чтобы выявить проблему или проанализировать производительность. Это связано с возможными различиями в формате файлов Parquet, созданных разными системами, например в количестве RowGroups, значениях индексов и т. д. Для более удобного анализа файлов Parquet доступен следующий инструмент:
-
Скачайте и распакуйте Apache Parquet Cli 1.14.0.
-
Скачайте файл Parquet для анализа на локальный компьютер; предположим, что он находится по пути
/path/to/file.parquet. -
Используйте следующую команду для анализа метаданных файла Parquet:
./parquet-tools meta /path/to/file.parquet -
Дополнительные возможности описаны в документации Apache Parquet Cli.
-
Инструменты диагностики
Pulse
Pulse представляет собой легковесный набор инструментов проверки соединений для диагностики инфраструктурных зависимостей в средах озёр данных. Он включает специализированные инструменты, которые помогают быстро выявлять проблемы окружения при доступе к внешним таблицам.
Pulse состоит из следующих основных наборов инструментов:
-
Инструмент диагностики HMS (
hms-tools):- Разработан специально для устранения неполадок Hive Metastore (HMS).
- Поддерживает проверки работоспособности, тесты ping, получение метаданных объектов и диагностику конфигурации.
- Оценка производительности: режим
benchпозволяет измерить распределение времени отклика и задержки HMS, чтобы определить, находится ли узкое место на уровне метаданных.
-
Инструмент диагностики Kerberos (
kerberos-tools):- Используется для проверки конфигураций
krb5.confв окружениях с аутентификацией Kerberos. - Поддерживает проверку доступности KDC, просмотр файлов keytab и тестирование входа в систему, чтобы убедиться, что уровень безопасности не блокирует соединение.
- Используется для проверки конфигураций
-
Инструменты диагностики объектных хранилищ (
s3-tools,gcs-tools,azure-blob-cpp):- Инструменты диагностики основных облачных хранилищ (AWS S3, Google GCS, Azure Blob Storage).
- Используются для устранения распространённых проблем доступа к внешним таблицам, таких как "Access Denied" или "Bucket Not Found".
- Поддерживают проверку источников учётных данных и идентификаторов STS, а также тестирование операций на уровне бакета.
Примеры команд (для HMS):
# Test basic HMS connectivity and latency details using hms-tools
java -jar hms-tools.jar ping --uris thrift://<hms_host>:<port> --count 3 --verbose
# Benchmark actual metadata RPC response distribution using hms-tools
java -jar hms-tools.jar bench --uris thrift://<hms_host>:<port> --rpc get_all_databases --iterations 10
Если доступ к метаданным замедляется или не удаётся установить соединение с внешней таблицей, для диагностики рекомендуется использовать соответствующий инструмент Pulse в зависимости от типа проблемы (например, ошибка аутентификации, медленное получение метаданных или недоступность хранилища). Если этап connect проходит очень быстро, но в процессе инициализации в целом наблюдаются значительные и стабильные задержки, обратитесь к приведённым выше ответам на частые вопросы и проверьте настройки DNS и разрешения имён хостов на узле FE.