HDFS
Этот движок обеспечивает интеграцию с экосистемой Apache Hadoop, позволяя управлять данными на HDFS через ClickHouse. Этот движок аналогичен движкам File и URL, но предоставляет специфичные для Hadoop возможности.
Эта функция не поддерживается инженерами ClickHouse и известно, что она имеет сомнительное качество. В случае возникновения каких-либо проблем исправьте их самостоятельно и отправьте запрос на пулл.
Использование
Параметры движка
URI
- полный URI файла в HDFS. Часть путиURI
может содержать шаблоны. В этом случае таблица будет только для чтения.format
- указывает один из доступных форматов файлов. Чтобы выполнитьSELECT
запросы, формат должен поддерживаться для ввода, а чтобы выполнятьINSERT
запросы – для вывода. Доступные форматы перечислены в разделе Formats.- [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 репликация возможна, но не рекомендуется.
Репликация без копирования не готова для производстваРепликация без копирования по умолчанию отключена в версии 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 поддерживает HA для HDFS namenode.
- Скопируйте
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 - позволяет пропускать пустые файлы при чтении. Отключено по умолчанию.
Смотрите также