【已解决】doris-2.1.8-rc01,创建OpenSearch Catalog后,无法访问数据

Viewed 57

请教各位老师,

在2.1.8中创建到OpenSearch(2.5 / 2.9 / ES6.3 版本均试过,同样的报错)的Catalog

CREATE CATALOG es_test PROPERTIES (
    "type"="es",
    "hosts"="https://xxx.yyyy.zzz.com",
    "user"="root",
    "password"="foobar"
);

可以正常switch / use default_db / show tables / desc xxx table查看结构

且:

fe / be 上 curl 命令均可正常返回 _cat / _mapping / _settings ...

但是在 select * from xxx table 报错:

ERROR 1105 (HY000): errCode = 2, detailMessage = fetch es table [shield-action-log-uat] metadata failure: / by zero

fe.log 日志如下:

2025-02-14 15:24:19,896 INFO (mysql-nio-pool-49|2549) [EsRestClient.executeResponse():262] es rest client request URL: https://xxx.yyyy.zzz.com/aaa-action-log-uat/_mapping
2025-02-14 15:24:19,905 INFO (mysql-nio-pool-49|2549) [EsRestClient.executeResponse():262] es rest client request URL: https://xxx.yyyy.zzz.com/aaa-action-log-uat/_search_shards
2025-02-14 15:24:19,920 INFO (mysql-nio-pool-49|2549) [EsRestClient.executeResponse():262] es rest client request URL: https://xxx.yyyy.zzz.com/_nodes/http
2025-02-14 15:24:19,941 WARN (mysql-nio-pool-49|2549) [EsTable.syncTableMetaData():339] Exception happens when fetch index [aaa-action-log-uat] meta data from remote es cluster.table id: 4021372308093776698, err: 
java.lang.ArithmeticException: / by zero
        at org.apache.doris.datasource.es.EsShardPartitions.randomAddress(EsShardPartitions.java:109) ~[doris-fe.jar:1.2-SNAPSHOT]
        at org.apache.doris.datasource.es.EsShardPartitions.addHttpAddress(EsShardPartitions.java:101) ~[doris-fe.jar:1.2-SNAPSHOT]
        at org.apache.doris.datasource.es.PartitionPhase.postProcess(PartitionPhase.java:54) ~[doris-fe.jar:1.2-SNAPSHOT]
        at org.apache.doris.datasource.es.EsMetaStateTracker.run(EsMetaStateTracker.java:62) ~[doris-fe.jar:1.2-SNAPSHOT]
        at org.apache.doris.catalog.EsTable.syncTableMetaData(EsTable.java:336) ~[doris-fe.jar:1.2-SNAPSHOT]
        at org.apache.doris.datasource.es.EsExternalTable.toEsTable(EsExternalTable.java:106) ~[doris-fe.jar:1.2-SNAPSHOT]
        at org.apache.doris.datasource.es.EsExternalTable.makeSureInitialized(EsExternalTable.java:56) ~[doris-fe.jar:1.2-SNAPSHOT]
        at org.apache.doris.datasource.ExternalTable.getRowCount(ExternalTable.java:226) ~[doris-fe.jar:1.2-SNAPSHOT]
        at org.apache.doris.catalog.TableIf.getRowCountForNereids(TableIf.java:184) ~[doris-fe.jar:1.2-SNAPSHOT]
        at org.apache.doris.nereids.stats.StatsCalculator.getTableRowCount(StatsCalculator.java:906) ~[doris-fe.jar:1.2-SNAPSHOT]
        at org.apache.doris.nereids.stats.StatsCalculator.computeCatalogRelation(StatsCalculator.java:1090) ~[doris-fe.jar:1.2-SNAPSHOT]
        at org.apache.doris.nereids.stats.StatsCalculator.visitLogicalEsScan(StatsCalculator.java:454) ~[doris-fe.jar:1.2-SNAPSHOT]
        at org.apache.doris.nereids.stats.StatsCalculator.visitLogicalEsScan(StatsCalculator.java:170) ~[doris-fe.jar:1.2-SNAPSHOT]
        at org.apache.doris.nereids.trees.plans.logical.LogicalEsScan.accept(LogicalEsScan.java:77) ~[doris-fe.jar:1.2-SNAPSHOT]
        at org.apache.doris.nereids.stats.StatsCalculator.estimate(StatsCalculator.java:248) ~[doris-fe.jar:1.2-SNAPSHOT]
        at org.apache.doris.nereids.stats.StatsCalculator.estimate(StatsCalculator.java:226) ~[doris-fe.jar:1.2-SNAPSHOT]
        at org.apache.doris.nereids.jobs.cascades.DeriveStatsJob.execute(DeriveStatsJob.java:108) ~[doris-fe.jar:1.2-SNAPSHOT]
        at org.apache.doris.nereids.jobs.scheduler.SimpleJobScheduler.executeJobPool(SimpleJobScheduler.java:44) ~[doris-fe.jar:1.2-SNAPSHOT]
        at org.apache.doris.nereids.jobs.executor.Optimizer.execute(Optimizer.java:52) ~[doris-fe.jar:1.2-SNAPSHOT]
        at org.apache.doris.nereids.NereidsPlanner.optimize(NereidsPlanner.java:382) ~[doris-fe.jar:1.2-SNAPSHOT]
        at org.apache.doris.nereids.NereidsPlanner.planWithoutLock(NereidsPlanner.java:252) ~[doris-fe.jar:1.2-SNAPSHOT]
        at org.apache.doris.nereids.NereidsPlanner.planWithLock(NereidsPlanner.java:209) ~[doris-fe.jar:1.2-SNAPSHOT]
        at org.apache.doris.nereids.NereidsPlanner.plan(NereidsPlanner.java:129) ~[doris-fe.jar:1.2-SNAPSHOT]
        at org.apache.doris.qe.StmtExecutor.executeByNereids(StmtExecutor.java:795) ~[doris-fe.jar:1.2-SNAPSHOT]
        at org.apache.doris.qe.StmtExecutor.execute(StmtExecutor.java:561) ~[doris-fe.jar:1.2-SNAPSHOT]
        at org.apache.doris.qe.StmtExecutor.execute(StmtExecutor.java:537) ~[doris-fe.jar:1.2-SNAPSHOT]
        at org.apache.doris.qe.ConnectProcessor.executeQuery(ConnectProcessor.java:344) ~[doris-fe.jar:1.2-SNAPSHOT]
        at org.apache.doris.qe.ConnectProcessor.handleQuery(ConnectProcessor.java:225) ~[doris-fe.jar:1.2-SNAPSHOT]
        at org.apache.doris.qe.MysqlConnectProcessor.handleQuery(MysqlConnectProcessor.java:285) ~[doris-fe.jar:1.2-SNAPSHOT]
        at org.apache.doris.qe.MysqlConnectProcessor.dispatch(MysqlConnectProcessor.java:313) ~[doris-fe.jar:1.2-SNAPSHOT]
        at org.apache.doris.qe.MysqlConnectProcessor.processOnce(MysqlConnectProcessor.java:483) ~[doris-fe.jar:1.2-SNAPSHOT]
        at org.apache.doris.mysql.ReadListener.lambda$handleEvent$0(ReadListener.java:52) ~[doris-fe.jar:1.2-SNAPSHOT]
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128) ~[?:?]
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628) ~[?:?]
        at java.lang.Thread.run(Thread.java:829) ~[?:?]
