文档首页/ MapReduce服务 MRS/ 组件操作指南(LTS版)/ 使用ClickHouse/ ClickHouse数据导入/ 配置ClickHouse对接HDFS源文件(MRS 3.3.0-LTS及之后版本)
更新时间:2024-12-11 GMT+08:00

配置ClickHouse对接HDFS源文件(MRS 3.3.0-LTS及之后版本)

本章节适用于MRS 3.3.0-LTS及之后版本。

操作场景

本章节主要介绍安全模式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加密目录。

集群内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。

    如果ClickHouse对接的是HDFS的HA模式,还需要执行以下操作:
    1. 登录Manager首页,选择“集群 > 服务 > HDFS > 实例”,单击任意实例名称,在“概览”界面的“配置文件”区域单击配置文件“hdfs-site.xml”。
    2. 从hdfs-site.xml中获取以下配置的参数值,例如HDFS配置了两个nameservice,一个是hacluster,一个是ns1,则需要获取以下配置的参数值:

      dfs.nameservices、dfs.ha.namenodes.*、dfs.namenode.rpc-address.*.*、dfs.client.failover.proxy.provider.*(值修改为“org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider”)

      • dfs.namenode.rpc-address.*.*参数从HDFS获取到的值,如果为主机名,需要修改为该主机名对应的业务IP。
      • 配置clickhouse-to-hdfs-customize自定义参数时,涉及到nameservice必须使用小写(无论HDFS集群的nameservice是否大写),例如hdfs集群的nameservice为NS1,则在clickhouse-to-hdfs-customize中配置时应该是ns1。

      参考样例如下:

      <property> 
      <name>dfs.nameservices</name> 
      <value>hacluster,ns1</value> 
      </property> 
      <property> 
      <name>dfs.namenode.rpc-address.hacluster.13</name> 
      <value>192.168.0.1:25000</value> 
      </property> 
      <property> 
      <name>dfs.namenode.rpc-address.hacluster.14</name> 
      <value>192.168.0.2:25000</value> 
      </property> 
      <property> 
      <name>dfs.ha.namenodes.hacluster</name> 
      <value>13,14</value> 
      </property>
      <name>dfs.namenode.rpc-address.ns1.16</name> 
      <value>192.168.0.3:25000</value> 
      </property> 
      <property> 
      <name>dfs.namenode.rpc-address.ns1.17</name> 
      <value>192.168.0.4:25000</value> 
      </property> 
      <property> 
      <name>dfs.ha.namenodes.ns1</name> 
      <value>16,17</value> 
      </property> 
      <property> 
      <name>dfs.client.failover.proxy.provider.ns1</name> 
      <value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value> 
      </property>
      <property> 
      <name>dfs.client.failover.proxy.provider.hacluster</name> 
      <value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value> 
      </property>
    3. 在Manager界面,选择“集群 > 服务 > ClickHouse > 配置 > 全部配置 > ClickHouseServer(角色) > 引擎”配置界面,在自定义配置“clickhouse-to-hdfs-customize”中添加4.b获取的参数值,如下图所示:

  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

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

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

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

    • 对接HDFS组件的HA模式:

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

    • 对接HDFS组件的非HA模式:

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

      • nameservice的获取方式:

        在FusionInsight Manager首页,选择“集群 > 服务 > HDFS > 管理NameService”,获取参数“NameService”的值。此处建表语句中使用的nameservice统一使用小写(无论HDFS集群是否是小写),例如HDFS集群nameservice是NS1,则此处建表语句中应该是小写ns1。

      • 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。

    如果ClickHouse对接的是HDFS的HA模式,还需要执行以下步骤:
    1. 登录HDFS集群的Manager首页,选择“集群 > 服务 > HDFS > 实例”,单击任意实例名称,在“概览”界面的“配置文件”区域单击配置文件“hdfs-site.xml”。
    2. 从hdfs-site.xml中获取以下配置的参数值,例如HDFS配置了两个nameservice,一个是hacluster,一个是ns1,则需要获取以下配置的参数值:

      dfs.nameservices、dfs.ha.namenodes.*、dfs.namenode.rpc-address.*.*、dfs.client.failover.proxy.provider.*(值修改为“org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider”)

      • dfs.namenode.rpc-address.*.*参数从HDFS获取到的值,如果为主机名,需要修改为该主机名对应的业务IP。
      • 配置clickhouse-to-hdfs-customize自定义参数时,涉及到nameservice必须使用小写(无论HDFS集群的nameservice是否大写),例如hdfs集群的nameservice为NS1,则在clickhouse-to-hdfs-customize中配置时应该是ns1。

      参考样例如下:

      <property> 
      <name>dfs.nameservices</name> 
      <value>hacluster,ns1</value> 
      </property> 
      <property> 
      <name>dfs.namenode.rpc-address.hacluster.13</name> 
      <value>192.168.0.1:25000</value> 
      </property> 
      <property> 
      <name>dfs.namenode.rpc-address.hacluster.14</name> 
      <value>192.168.0.2:25000</value> 
      </property> 
      <property> 
      <name>dfs.ha.namenodes.hacluster</name> 
      <value>13,14</value> 
      </property>
      <name>dfs.namenode.rpc-address.ns1.16</name> 
      <value>192.168.0.3:25000</value> 
      </property> 
      <property> 
      <name>dfs.namenode.rpc-address.ns1.17</name> 
      <value>192.168.0.4:25000</value> 
      </property> 
      <property> 
      <name>dfs.ha.namenodes.ns1</name> 
      <value>16,17</value> 
      </property> 
      <property> 
      <name>dfs.client.failover.proxy.provider.ns1</name> 
      <value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value> 
      </property>
      <property> 
      <name>dfs.client.failover.proxy.provider.hacluster</name> 
      <value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value> 
      </property>
    3. 在ClickHouse集群的Manager界面,选择“集群 > 服务 > ClickHouse > 配置 > 全部配置 > ClickHouseServer(角色) > 引擎”配置界面,在自定义配置“clickhouse-to-hdfs-customize”中添加5.b获取的参数值,如下图所示:

  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

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

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

  6. 对接HDFS组件。

    • 对接HDFS组件的HA模式:

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

    • 对接HDFS组件的非HA模式:

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

      • nameservice的获取方式:

        在FusionInsight Manager首页,选择“集群 > 服务 > HDFS > 管理NameService”,获取参数“NameService”的值。此处建表语句中使用的nameservice统一使用小写(无论HDFS集群是否是小写),例如hdfs集群nameservice是NS1,则此处建表语句中应该是小写ns1。

      • 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,参考以下流程。例如写入HDFS的/tmp目录下的secure_ck.txt数据文件:

  1. 创建HDFS引擎表:

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

  2. 写入HDFS数据文件:

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

  3. 查询HDFS数据文件:

    SELECT * FROM hdfs_engine_table LIMIT 2

    ┌─name─┬─value─┐
    │ one    │     1   │
    │ two    │     2   │
    └────┴─── ─┘
  • ClickHouse通过HDFS引擎表写入数据到HDFS时,如果HDFS上数据文件不存在,会生成对应的数据文件。
  • ClickHouse不支持删除修改和追加写HDFS引擎表数据,只能一次性写入数据。
  • ClickHouse删除HDFS引擎表以后对HDFS上的数据文件没有影响。