Skip to content

[Bug] Use Paimon Catalog in StarRocks to access data on OBS report error "UnsupportedSchemeException" #7835

@satanson

Description

@satanson

Search before asking

  • I searched in the issues and found nothing similar.

Paimon version

1.2.0

<paimon.version>1.2.0</paimon.version>

org.apache.paimon
paimon-bundle
${paimon.version}


lz4-java
org.lz4


        <dependency>
            <groupId>org.apache.paimon</groupId>
            <artifactId>paimon-s3</artifactId>
            <version>${paimon.version}</version>
        </dependency>

        <dependency>
            <groupId>org.apache.paimon</groupId>
            <artifactId>paimon-oss</artifactId>
            <version>${paimon.version}</version>
        </dependency>

Compute Engine

StarRocks 3.5.16

Minimal reproduce step

step1: create paimon catalog:

CREATE EXTERNAL CATALOG mrs_paimon
PROPERTIES
(
    "type" = "paimon",
    "paimon.catalog.type"="hive",
    "paimon.catalog.warehouse"="obs://hwem-gri-oversea-m241-la-mrs-uat-mex2-oss/bdp/paimon/warehouse",
    "hive.metastore.uris"="thrift://[10.205.200.146:9083](http://10.205.200.146:9083/),thrift://[10.205.200.64:9083](http://10.205.200.64:9083/)",
    "aws.s3.enable_ssl" = "false",
    "aws.s3.enable_path_style_access" = "true",
    "aws.s3.endpoint" = "[obs.la-north-2.myhuaweicloud.com](http://obs.la-north-2.myhuaweicloud.com/)",
    "aws.s3.access_key" = "xxxx",
    "aws.s3.secret_key" = "xxxxxxx"
)

USE mrs_paimon;
SHOW DATABASES FROM mrs_paimon;

2. issue query report error

query as follows

 SELECT * FROM `mrs_paimon`.`paimon_db`.`my_table` LIMIT 20

FE report error to mysql client:

Error 1064 (HY000): org.apache.paimon.fs.UnsupportedSchemeException: 
Could not find a file io implementation for scheme 'obs' in the classpath. 
Hadoop FileSystem also cannot access this path 
'obs://hwem-gri-oversea-m241-la-mrs-uat-mex2-oss/bdp/paimon/warehouse'.

detail error info in fe.log

(starrocks-mysql-nio-pool-176|11849049) [StmtExecutor.execute():975] execute Exception, sql: SELECT * FROM `mrs_paimon`.`paimon_db`.`my_table` LIMIT 20, error: Getting analyzing error. Detail message: Unknown table 'paimon_db.my_table'.
WARN (starrocks-mysql-nio-pool-176|11849049) [StmtExecutor.logOptimizerTraceOnGenerateExecPlanFailure():697] Generate exec plan failed. Planner profile: query_id=c2661632-4d18-11f1-ad90-fa163e2e29f1, sql=SELECT * FROM `mrs_paimon`.`paimon_db`.`my_table` LIMIT 20, err=SemanticException: Getting analyzing error. Detail message: Unknown table 'paimon_db.my_table'., profile=Planner:
   - -- Parser[1] 0
   - -- Total[1] 35ms
   -     -- Analyzer[1] 35ms
   -         -- Lock[1] 0
   -         -- AnalyzeDatabase[1] 0
   -         -- AnalyzeTemporaryTable[1] 0
   -         -- AnalyzeTable[1] 35ms
  Reason:

3. desc paimon table also report error

SHOW CATALOGS; 

SHOW CREATE CATALOG mrs_paimon;

SET CATALOG mrs_paimon;

SHOW DATABASES;

USE paimon_db;

desc my_table;
2026-05-12 14:49:25.861+08:00 WARN (starrocks-mysql-nio-pool-1|171)
[StmtExecutor.logOptimizerTraceOnGenerateExecPlanFailure():697] Generate exec plan

Planner profile:
query_id=b73fcf55-4dce-11f1-a1d0-fa163e2e29fa, sql=desc my_table,
err=SemanticException: Getting analyzing error.

Detail message:
Unknown node path: /catalog/mrs_paimon/paimon_db/my_table/schema.
msg: table : my_table not exists., profile=Planner:

--- Parser[1] 1ms
--- Total[1] 37ms

Reason:

2026-05-12 14:49:25.860+08:00 ERROR (starrocks-mysql-nio-pool-1|171)
[PaimonMetadata.getTable():243] Paimon table paimon_db.my_table does not exist.

org.apache.paimon.Catalog$TableNotExistException: Table paimon_db.my_table does not exist.

