Перейти к основному содержимому

Datalake FAQ

FAQ по озеру данных

В этом разделе описаны часто задаваемые вопросы (FAQ) об озере данных и предоставлены решения этих проблем. Некоторые метрики, упомянутые в этом разделе, можно получить только из профилей SQL-запросов. Чтобы получить профили SQL-запросов, необходимо указать set enable_profile=true.

Медленные DataNodes HDFS

Описание проблемы

При доступе к файлам данных, хранящимся в вашем кластере HDFS, вы можете обнаружить огромную разницу между значениями метрик __MAX_OF_FSIOTime и __MIN_OF_FSIOTime из профилей выполняемых SQL-запросов. Это указывает на то, что некоторые DataNodes в кластере HDFS работают медленно. Следующий пример представляет типичный профиль, который указывает на проблему медленного DataNode HDFS:

 - InputStream: 0
- AppIOBytesRead: 22.72 GB
- __MAX_OF_AppIOBytesRead: 187.99 MB
- __MIN_OF_AppIOBytesRead: 64.00 KB
- AppIOCounter: 964.862K (964862)
- __MAX_OF_AppIOCounter: 7.795K (7795)
- __MIN_OF_AppIOCounter: 1
- AppIOTime: 1s372ms
- __MAX_OF_AppIOTime: 4s358ms
- __MIN_OF_AppIOTime: 1.539ms
- FSBytesRead: 15.40 GB
- __MAX_OF_FSBytesRead: 127.41 MB
- __MIN_OF_FSBytesRead: 64.00 KB
- FSIOCounter: 1.637K (1637)
- __MAX_OF_FSIOCounter: 12
- __MIN_OF_FSIOCounter: 1
- FSIOTime: 9s357ms
- __MAX_OF_FSIOTime: 60s335ms
- __MIN_OF_FSIOTime: 1.536ms

Решение

Вы можете использовать одно из следующих решений для устранения этой проблемы:

  • [Рекомендуется] Включите функцию Data Cache, которая устраняет влияние медленных DataNodes HDFS на запросы путем автоматического кэширования данных из внешних систем хранения в BE или CN вашего кластера Selena.
  • [Рекомендуется] Сократите время ожидания между клиентом HDFS и DataNode. Это решение подходит, когда Data Cache не может помочь решить проблему медленного DataNode HDFS.
  • Включите функцию Hedged Read. При включении этой функции, если чтение из блока происходит медленно, Selena запускает новое чтение, которое выполняется параллельно с исходным чтением, для чтения из другой реплики блока. Когда одно из двух чтений возвращается, другое чтение отменяется. Функция Hedged Read может помочь ускорить чтение, но она также значительно увеличивает потребление памяти кучи на виртуальных машинах Java (JVM). Поэтому, если ваши физические машины предоставляют небольшую емкость памяти, мы рекомендуем не включать функцию Hedged Read.

[Рекомендуется] Data Cache

См. Data Cache.

[Рекомендуется] Сокращение времени ожидания между клиентом HDFS и DataNode

Настройте свойство dfs.client.socket-timeout в файле hdfs-site.xml, чтобы сократить время ожидания между клиентом HDFS и DataNode. (Время ожидания по умолчанию составляет 60 секунд, что довольно долго.) Таким образом, когда Selena сталкивается с медленным DataNode, запрос на подключение от него может истечь в течение очень короткого периода времени, а затем быть перенаправлен на другой DataNode. Следующий пример устанавливает 5-секундное время ожидания:

<configuration>
<property>
<name>dfs.client.socket-timeout</name>
<value>5000</value>
</property>
</configuration>

Hedged Read

Используйте следующие параметры (поддерживаются начиная с версии 1.5.0) в конфигурационном файле BE или CN be.conf для включения и настройки функции Hedged Read в вашем кластере HDFS.

ПараметрЗначение по умолчаниюОписание
hdfs_client_enable_hedged_readfalseУказывает, следует ли включить функцию hedged read.
hdfs_client_hedged_read_threadpool_size128Указывает размер пула потоков Hedged Read на вашем клиенте HDFS. Размер пула потоков ограничивает количество потоков, выделенных для выполнения hedged reads в вашем клиенте HDFS. Этот параметр эквивалентен параметру dfs.client.hedged.read.threadpool.size в файле hdfs-site.xml вашего кластера HDFS.
hdfs_client_hedged_read_threshold_millis2500Указывает количество миллисекунд ожидания перед запуском hedged read. Например, вы установили этот параметр в 30. В этой ситуации, если чтение из блока не вернулось в течение 30 миллисекунд, ваш клиент HDFS немедленно запускает hedged read для другой реплики блока. Этот параметр эквивалентен параметру dfs.client.hedged.read.threshold.millis в файле hdfs-site.xml вашего кластера HDFS.

Если значение любой из следующих метрик в профилях ваших запросов превышает 0, функция Hedged Read включена.

МетрикаОписание
TotalHedgedReadOpsКоличество запущенных hedged reads.
TotalHedgedReadOpsInCurThreadКоличество раз, когда Selena пришлось запускать hedged read в текущем потоке вместо нового потока, потому что пул потоков Hedged Read достиг максимального размера, указанного параметром hdfs_client_hedged_read_threadpool_size.
TotalHedgedReadOpsWinКоличество раз, когда hedged read опередил свое исходное чтение.