FAQ по Datalake
FAQ по Data Lake
Эта тема описывает некоторые часто задаваемые вопросы (FAQ) о Data Lake и предоставляет решения этих проблем. Некоторые метрики, упомянутые в этой теме, могут быть получены только из профилей SQL-запросов. Чтобы получить профили SQL-запросов, необходимо указать set enable_profile=true.
Медленные HDFS DataNode
Описание проблемы
При доступе к файлам данных, хранящимся в вашем HDFS cluster, вы можете обнаружить большую разницу между значениями метрик __MAX_OF_FSIOTime и __MIN_OF_FSIOTime в профилях выполняемых SQL-запросов. Это указывает на то, что некоторые DataNode в HDFS cluster работают медленно. Следующий пример является типичным профилем, указывающим на проблему медленных HDFS DataNode:
- 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, которая устраняет влияние медленных HDFS DataNode на запросы путём автоматического кэширования данных из внешних систем хранения на BE или CN вашего Selena cluster.
- [Рекомендуется] Сократите время ожидания между HDFS-клиентом и DataNode. Это решение подходит, когда Data Cache не помогает решить проблему медленных HDFS DataNode.
- Включите функцию Hedged Read. При включении этой функции, если чтение из блока происходит медленно, Selena запускает новое чтение, которое выполняется параллельно с исходным чтением, для чтения из другой replica блока. Как только одно из двух чтений возвращается, другое отменяется. Функция Hedged Read может помочь ускорить чтение, но она также значительно увеличивает потребление heap-памяти на виртуальных машинах 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
Используйте следующие параметры (поддерживаются с версии v1.5.2) в файле конфигурации BE или CN be.conf для включения и настройки функции Hedged Read в вашем HDFS cluster.
| Параметр | Значение по умолчанию | Описание |
|---|---|---|
| hdfs_client_enable_hedged_read | false | Указывает, следует ли включить функцию Hedged Read. |
| hdfs_client_hedged_read_threadpool_size | 128 | Указывает размер пула потоков Hedged Read на вашем HDFS-клиенте. Размер пула потоков ограничивает количество потоков, выделенных для выполнения hedged-чтений в вашем HDFS-клиенте. Этот параметр эквивалентен параметру dfs.client.hedged.read.threadpool.size в файле hdfs-site.xml вашего HDFS cluster. |
| hdfs_client_hedged_read_threshold_millis | 2500 | Указывает количество миллисекунд ожидания перед запуском hedged-чтения. Например, вы установили этот параметр в 30. В этой ситуации, если чтение из блока не вернулось в течение 30 миллисекунд, ваш HDFS-клиент немедленно запускает hedged-чтение из другой replica блока. Этот параметр эквивалентен параметру dfs.client.hedged.read.threshold.millis в файле hdfs-site.xml вашего HDFS cluster. |
Если значение любой из следующих метрик в профилях ваших запросов превышает 0, функция Hedged Read включена.
| Метрика | Описание |
|---|---|
| TotalHedgedReadOps | Количество запущенных hedged-чтений. |
| TotalHedgedReadOpsInCurThread | Количество раз, когда Selena пришлось запустить hedged-чтение в текущем потоке вместо нового потока, потому что пул потоков Hedged Read достиг максимального размера, указанного параметром hdfs_client_hedged_read_threadpool_size. |
| TotalHedgedReadOpsWin | Количество раз, когда hedged-чтение опередило исходное чтение. |