at org.apache.paimon.hive.HiveCatalog.lambda$loadTableSchema$18(HiveCatalog.java:709)
at java.util.Optional.orElseThrow(Optional.java:403)
at org.apache.paimon.hive.HiveCatalog.loadTableSchema(HiveCatalog.java:709)
at org.apache.paimon.hive.HiveCatalog.loadTableMetadata(HiveCatalog.java:692)
at org.apache.paimon.hive.HiveCatalog.loadTableMetadata(HiveCatalog.java:686)
at org.apache.paimon.catalog.CatalogUtils.loadTable(CatalogUtils.java:200)
at org.apache.paimon.catalog.AbstractCatalog.getTable(AbstractCatalog.java:460)
at org.apache.paimon.catalog.CachingCatalog.getTable(CachingCatalog.java:242)

at com.starrocks.connector.paimon.PaimonMetadata.getTable(PaimonMetadata.java:241)
at com.starrocks.connector.CatalogConnectorMetadata.getTable(CatalogConnectorMetadata.java:148)
at com.starrocks.server.MetadataMgr.lambda$getTables$5(MetadataMgr.java:507)
at java.util.Optional.map(Optional.java:260)
at com.starrocks.server.MetadataMgr.getTable(MetadataMgr.java:507)
at com.starrocks.common.proc.ExternalTablesProcDir.lookup(ExternalTablesProcDir.java:60)
at com.starrocks.common.proc.ProcService.open(ProcService.java:112)
at com.starrocks.sql.analyzer.ShowStmtAnalyzer$ShowStmtAnalyzerVisitor.descExternalCatalogTable(ShowStmtAnalyzer.java:549)
at com.starrocks.sql.analyzer.ShowStmtAnalyzer$ShowStmtAnalyzerVisitor.visitDescTableStmt(ShowStmtAnalyzer.java:368)
at com.starrocks.sql.analyzer.ShowStmtAnalyzer$ShowStmtAnalyzerVisitor.visitDescTableStmt(ShowStmtAnalyzer.java:108)
at com.starrocks.sql.ast.DescribeStmt.accept(DescribeStmt.java:210)
at com.starrocks.sql.ast.AstVisitor.visit(AstVisitor.java:102)
at com.starrocks.sql.analyzer.ShowStmtAnalyzer$ShowStmtAnalyzerVisitor.analyze(ShowStmtAnalyzer.java:114)
at com.starrocks.sql.analyzer.ShowStmtAnalyzer.analyze(ShowStmtAnalyzer.java:105)
at com.starrocks.sql.analyzer.Analyzer$AnalyzerVisitor.visitShowStatement(Analyzer.java:432)
at com.starrocks.sql.analyzer.Analyzer$AnalyzerVisitor.visitDescTableStmt(Analyzer.java:190)
at com.starrocks.sql.ast.AstVisitor.visitDescTableStmt(AstVisitor.java:244)
at com.starrocks.sql.ast.DescribeStmt.accept(DescribeStmt.java:210)
at com.starrocks.sql.ast.AstVisitor.visit(AstVisitor.java:102)
at com.starrocks.sql.analyzer.Analyzer.analyze(Analyzer.java:187)
at com.starrocks.qe.StmtExecutor.generateExecPlan(StmtExecutor.java:612)
at com.starrocks.qe.StmtExecutor.execute(StmtExecutor.java:757)
at com.starrocks.qe.ConnectProcessor.executeQueryStatement(ConnectProcessor.java:547)
at com.starrocks.qe.ConnectProcessor.runWithParserStageRetry(ConnectProcessor.java:435)
at com.starrocks.qe.ConnectProcessor.handleQuery(ConnectProcessor.java:372)
at com.starrocks.qe.ConnectProcessor.dispatch(ConnectProcessor.java:758)
at com.starrocks.qe.ConnectProcessor.processOnce(ConnectProcessor.java:1148)
at com.starrocks.mysql.nio.ReadListener.lambda$handleEvent$0(ReadListener.java:71)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1136)
...

step4: Transform obs path into s3 path in catalog ddl, it also does not work.

