这个坑,不是phoenix 本身的问题。
只有在多线程并行的情况下才会发生。
会出现各种错误,比如:
org.apache.phoenix.exception.PhoenixIOException: null
org.apache.phoenix.schema.ColumnNotFoundException: ERROR 504 (42703): Undefined column. columnName=BROWSER
java.sql.SQLException: Can't declare cursor dataCursor, cursor identifier already in use.
这种情况下,所有的问题都是 游标名称引起的,因为在多线程场景下,游标创建导致的异常。
游标名称重复了,提示已经在使用。附带出现了一些奇怪的异常,比如null、列找不到。
知道原因了,解决的方法也很简单,那就是生成唯一的游标名称即可。
/**
* 生成唯一的游标名称
* 避免多线程情况,执行游标时,phoenix出现异常
* @return
*/
public static String getCursorName(){
// 游标名称不能数字开头 Error: ERROR 603 (42P00): Syntax error. Unexpected input. Expecting "NAME", got...
String first = "ag";
String uuid = UUID.randomUUID().toString().replace("-","");
String cursorName = first + uuid;
return cursorName;
}
我写的phoenix的工具类:https://blog.youkuaiyun.com/Cky079/article/details/88172671
--END
本文详细解析了Apache Phoenix在多线程环境下因游标名称冲突引发的各种异常,如PhoenixIOException、ColumnNotFoundException等,并提供了一种通过生成唯一游标名称来避免此类问题的解决方案。
6121

被折叠的 条评论
为什么被折叠?



