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

HDFS

Not supported in ClickHouse Cloud

Этот движок обеспечивает интеграцию с 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.

Пример

  1. Предположим, у нас есть несколько файлов формата 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'
  2. Существует несколько способов создать таблицу, состоящую из всех шести файлов:

Другой способ:

Таблица состоит из всех файлов в обоих директориях (все файлы должны соответствовать формату и схеме, описанным в запросе):

примечание

Если перечисление файлов содержит диапазоны чисел с ведущими нулями, используйте конструкции с фигурными скобками для каждой цифры отдельно или используйте ?.

Пример

Создайте таблицу с файлами, названными file000, file001, ... , file999:

Конфигурация

Похожий на GraphiteMergeTree, движок HDFS поддерживает расширенную конфигурацию с использованием файла конфигурации ClickHouse. Существует два ключа конфигурации, которые вы можете использовать: глобальный (hdfs) и пользовательский (hdfs_*). Глобальная конфигурация применяется первой, а затем применяется пользовательская конфигурация (если она существует).

Параметры конфигурации

Поддерживается libhdfs3

параметрзначение по умолчанию
rpc_client_connect_tcpnodelaytrue
dfs_client_read_shortcircuittrue
output_replace-datanode-on-failuretrue
input_notretry-another-nodefalse
input_localread_mappedfiletrue
dfs_client_use_legacy_blockreader_localfalse
rpc_client_ping_interval10 * 1000
rpc_client_connect_timeout600 * 1000
rpc_client_read_timeout3600 * 1000
rpc_client_write_timeout3600 * 1000
rpc_client_socket_linger_timeout-1
rpc_client_connect_retry10
rpc_client_timeout3600 * 1000
dfs_default_replica3
input_connect_timeout600 * 1000
input_read_timeout3600 * 1000
input_write_timeout3600 * 1000
input_localread_default_buffersize1 * 1024 * 1024
dfs_prefetchsize10
input_read_getblockinfo_retry3
input_localread_blockinfo_cachesize1000
input_read_max_retry60
output_default_chunksize512
output_default_packetsize64 * 1024
output_default_write_retry10
output_connect_timeout600 * 1000
output_read_timeout3600 * 1000
output_write_timeout3600 * 1000
output_close_timeout3600 * 1000
output_packetpool_size1024
output_heartbeat_interval10 * 1000
dfs_client_failover_max_attempts15
dfs_client_read_shortcircuit_streams_cache_size256
dfs_client_socketcache_expiryMsec3000
dfs_client_socketcache_capacity16
dfs_default_blocksize64 * 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 - позволяет пропускать пустые файлы при чтении. Отключено по умолчанию.

Смотрите также