Uploaded image for project: 'HBase'
  1. HBase
  2. HBASE-27688

HFile splitting occurs during bulkload, the CREATE_TIME_TS of hfileinfo is 0

    XMLWordPrintableJSON

Details

    • Reviewed

    Description

      If HFile splitting occurs during bulkload, the CREATE_TIME_TS of hfileinfo =0,When HFile is copied after splitting, CREATE_TIME_TS of the original file is not copied。

      ##BulkLoadHFilesTool.class 
      /**
       * Copy half of an HFile into a new HFile.
       */
      private static void copyHFileHalf(Configuration conf, Path inFile, Path outFile,
        Reference reference, ColumnFamilyDescriptor familyDescriptor) throws IOException {
        FileSystem fs = inFile.getFileSystem(conf);
        CacheConfig cacheConf = CacheConfig.DISABLED;
        HalfStoreFileReader halfReader = null;
        StoreFileWriter halfWriter = null;
        try {
          。。。
          HFileContext hFileContext = new HFileContextBuilder().withCompression(compression)
            .withChecksumType(StoreUtils.getChecksumType(conf))
            .withBytesPerCheckSum(StoreUtils.getBytesPerChecksum(conf)).withBlockSize(blocksize)
            .withDataBlockEncoding(familyDescriptor.getDataBlockEncoding()).withIncludesTags(true)
            .build();
      // TODO .withCreateTime(EnvironmentEdgeManager.currentTime())      
      
      halfWriter = new StoreFileWriter.Builder(conf, cacheConf, fs).withFilePath(outFile)
            .withBloomType(bloomFilterType).withFileContext(hFileContext).build();
          HFileScanner scanner = halfReader.getScanner(false, false, false);
          scanner.seekTo();
          do {
            halfWriter.append(scanner.getCell());
          } while (scanner.next());
      
          for (Map.Entry<byte[], byte[]> entry : fileInfo.entrySet()) {
            if (shouldCopyHFileMetaKey(entry.getKey())) {
              halfWriter.appendFileInfo(entry.getKey(), entry.getValue());
            }
          }
        } finally {
          。。。
        }
      } 
      
      
      ##get lastMajorCompactionTs metric
      
        lastMajorCompactionTs = this.region.getOldestHfileTs(true);
      ...
        long now = EnvironmentEdgeManager.currentTime();
        return now - lastMajorCompactionTs;
      ...
      ##
      public long getOldestHfileTs(boolean majorCompactionOnly) throws IOException {
        long result = Long.MAX_VALUE;
        for (HStore store : stores.values()) {
          Collection<HStoreFile> storeFiles = store.getStorefiles();
         ...
          for (HStoreFile file : storeFiles) {
            StoreFileReader sfReader = file.getReader();
           ...
            result = Math.min(result, reader.getFileContext().getFileCreateTime());
          }
        }
        return result == Long.MAX_VALUE ? 0 : result;
      }

       

      Attachments

        Activity

          People

            alanlemma alan.zhao
            alanlemma alan.zhao
            Votes:
            0 Vote for this issue
            Watchers:
            3 Start watching this issue

            Dates

              Created:
              Updated:
              Resolved: