Uploaded image for project: 'Kylin'
  1. Kylin
  2. KYLIN-5325

HDFS Capacity data type conversion error

    XMLWordPrintableJSON

Details

    • Bug
    • Status: Resolved
    • Major
    • Resolution: Fixed
    • None
    • 5.0-alpha
    • Others
    • None

    Description

      Root Cause

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

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

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

       

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

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

       

      Dev Design

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

       

       

       

      Attachments

        1. image-2022-12-01-18-29-18-893.png
          281 kB
          Jiale He
        2. image-2022-12-01-18-30-36-346.png
          435 kB
          Jiale He
        3. image-2022-12-01-18-31-09-890.png
          349 kB
          Jiale He
        4. image-2022-12-01-18-32-23-309.png
          326 kB
          Jiale He

        Activity

          People

            jlelehe Jiale He
            jlelehe Jiale He
            Votes:
            0 Vote for this issue
            Watchers:
            2 Start watching this issue

            Dates

              Created:
              Updated:
              Resolved: