如果我启动GFSH客户端并连接到Geode。 %timeit list2 = df2['list2'].sort_values().tolist();df['occurance'] = df['list1'].apply(lambda x: len(list(next(iter(())) if not all(i in list2 for i in x) else i for i in x)))
中有很多数据,要检查它,然后运行:
myRegion
我得到答复:
query --query="select * from /myRegion"
如何解决/调试此问题?
更新:Geode服务器日志中的错误是:
Result : false
startCount : 0
endCount : 20
Message : Unknown pdx type=2140705
答案 0 :(得分:1)
您可以从堆栈跟踪中找出直接原因。
PDX序列化流包含类型ID,该ID是对GemFire集群维护的类型元数据存储库的引用。在这种情况下,对象的序列化数据包含不在群集的元数据存储库中的typeId。
问题就变成了:“什么序列化了该对象,为什么它使用了无效的类型id?”
我之前看到的唯一方法是完全重新启动集群并且pdx元数据消失了,这是因为它不是持久性的,或者是因为它已被删除(例如,通过清除定位器工作目录)。
GemFire客户端缓存类型与其类型ID之间的映射。这使他们可以快速序列化对象,而无需不断从服务器中查找类型ID。客户端连接可以在群集重新启动后持续存在。客户端重新连接时,它不会刷新缓存的信息,并继续使用其缓存的类型ID写入对象。
因此,我会看到以前发生这种情况的唯一方法是,pdx元数据丢失的群集重新启动和未重新启动的客户端(例如,应用服务器)结合在一起。这符合您的情况吗?
如果是这样,避免这种情况的最好方法之一就是保留您的pdx元数据,并且永远不要删除它。