2025-02-14 15:24:19,943 INFO (mysql-nio-pool-49|2549) [ExternalRowCountCache.getCachedRowCount():111] Row count for table 14085.1076932685392489029.4021372308093776698 is still processing.
2025-02-14 15:24:19,945 WARN (mysql-nio-pool-49|2549) [StmtExecutor.executeByNereids():801] Nereids plan query failed:
select * from `aaa-action-log-uat`
java.lang.RuntimeException: errCode = 2, detailMessage = fetch es table [aaa-action-log-uat] metadata failure: / by zero
        at org.apache.doris.nereids.util.Utils.execWithUncheckedException(Utils.java:84) ~[doris-fe.jar:1.2-SNAPSHOT]
        at org.apache.doris.nereids.glue.translator.PhysicalPlanTranslator.translatePlan(PhysicalPlanTranslator.java:280) ~[doris-fe.jar:1.2-SNAPSHOT]
        at org.apache.doris.nereids.NereidsPlanner.translate(NereidsPlanner.java:409) ~[doris-fe.jar:1.2-SNAPSHOT]
        at org.apache.doris.nereids.NereidsPlanner.lambda$plan$0(NereidsPlanner.java:135) ~[doris-fe.jar:1.2-SNAPSHOT]
        at org.apache.doris.nereids.NereidsPlanner.planWithLock(NereidsPlanner.java:210) ~[doris-fe.jar:1.2-SNAPSHOT]
        at org.apache.doris.nereids.NereidsPlanner.plan(NereidsPlanner.java:129) ~[doris-fe.jar:1.2-SNAPSHOT]
        at org.apache.doris.qe.StmtExecutor.executeByNereids(StmtExecutor.java:795) ~[doris-fe.jar:1.2-SNAPSHOT]
        at org.apache.doris.qe.StmtExecutor.execute(StmtExecutor.java:561) ~[doris-fe.jar:1.2-SNAPSHOT]
        at org.apache.doris.qe.StmtExecutor.execute(StmtExecutor.java:537) ~[doris-fe.jar:1.2-SNAPSHOT]
        at org.apache.doris.qe.ConnectProcessor.executeQuery(ConnectProcessor.java:344) ~[doris-fe.jar:1.2-SNAPSHOT]
        at org.apache.doris.qe.ConnectProcessor.handleQuery(ConnectProcessor.java:225) ~[doris-fe.jar:1.2-SNAPSHOT]
        at org.apache.doris.qe.MysqlConnectProcessor.handleQuery(MysqlConnectProcessor.java:285) ~[doris-fe.jar:1.2-SNAPSHOT]
        at org.apache.doris.qe.MysqlConnectProcessor.dispatch(MysqlConnectProcessor.java:313) ~[doris-fe.jar:1.2-SNAPSHOT]
        at org.apache.doris.qe.MysqlConnectProcessor.processOnce(MysqlConnectProcessor.java:483) ~[doris-fe.jar:1.2-SNAPSHOT]
        at org.apache.doris.mysql.ReadListener.lambda$handleEvent$0(ReadListener.java:52) ~[doris-fe.jar:1.2-SNAPSHOT]
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128) ~[?:?]
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628) ~[?:?]
        at java.lang.Thread.run(Thread.java:829) ~[?:?]
