Skip to main content
Skip to main content

HDFS

这个引擎提供了与 Apache Hadoop 生态系统的集成,允许通过 ClickHouse 管理 HDFS 上的数据。这个引擎类似于 文件URL 引擎,但提供了 Hadoop 的特定功能。

用法

URI 参数是 HDFS 中整个文件的 URI。 format 参数指定一种可用的文件格式。 执行 SELECT 查询时,格式必须支持输入,以及执行 INSERT 查询时,格式必须支持输出. 你可以在 格式 章节查看可用的格式。 路径部分 URI 可能包含 glob 通配符。 在这种情况下,表将是只读的。

示例:

1. 设置 hdfs_engine_table 表:

2. 填充文件:

3. 查询数据:

实施细节

  • 读取和写入可以并行
  • 不支持:
    • ALTERSELECT...SAMPLE 操作。
    • 索引。
    • 复制。

路径中的通配符

多个路径组件可以具有 globs。 对于正在处理的文件应该存在并匹配到整个路径模式。 文件列表的确定是在 SELECT 的时候进行(而不是在 CREATE 的时候)。

  • * — 替代任何数量的任何字符,除了 / 以及空字符串。
  • ? — 代替任何单个字符.
  • {some_string,another_string,yet_another_one} — 替代任何字符串 'some_string', 'another_string', 'yet_another_one'.
  • {N..M} — 替换 N 到 M 范围内的任何数字,包括两个边界的值.

{} 的结构类似于 远程 表函数。

示例

  1. 假设我们在 HDFS 上有几个 TSV 格式的文件,文件的 URI 如下:
  • ‘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’
  1. 有几种方法可以创建由所有六个文件组成的表:

另一种方式:

表由两个目录中的所有文件组成(所有文件都应满足query中描述的格式和模式):

!!! warning "警告" 如果文件列表包含带有前导零的数字范围,请单独使用带有大括号的构造或使用 ?.

示例

创建具有名为文件的表 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_socekt_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_heeartbeat_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 | "" | |hadoop_kerberos_kinit_command | kinit |

限制

  • hadoop_security_kerberos_ticket_cache_path 只能在全局配置, 不能指定用户

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_kerberos_kinit_command ,将会调用 kinit 工具.在此情况下, hadoop_kerberos_keytab 和 hadoop_kerberos_principal 参数是必须配置的. kinit 工具和 krb5 配置文件是必要的.

虚拟列

  • _path — 文件路径.
  • _file — 文件名.

另请参阅