Clickhouse系列之整合HDFS分布式文件系统实战

548 阅读3分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第14天,点击查看活动详情

前言

HDFS引擎允许通过ClickHouse管理HDFS上的数据,因此将Apache Hadoop生态系统的集成。此引擎类似于文件和URL引擎,但提供Hadoop特有的功能。

正文

话不多说,我们看下怎么使用吧。现在我们来看下HDFS引擎的使用和参数详解

ENGINE = HDFS(URI, format)

引擎详细参数:

  • URI—HDFS中的整个文件URI。URI的路径部分可能包含globs。在这种情况下,表格将是只读的。
  • 格式-指定一种可用的文件格式。要执行SELECT查询,输入必须支持该格式,输出必须支持INSERT查询。可用格式列在“格式”部分中。
实操案例

a) 创建HDFS表引擎

CREATE TABLE hdfs_engine_table (name String, value UInt32) ENGINE=HDFS('hdfs://hdfs1:9000/other_storage', 'TSV')

b) 插入几条测试数据

INSERT INTO hdfs_engine_table VALUES ('one', 1), ('two', 2), ('three', 3)

c) 查询表格

SELECT * FROM hdfs_engine_table LIMIT 2
实施详细信息
  • 读取和写入可以并行进行。
  • 不支持:
  1. ALTER和SELECT…SAMPLE等操作。
  2. 索引。 3.支持零拷贝复制,但不建议这样做。。
路径匹配

多路径组件可以具有全局变量。对于正在处理的文件,应该存在并与整个路径模式匹配。文件列表在SELECT期间确定(而不是在CREATE时刻)。

  • *-替换任意数量的任何字符,但不包括空字符串。
  • ? — 替换任何单个字符。
  • {some_string、another_string,yet_another_one}-替换字符串“some_string”、“another_string”、“yet_anoter_one”中的任何一个。
  • {N.M.}-替换N到M范围内的任何数字,包括两个边框。
  • 带有{}的构造类似于远程表函数。
操作案例

a) 假设我们提供了以下的文件系统路径

'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'

b) 建表方式

CREATE TABLE table_with_range (name String, value UInt32) ENGINE = HDFS('hdfs://hdfs1:9000/{some,another}_dir/some_file_{1..3}', 'TSV')

CREATE TABLE table_with_question_mark (name String, value UInt32) ENGINE = HDFS('hdfs://hdfs1:9000/{some,another}_dir/some_file_?', 'TSV')

CREATE TABLE table_with_asterisk (name String, value UInt32) ENGINE = HDFS('hdfs://hdfs1:9000/{some,another}_dir/*', 'TSV')

注意:与GraphiteMergeTree类似,HDFS引擎支持使用ClickHouse配置文件进行扩展配置。您可以使用两个配置键:全局(hdfs)和用户级(hdfs_*)。首先应用全局配置,然后应用用户级配置(如果存在)。

HDFS Namenode HA 支持

libhdfs3支持HDFS namenode HA:

  • 复制hdfs-site.xml从HDFS节点到/etc/clickhouse-server/。
  • 将以下内容添加到ClickHouse配置文件:
  <hdfs>
    <libhdfs3_conf>/etc/clickhouse-server/hdfs-site.xml</libhdfs3_conf>
  </hdfs>
  • 然后使用hdfs-site.xml文件中的dfs.nameservices标签值作为HDFS URI.例如替换 hdfs://appadmin@192.168.101.11:8020/abc/ 为 hdfs://appadmin@my_nameservice/abc/.

总结

本节主要讲解了Clickhouse集成HDFS文件系统,首先我们针对了HDFS引擎的参数讲解,然后做了一个小案例测试,其次我们又对文件系统的路径匹配做了详细说明,可以正则读取多个文件路径,最后对HA做了一个不补充,使用HA地址读取。欢迎大家留言讨论并关注!!!你们的支持是我创作前进的动力。