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 репликация возможна, но не рекомендуется.
Репликация без копирования не готова к производствуРепликация без копирования отключена по умолчанию в 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 поддерживается только старый подход, коммуникации с datanode не защищены 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 - позволяет пропускать пустые файлы при чтении. Отключено по умолчанию.
Смотрите также