更新时间:2024-11-29 GMT+08:00

配置ClickHouse对接HDFS

操作场景

本章节主要介绍安全模式ClickHouse对接安全模式HDFS组件进行文件读写。对于普通模式ClickHouse对接普通模式HDFS组件,和开源社区能力保持一致。不支持ClickHouse和HDFS处于不同模式集群的场景对接。

前提条件

  • 已安装ClickHouse客户端,例如客户端安装目录为“/opt/client”。
  • 在FusionInsight Manager已创建具有ClickHouse表权限和访问HDFS的权限的用户,例如:clickhouseuser。
  • 在对接HDFS组件之前,需要注意首先确保HDFS中有对应的目录,ClickHouse的HDFS引擎只会操作文件不会创建或删除目录。
  • 在ClickHouse访问跨集群的HDFS组件时,在HDFS所在集群通过FusionInsight Manager已创建具有访问HDFS权限的用户,例如:hdfsuser。
  • 获取HDFS集群域名,登录FusionInsight Manager页面,选择“系统 > 权限 > 域和互信”,即可查看集群域名。
  • ClickHouse不支持对接HDFS加密目录。
  • 当前系统只支持部署在x86节点的ClickHouse集群对接HDFS,部署在ARM节点的ClickHouse集群不支持对接HDFS。

集群内ClickHouse对接HDFS操作指导

  1. 登录FusionInsight Manager界面,选择“集群 > 服务 > HDFS > 配置 > 全部配置”,搜索并修改参数“hadoop.rpc.protection”的值为“Authentication”,保存并重启HDFS服务。
  2. 选择“系统 > 用户”界面,选择clickhouseuser用户,选择“更多 > 下载认证凭据”。

    首次认证,需要先修改初始密码后再下载认证凭据文件,否则会导致安全认证失败。

  3. 解压下载认证凭据,并将“user.keytab”文件改名为“clickhouse_to_hdfs.keytab”。
  4. 登录ClickHouse集群FusionInsight Manager界面,选择“集群 > 服务 > ClickHouse > 配置 > 全部配置 > ClickHouseServer(角色) > 引擎”,单击参数“hdfs.hadoop_kerberos_keytab_file”后的“上传文件”上传3的认证凭据文件。添加参数“hdfs.hadoop_kerberos_principal”的值,以“用户名@域名”的方式进行设置,例如:clickhouseuser@HADOOP.COM。

  5. 保存并重启ClickHouse服务。
  6. 以客户端安装用户,登录客户端所在节点。
  7. 执行以下命令切换到客户端安装目录。

    cd /opt/client

  8. 执行以下命令配置环境变量。

    source bigdata_env

  9. 执行以下命令认证当前用户(未启用Kerberos认证集群跳过此步骤)。

    kinit clickhouseuser

  10. 执行ClickHouse组件的客户端命令登录客户端。

    clickhouse client --host ClickHouseServer的实例业务IP --secure --port 9440

  11. 执行以下命令对接HDFS组件。

    CREATE TABLE default.hdfs_engine_table (`name` String, `value` UInt32) ENGINE = HDFS('hdfs://{namenode_ip}:{dfs.namenode.rpc.port}/tmp/secure_ck.txt', 'TSV')

    • ClickHouseServer的实例业务IP地址获取方式:

      在FusionInsight Manager首页,选择“集群 > 服务 > ClickHouse > 实例”,获取ClickHouseServer实例对应的业务IP地址。

    • namenode_ip的获取方式:

      在FusionInsight Manager首页,选择“集群 > 服务 > HDFS > 实例”,获取主NameNode业务IP。

    • dfs.namenode.rpc.port的获取方式:

      在FusionInsight Manager首页,选择“集群 > 服务 > HDFS > 配置 > 全部配置”,搜索并获取参数“dfs.namenode.rpc.port”的值。

    • 访问的HDFS文件路径:

      如果是访问的多个文件,需要指定到文件夹后边加上*号,如:hdfs://{namenode_ip}:{dfs.namenode.rpc.port}/tmp/*

      ClickHouse不支持对接HDFS加密目录。

    • 数据写入操作,请参考ClickHouse数据写入HDFS流程

