从 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的主要内容,如果未能解决你的问题,请参考以下文章

HDFS2.0之简单总结

5 weekend01020304050607的分布式集群的HA测试 + hdfs--动态增加节点和副本数量管理 + HA的java api访问要点

hadoop:HA场景下 java客户端远程访问hdfs配置

ClickHouase读写HDFS

Hadoop组件之-HDFS(HA实现细节)

HDFS+Clickhouse+Spark:从0到1实现一款轻量级大数据分析系统