首页 > 解决方案 > java访问Jdbc Impala的并发问题

问题描述

我想要做的:有两个线程 t1,t2,其中 t1 连接到 I1 impala 集群,t2 连接到 I2

t1 和 t2 都有在各自数据库中执行查询集的任务。

下面是伪代码:

    queriesMap(queryName,query)//got the queries dynamically from another table, customized and set to map here

    myThreadMethod(queriesMap, connUrl)
   {
   conn = getImpalaConnection(connUrl)
   stmt = conn.createStatement()
   for each query in queriesMap
   {
       ResultSet rs=stmt.executeQuery(query);
       ResultSetMetadata rsMetadata = rs.getMetadata();
       rs.next(); //assuming retrieving only the sum- only one row
       for(i=1;i<=rsMetadata .getColumnCount();i++)
      {
          //append column names and print
          //append result values and print
      }
    }
    }

现在,每次打印的列和结果值都不相同。如果相同的代码在没有线程的情况下运行,则结果符合预期。注意:我尝试过 threadlocal 但没有帮助

任何人都可以让我知道这里可能导致什么问题吗?

预期结果:
线程 1

 Query1   q1-C1 q1-C2 q1-C3 q1-c4 q1-c5
          q1-V1 q1-V2 q1-V3 q1-V3 q1-V5

 Query2  q2-C1 q2-C2 q2-C3 
         q2-V1 q2-V2 q2-V3 

 Query3  q3-C1 q3-C2 q3-C3 q3-c4 q3-c5
         q3-V1 q3-V2 q3-V3 q3-V3 q3-V5

线程2

 Query1   q1-C1 q1-C2 q1-C3 q1-c4 q1-c5
          q1-V1 q1-V2 q1-V3 q1-V3 q1-V5

 Query2  q2-C1 q2-C2 q2-C3 
         q2-V1 q2-V2 q2-V3 

 Query3  q3-C1 q3-C2 q3-C3 q3-c4 q3-c5
         q3-V1 q3-V2 q3-V3 q3-V3 q3-V5

我目前得到的结果并不总是相同,仅作为示例:查询 1 的 q1-c1 column1 ,查询 1 的 q1-v1 值/结果 1

线程1:

 Query1   q1-C1 q1-C2 q1-C3 q1-c4 q1-c5
          q1-V1 q1-V2 q1-V3 q1-V3 q1-V5

 Query2  q2-C1 q2-C2 q2-C3 
         q2-V1 q2-V2 q2-V3 

 Query3  q3-C1 q3-C2 q3-C3 q3-c4 q3-c5
         q3-V1 q3-V2 q3-V3 q3-V3 q3-V5

T2:

 Query1  q1-C1 q1-C2 q1-C3 q1-c4 q1-c5
         q1-V1 q1-V2 q1-V3 q1-V3 q1-V5

 Query2  q2-C1 q2-C2 q2-C3 
         q2-V1 q2-V2 q2-V3 

 **Query3  q2-C1 q2-C2 q2-C3 
         q3-V1 q3-V2 q3-V3** 

如预期结果和当前结果所示,线程 2 Query3 存在列元数据混乱的问题。此结果不一致,Query1 有一次,Query2 有一次等

标签: javamultithreadingresultsetimpala

解决方案


推荐阅读