跨集群ClickHouse对接HDFS操作指导

  1. 登录HDFS集群FusionInsight Manager界面,选择“集群 > 服务 > HDFS > 配置 > 全部配置”,搜索并修改参数“hadoop.rpc.protection”的值为“Authentication”,保存并重启HDFS服务。
  2. 登录ClickHouse集群FusionInsight Manager界面,选择“系统 > 权限 > 域和互信”,和HDFS集群配置集群互信,或者配置集群单边互信(只要在ClickHouse集群侧配置和HDFS集群互信即可)。
  3. 登录HDFS集群FusionInsight Manager界面,选择“系统 > 用户”界面,选择hdfsuser用户,选择“更多 > 下载认证凭据”。

    首次认证,需要先修改初始密码后再下载认证凭据文件,否则会导致安全认证失败。

  4. 解压下载认证凭据,将“user.keytab”文件改名为“clickhouse_to_hdfs.keytab”。
  5. 登录ClickHouse集群FusionInsight Manager界面,选择“集群 > 服务 > ClickHouse > 配置 > 全部配置 > ClickHouseServer(角色) > 引擎”配置界面。单击参数“hdfs.hadoop_kerberos_keytab_file”后的“上传文件”上传3的认证凭据文件。添加参数“hdfs.hadoop_kerberos_principal”的值,以“用户名@域名”的方式进行设置,例如:hdfsuser@HDFS_HADOOP.COM。
  6. 保存并重启ClickHouse服务。
  1. 以客户端安装用户,登录客户端所在节点。
  2. 执行以下命令切换到客户端安装目录。

    cd /opt/client

  3. 执行以下命令配置环境变量。

    source bigdata_env

  4. 执行以下命令认证当前用户(未启用Kerberos认证集群跳过此步骤)。

    kinit clickhouseuser

  5. 执行ClickHouse组件的客户端命令登录客户端。

    clickhouse client --host ClickHouseServer的实例业务IP --secure --port 9440

  6. 执行以下命令对接HDFS组件。

    CREATE TABLE default.hdfs_engine_table (`name` String, `value` UInt32) ENGINE = HDFS('hdfs://{namenode_ip}:{dfs.namenode.rpc.port}/tmp/secure_ck.txt', 'TSV')

    • ClickHouseServer的实例业务IP地址获取方式:

      在FusionInsight Manager首页,选择“集群 > 服务 > ClickHouse > 实例”,获取ClickHouseServer实例对应的业务IP地址。

    • namenode_ip的获取方式:

      在FusionInsight Manager首页,选择“集群 > 服务 > HDFS > 实例”,获取主NameNode业务IP。

    • dfs.namenode.rpc.port的获取方式:

      在FusionInsight Manager首页,选择“集群 > 服务 > HDFS > 配置 > 全部配置”,搜索并获取参数“dfs.namenode.rpc.port”的值。

    • 访问的HDFS文件路径:

      如果是访问的多个文件,需要指定到文件夹后边跟上*号,如:hdfs://{namenode_ip}:{dfs.namenode.rpc.port}/tmp/*

    • 数据写入操作,请参考ClickHouse数据写入HDFS流程

ClickHouse数据写入HDFS流程

将ClickHouse数据写入HDFS时,例如写入Hive表,如果Hive表内容为空则可直接写入,如果Hive表内容存在数据则不能直接写入,需要参考以下流程:

  1. 将ClickHouse表映射的Hive表备份。例如ClickHouse表为ck_tab_a,对应的Hive表为hive_tab_a,则将hive_tab_a备份到hive_tab_a_bak。
  2. 删除Hive表hive_tab_a数据文件。
  3. 在ClickHouse客户端内,插入数据至ClickHouse表ck_tab_a。
  4. 在Hive客户端,将hive_tab_a_bak表的数据插入到Hive表hive_tab_a中。
  5. 删除备份的Hive表hive_tab_a_bak。