配置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操作指导
- 登录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服务。
- 以客户端安装用户,登录客户端所在节点。
- 执行以下命令切换到客户端安装目录。
cd /opt/client
- 执行以下命令配置环境变量。
source bigdata_env
- 执行以下命令认证当前用户(未启用Kerberos认证集群跳过此步骤)。
kinit clickhouseuser
- 执行ClickHouse组件的客户端命令登录客户端。
clickhouse client --host ClickHouseServer的实例业务IP --secure --port 9440
- 执行以下命令对接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流程。
- ClickHouseServer的实例业务IP地址获取方式:
跨集群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服务。
- 以客户端安装用户,登录客户端所在节点。
- 执行以下命令切换到客户端安装目录。
cd /opt/client
- 执行以下命令配置环境变量。
source bigdata_env
- 执行以下命令认证当前用户(未启用Kerberos认证集群跳过此步骤)。
kinit clickhouseuser
- 执行ClickHouse组件的客户端命令登录客户端。
clickhouse client --host ClickHouseServer的实例业务IP --secure --port 9440
- 执行以下命令对接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流程。
- ClickHouseServer的实例业务IP地址获取方式:
ClickHouse数据写入HDFS流程
将ClickHouse数据写入HDFS时,例如写入Hive表,如果Hive表内容为空则可直接写入,如果Hive表内容存在数据则不能直接写入,需要参考以下流程:
- 将ClickHouse表映射的Hive表备份。例如ClickHouse表为ck_tab_a,对应的Hive表为hive_tab_a,则将hive_tab_a备份到hive_tab_a_bak。
- 删除Hive表hive_tab_a数据文件。
- 在ClickHouse客户端内,插入数据至ClickHouse表ck_tab_a。
- 在Hive客户端,将hive_tab_a_bak表的数据插入到Hive表hive_tab_a中。
- 删除备份的Hive表hive_tab_a_bak。