配置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操作指导
- 登录FusionInsight Manager界面,选择“集群 > 服务 > HDFS > 配置 > 全部配置”,搜索并修改参数“hadoop.rpc.protection”的值为“Authentication”,保存并重启HDFS服务。
- 选择“系统 > 用户”界面,选择clickhouseuser用户,选择“更多 > 下载认证凭据”。
首次认证,需要先修改初始密码后再下载认证凭据文件,否则会导致安全认证失败。
- 解压下载认证凭据,并将“user.keytab”文件改名为“clickhouse_to_hdfs.keytab”。
- 登录ClickHouse集群FusionInsight Manager界面,选择“集群 > 服务 > ClickHouse > 配置 > 全部配置 > ClickHouseServer(角色) > 引擎”,单击参数“hdfs.hadoop_kerberos_keytab_file”后的“上传文件”上传3的认证凭据文件。添加参数“hdfs.hadoop_kerberos_principal”的值,以“用户名@域名”的方式进行设置,例如:clickhouseuser@HADOOP.COM。
如果ClickHouse对接的是HDFS的HA模式,还需要执行以下操作:
- 登录Manager首页,选择“集群 > 服务 > HDFS > 实例”,单击任意实例名称,在“概览”界面的“配置文件”区域单击配置文件“hdfs-site.xml”。
- 从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>
- 在Manager界面,选择“集群 > 服务 > ClickHouse > 配置 > 全部配置 > ClickHouseServer(角色) > 引擎”配置界面,在自定义配置“clickhouse-to-hdfs-customize”中添加4.b获取的参数值,如下图所示:
- 保存并重启ClickHouse服务。
- 以客户端安装用户,登录客户端所在节点。
- 执行以下命令切换到客户端安装目录。
cd /opt/client
- 执行以下命令配置环境变量。
source bigdata_env
- 执行以下命令认证当前用户(未启用Kerberos认证集群跳过此步骤)。
kinit clickhouseuser
- 执行ClickHouse组件的客户端命令登录客户端。
clickhouse client --host ClickHouseServer的实例业务IP --secure --port 9440
- 执行以下命令对接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流程。
- nameservice的获取方式:
- 对接HDFS组件的HA模式:
跨集群ClickHouse对接HDFS操作指导
- 登录HDFS集群FusionInsight Manager界面,选择“集群 > 服务 > HDFS > 配置 > 全部配置”,搜索并修改参数“hadoop.rpc.protection”的值为“Authentication”,保存并重启HDFS服务。
- 登录ClickHouse集群FusionInsight Manager界面,选择“系统 > 权限 > 域和互信”,和HDFS集群配置集群互信,或者配置集群单边互信(只要在ClickHouse集群侧配置和HDFS集群互信即可)。
- 登录HDFS集群FusionInsight Manager界面,选择“系统 > 用户”界面,选择hdfsuser用户,选择“更多 > 下载认证凭据”。
首次认证,需要先修改初始密码后再下载认证凭据文件,否则会导致安全认证失败。
- 解压下载认证凭据,将“user.keytab”文件改名为“clickhouse_to_hdfs.keytab”。
- 登录ClickHouse集群FusionInsight Manager界面,选择“集群 > 服务 > ClickHouse > 配置 > 全部配置 > ClickHouseServer(角色) > 引擎”配置界面。单击参数“hdfs.hadoop_kerberos_keytab_file”后的“上传文件”上传3的认证凭据文件。添加参数“hdfs.hadoop_kerberos_principal”的值,以“用户名@域名”的方式进行设置,例如:hdfsuser@HDFS_HADOOP.COM。
如果ClickHouse对接的是HDFS的HA模式,还需要执行以下步骤:
- 登录HDFS集群的Manager首页,选择“集群 > 服务 > HDFS > 实例”,单击任意实例名称,在“概览”界面的“配置文件”区域单击配置文件“hdfs-site.xml”。
- 从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>
- 在ClickHouse集群的Manager界面,选择“集群 > 服务 > ClickHouse > 配置 > 全部配置 > ClickHouseServer(角色) > 引擎”配置界面,在自定义配置“clickhouse-to-hdfs-customize”中添加5.b获取的参数值,如下图所示:
- 保存并重启ClickHouse服务。
- 以客户端安装用户,登录客户端所在节点。
- 执行以下命令切换到客户端安装目录。
cd /opt/client
- 执行以下命令配置环境变量。
source bigdata_env
- 执行以下命令认证当前用户(未启用Kerberos认证集群跳过此步骤)。
kinit clickhouseuser
- 执行ClickHouse组件的客户端命令登录客户端。
clickhouse client --host ClickHouseServer的实例业务IP --secure --port 9440
ClickHouseServer的实例业务IP地址获取方式:
在FusionInsight Manager首页,选择“集群 > 服务 > ClickHouse > 实例”,获取ClickHouseServer实例对应的业务IP地址。
- 对接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流程。
- nameservice的获取方式:
- 对接HDFS组件的HA模式:
ClickHouse数据写入HDFS流程
将ClickHouse数据写入HDFS,参考以下流程。例如写入HDFS的/tmp目录下的secure_ck.txt数据文件:
- 创建HDFS引擎表:
CREATE TABLE hdfs_engine_table (name String, value UInt32) ENGINE=HDFS('hdfs://{namenode_ip}:{dfs.namenode.rpc.port}/tmp/secure_ck.txt', 'TSV')
- 写入HDFS数据文件:
INSERT INTO hdfs_engine_table VALUES ('one', 1), ('two', 2), ('three', 3)
- 查询HDFS数据文件:
SELECT * FROM hdfs_engine_table LIMIT 2
┌─name─┬─value─┐ │ one │ 1 │ │ two │ 2 │ └────┴─── ─┘
- ClickHouse通过HDFS引擎表写入数据到HDFS时,如果HDFS上数据文件不存在,会生成对应的数据文件。
- ClickHouse不支持删除修改和追加写HDFS引擎表数据,只能一次性写入数据。
- ClickHouse删除HDFS引擎表以后对HDFS上的数据文件没有影响。