Caused by: org.apache.doris.common.UserException: errCode = 2, detailMessage = fetch es table [aaa-action-log-uat] metadata failure: / by zero
        at org.apache.doris.datasource.es.source.EsScanNode.getShardLocations(EsScanNode.java:199) ~[doris-fe.jar:1.2-SNAPSHOT]
        at org.apache.doris.datasource.es.source.EsScanNode.createScanRangeLocations(EsScanNode.java:137) ~[doris-fe.jar:1.2-SNAPSHOT]
        at org.apache.doris.datasource.es.source.EsScanNode.doFinalize(EsScanNode.java:131) ~[doris-fe.jar:1.2-SNAPSHOT]
        at org.apache.doris.datasource.es.source.EsScanNode.finalizeForNereids(EsScanNode.java:124) ~[doris-fe.jar:1.2-SNAPSHOT]
        at org.apache.doris.nereids.util.Utils.execWithUncheckedException(Utils.java:82) ~[doris-fe.jar:1.2-SNAPSHOT]
        ... 17 more
2025-02-14 15:24:19,947 WARN (mysql-nio-pool-49|2549) [StmtExecutor.executeByLegacy():1025] execute Exception. stmt[343, 84e1cbe06810432d-a24ae1dab94ab34c]
org.apache.doris.common.UserException: errCode = 2, detailMessage = fetch es table [aaa-action-log-uat] metadata failure: / by zero
        at org.apache.doris.datasource.es.source.EsScanNode.getShardLocations(EsScanNode.java:199) ~[doris-fe.jar:1.2-SNAPSHOT]
        at org.apache.doris.datasource.es.source.EsScanNode.createScanRangeLocations(EsScanNode.java:137) ~[doris-fe.jar:1.2-SNAPSHOT]
        at org.apache.doris.datasource.es.source.EsScanNode.doFinalize(EsScanNode.java:131) ~[doris-fe.jar:1.2-SNAPSHOT]
        at org.apache.doris.datasource.es.source.EsScanNode.finalize(EsScanNode.java:118) ~[doris-fe.jar:1.2-SNAPSHOT]
        at org.apache.doris.planner.OriginalPlanner.createPlanFragments(OriginalPlanner.java:203) ~[doris-fe.jar:1.2-SNAPSHOT]
        at org.apache.doris.planner.OriginalPlanner.plan(OriginalPlanner.java:97) ~[doris-fe.jar:1.2-SNAPSHOT]
        at org.apache.doris.qe.StmtExecutor.analyzeAndGenerateQueryPlan(StmtExecutor.java:1463) ~[doris-fe.jar:1.2-SNAPSHOT]
        at org.apache.doris.qe.StmtExecutor.analyze(StmtExecutor.java:1268) ~[doris-fe.jar:1.2-SNAPSHOT]
        at org.apache.doris.qe.StmtExecutor.executeByLegacy(StmtExecutor.java:900) ~[doris-fe.jar:1.2-SNAPSHOT]
        at org.apache.doris.qe.StmtExecutor.execute(StmtExecutor.java:613) ~[doris-fe.jar:1.2-SNAPSHOT]
        at org.apache.doris.qe.StmtExecutor.execute(StmtExecutor.java:537) ~[doris-fe.jar:1.2-SNAPSHOT]
        at org.apache.doris.qe.ConnectProcessor.executeQuery(ConnectProcessor.java:344) ~[doris-fe.jar:1.2-SNAPSHOT]
        at org.apache.doris.qe.ConnectProcessor.handleQuery(ConnectProcessor.java:225) ~[doris-fe.jar:1.2-SNAPSHOT]
        at org.apache.doris.qe.MysqlConnectProcessor.handleQuery(MysqlConnectProcessor.java:285) ~[doris-fe.jar:1.2-SNAPSHOT]
        at org.apache.doris.qe.MysqlConnectProcessor.dispatch(MysqlConnectProcessor.java:313) ~[doris-fe.jar:1.2-SNAPSHOT]
        at org.apache.doris.qe.MysqlConnectProcessor.processOnce(MysqlConnectProcessor.java:483) ~[doris-fe.jar:1.2-SNAPSHOT]
        at org.apache.doris.mysql.ReadListener.lambda$handleEvent$0(ReadListener.java:52) ~[doris-fe.jar:1.2-SNAPSHOT]
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128) ~[?:?]
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628) ~[?:?]
        at java.lang.Thread.run(Thread.java:829) ~[?:?]
1 Answers

已解决:

  1. create catalog properties 设置
    "nodes_discovery" = "false"

  2. OpenSearch的Domain Endpoint后增加 :443

类似:

CREATE CATALOG es_test PROPERTIES (
"type"="es",
"hosts"="https://xxx.yyyy.zzz.com:443",
"user"="root",
"password"="foobar",
"nodes_discovery" = "false"
);

以上:
针对 OpenSearch 2.5 2.7 2.9 验证通过~