cursor() 使用多路游标使用远程计算报错
集算器版本:20230520
版本: 社区版
远程计算的定义:
脚本:
=now()
=file(“/data/soft/esProc/file/Performance_Spl/LINEITEM.ctx”:“UTF-8”,A2).open().cursor@m (L_SHIPDATE,L_QUANTITY, L_EXTENDEDPRICE,L_DISCOUNT,L_TAX,L_RETURNFLAG,L_LINESTATUS;L_SHIPDATE>=date(“1995-06-01 00:00:00”)) =A3.fetch(10)
try
=A3.groups(L_RETURNFLAG, L_LINESTATUS; sum(L_QUANTITY):sum_qty, sum(L_EXTENDEDPRICE):sum_base_price, sum(dp=L_EXTENDEDPRICE*(1-L_DISCOUNT)):sum_disc_price, sum(dp*L_TAX):sum_charge, avg(L_QUANTITY):avg_qty, avg(L_EXTENDEDPRICE):avg_price, avg(L_DISCOUNT):avg_disc, count(1):count_order)
=B5.run(L_RETURNFLAG, L_LINESTATUS,sum_charge+=sum_disc_price)
=A3.close()
return interval@ms(A1,now())
报错信息:
SEVERE: Error in cell B4
null
com.scudata.common.RQException
at com.scudata.thread.Job.join(Job.java:31)
at com.scudata.dm.cursor.MultipathCursors.groups(MultipathCursors.java:376)
at com.scudata.dm.cursor.MultipathCursors.groups(MultipathCursors.java:498)
at com.scudata.expression.mfn.cursor.Groups.calculate(Groups.java:202)
at com.scudata.expression.operator.DotOperator.calculate(DotOperator.java:86)
at com.scudata.expression.Expression.calculate(Expression.java:160)
at com.scudata.cellset.datamodel.PgmNormalCell.calculate(PgmNormalCell.java:159)
at com.scudata.cellset.datamodel.PgmCellSet.runNext2(PgmCellSet.java:1949)
at com.scudata.cellset.datamodel.PgmCellSet.execute(PgmCellSet.java:2623)
at com.scudata.cellset.datamodel.PgmCellSet.calculateResult(PgmCellSet.java:2666)
at com.scudata.expression.fn.JDBCCall.calculate(JDBCCall.java:113)
at com.scudata.expression.Expression.calculate(Expression.java:160)
at com.scudata.expression.fn.Eval.calc(Eval.java:93)
at com.scudata.app.common.AppUtil.execute1(AppUtil.java:285)
at com.esproc.jdbc.JDBCUtil.execute(JDBCUtil.java:195)
at com.esproc.jdbc.JDBCUtil.execute(JDBCUtil.java:94)
at com.scudata.server.unit.JdbcTask$1.run(JdbcTask.java:110)
Caused by: java.lang.IllegalArgumentException: lengths must be >= 0
at net.jpountz.util.SafeUtils.checkLength(SafeUtils.java:38)
at net.jpountz.util.SafeUtils.checkRange(SafeUtils.java:29)
at net.jpountz.lz4.LZ4JNIFastDecompressor.decompress(LZ4JNIFastDecompressor.java:36)
at net.jpountz.lz4.LZ4FastDecompressor.decompress(LZ4FastDecompressor.java:52)
at com.scudata.dw.LZ4Util.decompress(LZ4Util.java:62)
at com.scudata.dw.BlockLinkReader.readDataBlock(BlockLinkReader.java:147)
at com.scudata.dw.BlockLinkReader.readDataBlock(BlockLinkReader.java:178)
at com.scudata.dw.BlockLinkReader.readBlockData(BlockLinkReader.java:217)
at com.scudata.dw.Cursor.getData(Cursor.java:1555)
at com.scudata.dw.Cursor.get(Cursor.java:1356)
at com.scudata.dm.cursor.ICursor.fuzzyGet(ICursor.java:975)
at com.scudata.dm.cursor.ICursor.fuzzyFetch(ICursor.java:276)
at com.scudata.dm.op.GroupsResult.push(GroupsResult.java:407)
at com.scudata.thread.GroupsJob.run(GroupsJob.java:78)
at com.scudata.thread.ThreadPool$WorkThread.run(ThreadPool.java:57)
这个表就是 TPCH 里面的表
后面采用 IDE 进行远程计算 ,服务端 没有报错日志 IDE 的错误信息输出为:
Raqsoft is using log file:
D:\software\esProc20230621\esProc\log\esproc_20240112.log
Log level:INFO
Raqsoft is using log file:
D:\software\esProc20230621\esProc\log\esproc_20240112.log
[2024-01-12 17:58:20]
SEVERE: 单元格 B5 中有错误
[192.166.213.37:8281]null
com.scudata.common.RQException: [192.166.213.37:8281]null
at com.scudata.parallel.Response.checkResult(Response.java:99)
at com.scudata.parallel.UnitJob.getResult(UnitJob.java:29)
at com.scudata.parallel.ClusterCursor.groups(ClusterCursor.java:525)
at com.scudata.expression.mfn.cursor.Groups.calculate(Groups.java:200)
at com.scudata.expression.operator.DotOperator.calculate(DotOperator.java:86)
at com.scudata.expression.Expression.calculate(Expression.java:160)
at com.scudata.cellset.datamodel.PgmNormalCell.calculate(PgmNormalCell.java:159)
at com.scudata.cellset.datamodel.PgmCellSet.runNext2(PgmCellSet.java:1949)
at com.scudata.cellset.datamodel.PgmCellSet.run(PgmCellSet.java:2084)
at com.scudata.ide.spl.SheetSpl.runCellSet(SheetSpl.java:1387)
at com.scudata.ide.spl.SheetSpl$RunThread.run(SheetSpl.java:1638)
Caused by: com.scudata.common.RQException
at com.scudata.thread.Job.join(Job.java:31)
at com.scudata.dm.cursor.MultipathCursors.groups(MultipathCursors.java:376)
at com.scudata.dm.cursor.MultipathCursors.groups(MultipathCursors.java:498)
at com.scudata.parallel.ClusterCursor.executeGroups(ClusterCursor.java:663)
at com.scudata.parallel.UnitCommand.execute(UnitCommand.java:144)
at com.scudata.parallel.UnitWorker.run(UnitWorker.java:107)
Caused by: net.jpountz.lz4.LZ4Exception: Error decoding offset 1098207405 of input buffer
at net.jpountz.lz4.LZ4JNIFastDecompressor.decompress(LZ4JNIFastDecompressor.java:39)
at net.jpountz.lz4.LZ4FastDecompressor.decompress(LZ4FastDecompressor.java:52)
at com.scudata.dw.LZ4Util.decompress(LZ4Util.java:62)
at com.scudata.dw.BlockLinkReader.readDataBlock(BlockLinkReader.java:147)
at com.scudata.dw.BlockLinkReader.readDataBlock(BlockLinkReader.java:178)
at com.scudata.dw.BlockLinkReader.readBlockData(BlockLinkReader.java:217)
at com.scudata.dw.Cursor.getData(Cursor.java:1555)
at com.scudata.dw.Cursor.get(Cursor.java:1356)
at com.scudata.dm.cursor.ICursor.fuzzyGet(ICursor.java:975)
at com.scudata.dm.cursor.ICursor.fuzzyFetch(ICursor.java:276)
at com.scudata.dm.op.GroupsResult.push(GroupsResult.java:407)
at com.scudata.thread.GroupsJob.run(GroupsJob.java:78)
at com.scudata.thread.ThreadPool$WorkThread.run(ThreadPool.java:57)
组表文件是怎么来的?
用 TPCH 转 出来的
我们本地计算是没有报错的 ,脚本 少了个 远程连接的地址 我在粘贴下脚本:
=now()
[192.166.213.37:8281]
=file(“/data/soft/esProc/file/Performance_Spl/LINEITEM.ctx”:“UTF-8”,A2).open().cursor@m (L_SHIPDATE,L_QUANTITY, L_EXTENDEDPRICE,L_DISCOUNT,L_TAX,L_RETURNFLAG,L_LINESTATUS;L_SHIPDATE>=date(“1995-06-01 00:00:00”)) =A3.fetch(10)
try
=A3.groups(L_RETURNFLAG, L_LINESTATUS; sum(L_QUANTITY):sum_qty, sum(L_EXTENDEDPRICE):sum_base_price, sum(dp=L_EXTENDEDPRICE*(1-L_DISCOUNT)):sum_disc_price, sum(dp*L_TAX):sum_charge, avg(L_QUANTITY):avg_qty, avg(L_EXTENDEDPRICE):avg_price, avg(L_DISCOUNT):avg_disc, count(1):count_order)
=B5.run(L_RETURNFLAG, L_LINESTATUS,sum_charge+=sum_disc_price)
=A3.close()
return interval@ms(A1,now())
节点机和本地的 jar 包版本是相同的吗?
先确认是该文件本身的问题,比如换一个 ctx 时,不报错。如果确认是该文件有异常,将 ctx 文件上传,得复现问题,调试跟踪一下。
是的
我试了一下没法复现这个问题
如果节点机和本地的 jar 包版本相同的话,另一个可能就是节点机的 ctx 文件损坏了。
可否把节点机的文件下载到本地看看是否正确?
at com.scudata.dw.Cursor.getData(Cursor.java:1555)
at com.scudata.dw.Cursor.get(Cursor.java:1356)
报错这两行跟代码对不上,确定 jar 是最新的吗?