HDFS
Этот движок предоставляет интеграцию с Apache Hadoop экосистемой, позволяя управлять данными на HDFS через ClickHouse. Этот движок похож на движки File и URL, но предоставляет особенности, специфичные для Hadoop.
Эта функция не поддерживается инженерами ClickHouse и известна своей ненадежностью. В случае возникновения каких-либо проблем исправьте их самостоятельно и отправьте pull request.
Использование
Параметры движка
URI
- полный URI файла в HDFS. Часть путиURI
может содержать шаблоны. В этом случае таблица будет только для чтения.format
- указывает один из доступных форматов файлов. Для выполнения запросовSELECT
формат должен поддерживаться для входных данных, а для выполнения запросовINSERT
– для выходных данных. Доступные форматы перечислены в разделе Форматы.- [PARTITION BY expr]
PARTITION BY
PARTITION BY
— необязательный. В большинстве случаев вам не нужен ключ партиционирования, и если он нужен, то, как правило, не требуется ключ партиционирования более детализированный, чем по месяцу. Партиционирование не ускоряет запросы (в отличие от выражения ORDER BY). Никогда не используйте слишком детализированное партиционирование. Не партиционируйте ваши данные по идентификаторам клиентов или именам (вместо этого сделайте идентификатор или имя клиента первым столбцом в выражении ORDER BY).
Для партиционирования по месяцу используйте выражение toYYYYMM(date_column)
, где date_column
- это колонка с датой типа Date. Имена партиций здесь имеют формат "YYYYMM"
.
Пример:
1. Настройте таблицу hdfs_engine_table
:
2. Заполните файл:
3. Запросите данные:
Детали реализации
-
Чтения и записи могут выполняться параллельно.
-
Не поддерживается:
- операции
ALTER
иSELECT...SAMPLE
. - Индексы.
- Репликация Zero-copy возможна, но не рекомендуется.
Репликация Zero-copy не готова к производствуРепликация Zero-copy отключена по умолчанию в ClickHouse версии 22.8 и выше. Эта функция не рекомендуется для использования в производстве.
- операции
Шаблоны в пути
Несколько компонентов пути могут иметь шаблоны. Для того чтобы файл был обработан, он должен существовать и соответствовать всему шаблону пути. Перечисление файлов определяется при SELECT
(а не в момент CREATE
).
*
— Замещает любое количество любых символов, кроме/
, включая пустую строку.?
— Замещает любой одиночный символ.{some_string,another_string,yet_another_one}
— Замещает любую из строк'some_string', 'another_string', 'yet_another_one'
.{N..M}
— Замещает любое число в диапазоне от N до M включая оба края.
Конструкции с {}
аналогичны функции табличного типа remote.
Пример
-
Предположим, у нас есть несколько файлов в формате TSV с следующими URI на HDFS:
- 'hdfs://hdfs1:9000/some_dir/some_file_1'
- 'hdfs://hdfs1:9000/some_dir/some_file_2'
- 'hdfs://hdfs1:9000/some_dir/some_file_3'
- 'hdfs://hdfs1:9000/another_dir/some_file_1'
- 'hdfs://hdfs1:9000/another_dir/some_file_2'
- 'hdfs://hdfs1:9000/another_dir/some_file_3'
-
Существует несколько способов создать таблицу, состоящую из всех шести файлов:
Другой способ:
Таблица состоит из всех файлов в обоих каталогах (все файлы должны удовлетворять формату и схеме, описанным в запросе):
Если перечисление файлов содержит числовые диапазоны с ведущими нулями, используйте конструкцию с фигурными скобками для каждой цифры отдельно или используйте ?
.
Пример
Создайте таблицу с файлами, названия которых file000
, file001
, ... , file999
:
Настройка
Аналогично GraphiteMergeTree, движок HDFS поддерживает расширённую настройку с использованием конфигурационного файла ClickHouse. Существует два ключа настройки, которые вы можете использовать: глобальный (hdfs
) и пользовательский (hdfs_*
). Глобальная конфигурация применяется первой, а затем применяется пользовательская конфигурация (если она существует).
Параметры конфигурации
Поддерживаемые libhdfs3
параметр | значение по умолчанию |
---|---|
rpc_client_connect_tcpnodelay | true |
dfs_client_read_shortcircuit | true |
output_replace-datanode-on-failure | true |
input_notretry-another-node | false |
input_localread_mappedfile | true |
dfs_client_use_legacy_blockreader_local | false |
rpc_client_ping_interval | 10 * 1000 |
rpc_client_connect_timeout | 600 * 1000 |
rpc_client_read_timeout | 3600 * 1000 |
rpc_client_write_timeout | 3600 * 1000 |
rpc_client_socket_linger_timeout | -1 |
rpc_client_connect_retry | 10 |
rpc_client_timeout | 3600 * 1000 |
dfs_default_replica | 3 |
input_connect_timeout | 600 * 1000 |
input_read_timeout | 3600 * 1000 |
input_write_timeout | 3600 * 1000 |
input_localread_default_buffersize | 1 * 1024 * 1024 |
dfs_prefetchsize | 10 |
input_read_getblockinfo_retry | 3 |
input_localread_blockinfo_cachesize | 1000 |
input_read_max_retry | 60 |
output_default_chunksize | 512 |
output_default_packetsize | 64 * 1024 |
output_default_write_retry | 10 |
output_connect_timeout | 600 * 1000 |
output_read_timeout | 3600 * 1000 |
output_write_timeout | 3600 * 1000 |
output_close_timeout | 3600 * 1000 |
output_packetpool_size | 1024 |
output_heartbeat_interval | 10 * 1000 |
dfs_client_failover_max_attempts | 15 |
dfs_client_read_shortcircuit_streams_cache_size | 256 |
dfs_client_socketcache_expiryMsec | 3000 |
dfs_client_socketcache_capacity | 16 |
dfs_default_blocksize | 64 * 1024 * 1024 |
dfs_default_uri | "hdfs://localhost:9000" |
hadoop_security_authentication | "simple" |
hadoop_security_kerberos_ticket_cache_path | "" |
dfs_client_log_severity | "INFO" |
dfs_domain_socket_path | "" |
Справка по конфигурации HDFS может объяснить некоторые параметры.
Дополнительно ClickHouse
параметр | значение по умолчанию |
---|---|
hadoop_kerberos_keytab | "" |
hadoop_kerberos_principal | "" |
libhdfs3_conf | "" |
Ограничения
hadoop_security_kerberos_ticket_cache_path
иlibhdfs3_conf
могут быть только глобальными, не пользовательскими
Поддержка Kerberos
Если параметр hadoop_security_authentication
имеет значение kerberos
, ClickHouse аутентифицируется через Kerberos. Параметры находятся здесь, и hadoop_security_kerberos_ticket_cache_path
может помочь. Обратите внимание, что из-за ограничений libhdfs3 поддерживается только старомодный подход, коммуникация с узлом данных не защищена SASL (HADOOP_SECURE_DN_USER
является надежным индикатором такого подхода безопасности). Используйте tests/integration/test_storage_kerberized_hdfs/hdfs_configs/bootstrap.sh
для справки.
Если указаны hadoop_kerberos_keytab
, hadoop_kerberos_principal
или hadoop_security_kerberos_ticket_cache_path
, будет использоваться аутентификация Kerberos. В этом случае hadoop_kerberos_keytab
и hadoop_kerberos_principal
обязательны.
Поддержка HDFS Namenode HA
libhdfs3 поддерживает HDFS namenode HA.
- Скопируйте
hdfs-site.xml
с узла HDFS в/etc/clickhouse-server/
. - Добавьте следующий фрагмент в конфигурационный файл ClickHouse:
- Затем используйте значение тега
dfs.nameservices
изhdfs-site.xml
в качестве адреса namenode в URI HDFS. Например, заменитеhdfs://appadmin@192.168.101.11:8020/abc/
наhdfs://appadmin@my_nameservice/abc/
.
Виртуальные колонки
_path
— Путь к файлу. Тип:LowCardinality(String)
._file
— Имя файла. Тип:LowCardinality(String)
._size
— Размер файла в байтах. Тип:Nullable(UInt64)
. Если размер неизвестен, значение равноNULL
._time
— Время последнего изменения файла. Тип:Nullable(DateTime)
. Если время неизвестно, значение равноNULL
.
Настройки хранилища
- hdfs_truncate_on_insert - позволяет обрезать файл перед вставкой в него. Отключено по умолчанию.
- hdfs_create_new_file_on_insert - позволяет создавать новый файл при каждой вставке, если формат имеет суффикс. Отключено по умолчанию.
- hdfs_skip_empty_files - позволяет пропускать пустые файлы при чтении. Отключено по умолчанию.
Смотрите также