[ 
https://issues.apache.org/jira/browse/KYLIN-5325?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Jiale He updated KYLIN-5325:
----------------------------
    Description: 
h1. Root Cause

写入 JSON 文件的数字读出来识别为 Integer 类型,这与需要的 Long 
类型不一致,导致出现类型转换错误,{{{}totalStorageSize{}}} 就写入了初始值 -1。

解释为什么一开始报错,等一会儿就恢复正常了:Kylin 有个 {{EpochStore}} 用于判断当前节点是否为 leader 
节点,但是这个同步获取的过程不是立即进行的,需要等 KE 完全启动完成,在优化 WorkingDir 的 issue 中有个逻辑是{*}只有 leader 
节点写,其他节点只读{*},所以当 KE 刚启动的时候,当前节点还是读节点,此时去 HDFS 上读取 
{{_metrics/hdfsCapacity.json}} 时读出来的数据类型是 Integer,返回时会报错,如下:

!image-2022-12-01-18-29-18-893.png|width=904,height=357!

而抛出异常的地方吞掉了详细信息,仅在 {{logs/kylin.schedule.log}} 留下一条类型转换的异常,如下:

!image-2022-12-01-18-30-36-346.png|width=939,height=476!

 

过了一段时间恢复正常是因为经过元数据的初始化等等操作之后,当前节点可以正确识别为 leader 节点,此时会对每个 project 的 HDFS 
使用大小进行计算,内存中维护的数据是正确匹配的 Long 类型,再次覆写 HDFS 上对应的文件。

{*}被写入 JSON 文件的数字是不包含数据类型的,可能会自动当成 Integer 处理{*},另外 {*}JDK 这边 
ConcurrentHashMap<String, Long> 能接住ConcurrentHashMap<String, 
Integer>{*},这是两个大坑,在读取的地方有问题,如下:

!image-2022-12-01-18-31-09-890.png|width=956,height=375!

 
h1. Dev Design

在返回值时对数字进行类型转换即可,目前先使用这种方式:

!image-2022-12-01-18-32-23-309.png|width=991,height=461!

 

 

 

  was:
h1. Root Cause

写入 JSON 文件的数字读出来识别为 Integer 类型,这与需要的 Long 
类型不一致,导致出现类型转换错误,{{{}totalStorageSize{}}} 就写入了初始值 -1。

解释为什么一开始报错,等一会儿就恢复正常了:KE 有个 {{EpochStore}} 用于判断当前节点是否为 leader 
节点,但是这个同步获取的过程不是立即进行的,需要等 KE 完全启动完成,在优化 WorkingDir 的 issue 中有个逻辑是{*}只有 leader 
节点写,其他节点只读{*},所以当 KE 刚启动的时候,当前节点还是读节点,此时去 HDFS 上读取 
{{_metrics/hdfsCapacity.json}} 时读出来的数据类型是 Integer,返回时会报错,如下:

!image-2022-12-01-18-29-18-893.png|width=904,height=357!

而抛出异常的地方吞掉了详细信息,仅在 {{logs/kylin.schedule.log}} 留下一条类型转换的异常,如下:

!image-2022-12-01-18-30-36-346.png|width=939,height=476!

 

过了一段时间恢复正常是因为经过元数据的初始化等等操作之后,当前节点可以正确识别为 leader 节点,此时会对每个 project 的 HDFS 
使用大小进行计算,内存中维护的数据是正确匹配的 Long 类型,再次覆写 HDFS 上对应的文件。

{*}被写入 JSON 文件的数字是不包含数据类型的,可能会自动当成 Integer 处理{*},另外 {*}JDK 这边 
ConcurrentHashMap<String, Long> 能接住ConcurrentHashMap<String, 
Integer>{*},这是两个大坑,在读取的地方有问题,如下:

!image-2022-12-01-18-31-09-890.png|width=956,height=375!

 
h1. Dev Design

在返回值时对数字进行类型转换即可,目前先使用这种方式:

!image-2022-12-01-18-32-23-309.png|width=991,height=461!

 

 

 


> HDFS Capacity data type conversion error
> ----------------------------------------
>
>                 Key: KYLIN-5325
>                 URL: https://issues.apache.org/jira/browse/KYLIN-5325
>             Project: Kylin
>          Issue Type: Bug
>          Components: Others
>            Reporter: Jiale He
>            Priority: Major
>             Fix For: 5.0-alpha
>
>         Attachments: image-2022-12-01-18-29-18-893.png, 
> image-2022-12-01-18-30-36-346.png, image-2022-12-01-18-31-09-890.png, 
> image-2022-12-01-18-32-23-309.png
>
>
> h1. Root Cause
> 写入 JSON 文件的数字读出来识别为 Integer 类型,这与需要的 Long 
> 类型不一致,导致出现类型转换错误,{{{}totalStorageSize{}}} 就写入了初始值 -1。
> 解释为什么一开始报错,等一会儿就恢复正常了:Kylin 有个 {{EpochStore}} 用于判断当前节点是否为 leader 
> 节点,但是这个同步获取的过程不是立即进行的,需要等 KE 完全启动完成,在优化 WorkingDir 的 issue 中有个逻辑是{*}只有 leader 
> 节点写,其他节点只读{*},所以当 KE 刚启动的时候,当前节点还是读节点,此时去 HDFS 上读取 
> {{_metrics/hdfsCapacity.json}} 时读出来的数据类型是 Integer,返回时会报错,如下:
> !image-2022-12-01-18-29-18-893.png|width=904,height=357!
> 而抛出异常的地方吞掉了详细信息,仅在 {{logs/kylin.schedule.log}} 留下一条类型转换的异常,如下:
> !image-2022-12-01-18-30-36-346.png|width=939,height=476!
>  
> 过了一段时间恢复正常是因为经过元数据的初始化等等操作之后,当前节点可以正确识别为 leader 节点,此时会对每个 project 的 HDFS 
> 使用大小进行计算,内存中维护的数据是正确匹配的 Long 类型,再次覆写 HDFS 上对应的文件。
> {*}被写入 JSON 文件的数字是不包含数据类型的,可能会自动当成 Integer 处理{*},另外 {*}JDK 这边 
> ConcurrentHashMap<String, Long> 能接住ConcurrentHashMap<String, 
> Integer>{*},这是两个大坑,在读取的地方有问题,如下:
> !image-2022-12-01-18-31-09-890.png|width=956,height=375!
>  
> h1. Dev Design
> 在返回值时对数字进行类型转换即可,目前先使用这种方式:
> !image-2022-12-01-18-32-23-309.png|width=991,height=461!
>  
>  
>  



--
This message was sent by Atlassian Jira
(v8.20.10#820010)

Reply via email to