我想做的是:有两个线程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列1,查询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**
如预期结果和当前结果所示,问题是thread2 query3存在列元数据混乱。这个结果不一致,查询1有一次问题,查询2有一次问题,等等
暂无答案!
目前还没有任何答案,快来回答吧!