从 ClickHouse 访问 HDFS HA 集群失败,出现错误 HdfsConfigNotFound
Posted
技术标签:
【中文标题】从 ClickHouse 访问 HDFS HA 集群失败,出现错误 HdfsConfigNotFound【英文标题】:Access to HDFS HA cluster from ClickHouse failed with the error HdfsConfigNotFound 【发布时间】:2020-07-03 09:18:08 【问题描述】:我在 Clickhouse 上创建了一个基于 HDFS 的表。我的 HDFS 集群开启了 HA,但是在查询我创建的表时出错 我的DDl:
CREATE TABLE IF NOT EXISTS userItemLable ON CLUSTER cluster_1st(
label int,
length int,
duration int
)ENGINE=HDFS('hdfs://cluster1/test/','')
错误代码:
Code: 210. DB::Exception: Received from localhost:9000. DB::Exception: Unable to connect to HDFS: InvalidParameter: Cannot parse URI: hdfs://cluster1, missing port or invalid HA configuration Caused by: HdfsConfigNotFound: Config key: dfs.ha.namenodes.cluster1 not found.
我尝试将hdfs-site.xml复制到/etc/clickhouse-server文件路径,但问题没有解决。
然后我把这个文件重命名为hdfs-client.xml,结果是一样的。
最后,在config.xml中,我没有找到如何配置HDFS HA。
【问题讨论】:
github上的相关讨论How do I use an HDFS engine in HA mode #8159 据我了解 Hadoop 方面的问题,尝试按照此处所述配置它HDB query fails after NameNode HA was enabled 【参考方案1】:您可以将端口 8020 与 HDFS ip 和路径一起使用。 它对我有用。 例子 : CREATE TABLE ELM.hdfs_table (name String, value UInt32) ENGINE=HDFS('hdfs://168.11.12.103:8020/user/nirakar/clickhouse/hdfs_table', 'TSV');
INSERT INTO ELM.hdfs_table VALUES ('one', 1), ('two', 2), ('three', 4);
注意:确保您的本地服务器 /etc/hosts 应该有 HDFS 服务器的 IP 地址。
【讨论】:
【参考方案2】:首先需要将文件[hdfs-site.xml]
复制到路径[/etc/clickhouse-server/hdfs-client.xml]
其次,编辑文件[/etc/init.d/clickhouse-server]
并添加以下配置:
[export LIBHDFS3_CONF=/etc/clickhouse-server/hdfs-client.xml]
之后,文件[/etc/init.d/clickhouse-server]
应该是这样的:
sudo cat -n /etc/init.d/clickhouse-server
1 #!/bin/sh
2 ### BEGIN INIT INFO
3 # Provides: clickhouse-server
4 # Default-Start: 2 3 4 5
5 # Default-Stop: 0 1 6
6 # Required-Start: $network
7 # Required-Stop: $network
8 # Short-Description: Yandex clickhouse-server daemon
9 ### END INIT INFO
10
11 CLICKHOUSE_USER=clickhouse
12 CLICKHOUSE_GROUP=$CLICKHOUSE_USER
13 SHELL=/bin/bash
14 PROGRAM=clickhouse-server
15 CLICKHOUSE_GENERIC_PROGRAM=clickhouse
16 CLICKHOUSE_PROGRAM_ENV=""
17 EXTRACT_FROM_CONFIG=$CLICKHOUSE_GENERIC_PROGRAM-extract-from-config
18 CLICKHOUSE_CONFDIR=/etc/$PROGRAM
19 CLICKHOUSE_LOGDIR=/var/log/clickhouse-server
20 CLICKHOUSE_LOGDIR_USER=root
21 CLICKHOUSE_DATADIR=/var/lib/clickhouse
22 if [ -d "/var/lock" ]; then
23 LOCALSTATEDIR=/var/lock
24 else
25 LOCALSTATEDIR=/run/lock
26 fi
27
28 if [ ! -d "$LOCALSTATEDIR" ]; then
29 mkdir -p "$LOCALSTATEDIR"
30 fi
31
32 CLICKHOUSE_BINDIR=/usr/bin
33 CLICKHOUSE_CRONFILE=/etc/cron.d/clickhouse-server
34 CLICKHOUSE_CONFIG=$CLICKHOUSE_CONFDIR/config.xml
35 LOCKFILE=$LOCALSTATEDIR/$PROGRAM
36 CLICKHOUSE_PIDDIR=/var/run/$PROGRAM
37 CLICKHOUSE_PIDFILE="$CLICKHOUSE_PIDDIR/$PROGRAM.pid"
38 # CLICKHOUSE_STOP_TIMEOUT=60 # Disabled by default. Place to /etc/default/clickhouse if you need.
39
40 export LIBHDFS3_CONF=/etc/clickhouse-server/hdfs-client.xml
【讨论】:
以上是关于从 ClickHouse 访问 HDFS HA 集群失败,出现错误 HdfsConfigNotFound的主要内容,如果未能解决你的问题,请参考以下文章
5 weekend01020304050607的分布式集群的HA测试 + hdfs--动态增加节点和副本数量管理 + HA的java api访问要点