CREATE EXTERNAL CATALOG mrs_paimon 
PROPERTIES 
( 
 "type" = "paimon", 
 "paimon.catalog.type" = "hive", 
 "paimon.catalog.warehouse" = "s3://hwem-gri-oversea-m241-la-mrs-uat-mex2-oss/bdp/paimon/warehouse", 
 "hive.metastore.uris" = "thrift://[10.205.200.146:9083](http://10.205.200.146:9083/),thrift://[10.205.200.64:9083](http://10.205.200.64:9083/)", 

 "aws.s3.enable_ssl" = "true", 
 "aws.s3.enable_path_style_access" = "true", 
 "aws.s3.endpoint" = "https://obs.la-north-2.myhuaweicloud.com/", 
 "aws.s3.region" = "la-north-2", 
 "aws.s3.access_key" = "xxxx", 
 "aws.s3.secret_key" = "xxxxxxx" 
);

 CREATE EXTERNAL CATALOG mrs_paimon
  PROPERTIES
  (
      "type" = "paimon",
      "paimon.catalog.type" = "hive",
      "hive.metastore.uris" = "thrift://[10.205.200.146:9083](http://10.205.200.146:9083/),thrift://[10.205.200.64:9083](http://10.205.200.64:9083/)",
      "paimon.catalog.warehouse" = "s3a://hwem-gri-oversea-m241-la-mrs-uat-mex2-oss/bdp/paimon/warehouse",
      "aws.s3.enable_ssl" = "true",
      "aws.s3.enable_path_style_access" = "true",
      "aws.s3.endpoint" = "[obs.la-north-2.myhuaweicloud.com](http://obs.la-north-2.myhuaweicloud.com/)",
      "aws.s3.access_key" = "xxx",
      "aws.s3.secret_key" = "xxx"
  );

step5: copy paimon-obs-1.2.0.jar into starrocks FE according to community experiences, it also does not work. error as follows

2026-05-13 10:50:52.341+08:00 WARN (starrocks-mysql-nio-pool-2|708) [StmtExecutor.execute():998] execute Exception, sql: SHOW DATABASES FROM `mrs_paimon`
java.lang.NoClassDefFoundError: Could not initialize class okhttp3.internal.concurrent.TaskRunner
	at okhttp3.ConnectionPool.(ConnectionPool.kt:41) ~[okhttp-4.10.0.jar:?]
	at okhttp3.ConnectionPool.(ConnectionPool.kt:47) ~[okhttp-4.10.0.jar:?]
	at okhttp3.OkHttpClient$Builder.(OkHttpClient.kt:471) ~[okhttp-4.10.0.jar:?]
	at com.obs.services.internal.utils.RestUtils.initHttpClientBuilder(RestUtils.java:333) ~[?:?]
	at com.obs.services.internal.RestStorageService.initHttpClient(RestStorageService.java:177) ~[?:?]
	at com.obs.services.ObsClient.init(ObsClient.java:108) ~[?:?]
	at com.obs.services.ObsClient.(ObsClient.java:233) ~[?:?]
	at org.apache.hadoop.fs.obs.DefaultOBSClientFactory.createObsClientWithoutCredentialsProvider(DefaultOBSClientFactory.java:289) ~[?:?]
	at org.apache.hadoop.fs.obs.DefaultOBSClientFactory.createHuaweiObsClient(DefaultOBSClientFactory.java:240) ~[?:?]
	at org.apache.hadoop.fs.obs.DefaultOBSClientFactory.createObsClient(DefaultOBSClientFactory.java:359) ~[?:?]
	at org.apache.hadoop.fs.obs.OBSFileSystem.initialize(OBSFileSystem.java:286) ~[?:?]
	at org.apache.paimon.obs.OBSFileIO.lambda$createFileSystem$0(OBSFileIO.java:133) ~[?:?]
	at org.apache.paimon.obs.OBSFileIO.lambda$createFileSystem$1(OBSFileIO.java:141) ~[?:?]
	at java.util.concurrent.ConcurrentHashMap.computeIfAbsent(ConcurrentHashMap.java:1708) ~[?:?]
	at org.apache.paimon.obs.OBSFileIO.createFileSystem(OBSFileIO.java:140) ~[?:?]
	at org.apache.paimon.obs.HadoopCompliantFileIO.getFileSystem(HadoopCompliantFileIO.java:113) ~[?:?]
	at org.apache.paimon.obs.HadoopCompliantFileIO.exists(HadoopCompliantFileIO.java:83) ~[?:?]
	at org.apache.paimon.fs.PluginFileIO.lambda$exists$4(PluginFileIO.java:67) ~[paimon-bundle-1.2.0-cve-patched.jar:?]
	at org.apache.paimon.fs.PluginFileIO.wrap(PluginFileIO.java:104) ~[paimon-bundle-1.2.0-cve-patched.jar:?]
	at org.apache.paimon.fs.PluginFileIO.exists(PluginFileIO.java:67) ~[paimon-bundle-1.2.0-cve-patched.jar:?]
	at org.apache.paimon.fs.FileIO.checkOrMkdirs(FileIO.java:285) ~[paimon-bundle-1.2.0-cve-patched.jar:?]
	at org.apache.paimon.hive.HiveCatalog.createHiveCatalog(HiveCatalog.java:1686) ~[paimon-bundle-1.2.0-cve-patched.jar:?]
	at org.apache.paimon.hive.HiveCatalogFactory.create(HiveCatalogFactory.java:37) ~[paimon-bundle-1.2.0-cve-patched.jar:?]
	at org.apache.paimon.catalog.CatalogFactory.createUnwrappedCatalog(CatalogFactory.java:84) ~[paimon-bundle-1.2.0-cve-patched.jar:?]
	at org.apache.paimon.catalog.CatalogFactory.createCatalog(CatalogFactory.java:71) ~[paimon-bundle-1.2.0-cve-patched.jar:?]
	at org.apache.paimon.catalog.CatalogFactory.createCatalog(CatalogFactory.java:67) ~[paimon-bundle-1.2.0-cve-patched.jar:?]
	at com.starrocks.connector.paimon.PaimonConnector.getPaimonNativeCatalog(PaimonConnector.java:152) ~[starrocks-fe.jar:?]
	at com.starrocks.connector.paimon.PaimonConnector.getMetadata(PaimonConnector.java:161) ~[starrocks-fe.jar:?]
	at com.starrocks.connector.LazyConnector.getMetadata(LazyConnector.java:42) ~[starrocks-fe.jar:?]
	at com.starrocks.connector.CatalogConnector.getMetadata(CatalogConnector.java:45) ~[starrocks-fe.jar:?]
	at com.starrocks.server.MetadataMgr$QueryMetadatas.getConnectorMetadata(MetadataMgr.java:119) ~[starrocks-fe.jar:?]
	at com.starrocks.server.MetadataMgr.getOptionalMetadata(MetadataMgr.java:204) ~[starrocks-fe.jar:?]
	at com.starrocks.server.MetadataMgr.getOptionalMetadata(MetadataMgr.java:181) ~[starrocks-fe.jar:?]
	at com.starrocks.server.MetadataMgr.listDbNames(MetadataMgr.java:223) ~[starrocks-fe.jar:?]
	at com.starrocks.qe.ShowExecutor$ShowExecutorVisitor.visitShowDatabasesStatement(ShowExecutor.java:465) ~[starrocks-fe.jar:?]
	at com.starrocks.qe.ShowExecutor$ShowExecutorVisitor.visitShowDatabasesStatement(ShowExecutor.java:321) ~[starrocks-fe.jar:?]
	at com.starrocks.sql.ast.ShowDbStmt.accept(ShowDbStmt.java:99) ~[starrocks-fe.jar:?]
	at com.starrocks.sql.ast.AstVisitor.visit(AstVisitor.java:102) ~[starrocks-fe.jar:?]
	at com.starrocks.qe.ShowExecutor.execute(ShowExecutor.java:318) ~[starrocks-fe.jar:?]
	at com.starrocks.qe.StmtExecutor.handleShow(StmtExecutor.java:2233) ~[starrocks-fe.jar:?]
	at com.starrocks.qe.StmtExecutor.execute(StmtExecutor.java:905) ~[starrocks-fe.jar:?]
	at com.starrocks.qe.ConnectProcessor.executeQueryAttempt(ConnectProcessor.java:547) ~[starrocks-fe.jar:?]
	at com.starrocks.qe.ConnectProcessor.runWithParserStageRetry(ConnectProcessor.java:435) ~[starrocks-fe.jar:?]
	at com.starrocks.qe.ConnectProcessor.handleQuery(ConnectProcessor.java:372) ~[starrocks-fe.jar:?]
	at com.starrocks.qe.ConnectProcessor.dispatch(ConnectProcessor.java:758) ~[starrocks-fe.jar:?]
	at com.starrocks.qe.ConnectProcessor.processOnce(ConnectProcessor.java:1148) ~[starrocks-fe.jar:?]
	at com.starrocks.mysql.nio.ReadListener.lambda$handleEvent$0(ReadListener.java:71) ~[starrocks-fe.jar:?]
	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1136) ~[?:?]
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635) ~[?:?]
	at java.lang.Thread.run(Thread.java:840) ~[?:?]
Caused by: java.lang.ExceptionInInitializerError: Exception java.lang.NoSuchFieldError: Companion [in thread "starrocks-mysql-nio-pool-2"]
	at okhttp3.internal.Util.(Util.kt:70) ~[okhttp-4.10.0.jar:?]
	at okhttp3.internal.concurrent.TaskRunner.(TaskRunner.kt:309) ~[okhttp-4.10.0.jar:?]
	... 50 more

What doesn't meet your expectations?

Paimon catalog StarRocks can access paimon data on OBS.

Anything else?

Use access OBS via Parallel Filesystem instead of object storage, is it the root cause?

Are you willing to submit a PR?

  • I'm willing to submit a PR!

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't working

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions