public static class HFileBlockIndex.BlockIndexWriter extends Object implements InlineBlockWriter
| Modifier and Type | Field and Description | 
|---|---|
| private HFileBlock.Writer | blockWriter | 
| private CacheConfig | cacheConfCacheConfig, or null if cache-on-write is disabled | 
| private HFileBlockIndex.BlockIndexChunk | curInlineChunkCurrent leaf-level chunk. | 
| private byte[] | firstKey | 
| private int | maxChunkSizeThe maximum size guideline of all multi-level index blocks. | 
| private int | minIndexNumEntriesThe maximum level of multi-level index blocks | 
| private String | nameForCachingName to use for computing cache keys | 
| private int | numLevelsThe number of block index levels. | 
| private HFileBlockIndex.BlockIndexChunk | rootChunkWhile the index is being written, this represents the current block
 index referencing all leaf blocks, with one exception. | 
| private boolean | singleLevelOnlyWhether we require this block index to always be single-level. | 
| private long | totalBlockOnDiskSizeTotal compressed size of all index blocks. | 
| private long | totalBlockUncompressedSizeTotal uncompressed size of all index blocks. | 
| private long | totalNumEntriesThe total number of leaf-level entries, i.e. | 
| Constructor and Description | 
|---|
| HFileBlockIndex.BlockIndexWriter()Creates a single-level block index writer | 
| HFileBlockIndex.BlockIndexWriter(HFileBlock.Writer blockWriter,
                                CacheConfig cacheConf,
                                String nameForCaching)Creates a multi-level block index writer. | 
| Modifier and Type | Method and Description | 
|---|---|
| void | addEntry(byte[] firstKey,
        long blockOffset,
        int blockDataSize)Add one index entry to the current leaf-level block. | 
| void | blockWritten(long offset,
            int onDiskSize,
            int uncompressedSize)Called after an inline block has been written so that we can add an
 entry referring to that block to the parent-level index. | 
| void | ensureSingleLevel() | 
| private void | expectNumLevels(int expectedNumLevels) | 
| boolean | getCacheOnWrite() | 
| BlockType | getInlineBlockType()The type of blocks this block writer produces. | 
| int | getNumLevels() | 
| int | getNumRootEntries() | 
| long | getTotalUncompressedSize()The total uncompressed size of the root index block, intermediate-level
 index blocks, and leaf-level index blocks. | 
| void | setMaxChunkSize(int maxChunkSize) | 
| void | setMinIndexNumEntries(int minIndexNumEntries) | 
| boolean | shouldWriteBlock(boolean closing)Whether there is an inline block ready to be written. | 
| long | writeIndexBlocks(org.apache.hadoop.fs.FSDataOutputStream out)Writes the root level and intermediate levels of the block index into
 the output stream, generating the tree from bottom up. | 
| void | writeInlineBlock(DataOutput out)Write out the current inline index block. | 
| private void | writeIntermediateBlock(org.apache.hadoop.fs.FSDataOutputStream out,
                      HFileBlockIndex.BlockIndexChunk parent,
                      HFileBlockIndex.BlockIndexChunk curChunk) | 
| private HFileBlockIndex.BlockIndexChunk | writeIntermediateLevel(org.apache.hadoop.fs.FSDataOutputStream out,
                      HFileBlockIndex.BlockIndexChunk currentLevel)Split the current level of the block index into intermediate index
 blocks of permitted size and write those blocks to disk. | 
| void | writeSingleLevelIndex(DataOutput out,
                     String description)Writes the block index data as a single level only. | 
private HFileBlockIndex.BlockIndexChunk rootChunk
writeIndexBlocks(FSDataOutputStream), this contains the final
 root-level index.private HFileBlockIndex.BlockIndexChunk curInlineChunk
private int numLevels
writeIndexBlocks(FSDataOutputStream) has been called. The
 initial value accounts for the root level, and will be increased to two
 as soon as we find out there is a leaf-level in
 blockWritten(long, int, int).private HFileBlock.Writer blockWriter
private byte[] firstKey
private long totalNumEntries
private long totalBlockOnDiskSize
private long totalBlockUncompressedSize
private int maxChunkSize
private int minIndexNumEntries
private boolean singleLevelOnly
private CacheConfig cacheConf
private String nameForCaching
public HFileBlockIndex.BlockIndexWriter()
public HFileBlockIndex.BlockIndexWriter(HFileBlock.Writer blockWriter, CacheConfig cacheConf, String nameForCaching)
blockWriter - the block writer to use to write index blockscacheConf - used to determine when and how a block should be cached-on-write.public void setMaxChunkSize(int maxChunkSize)
public void setMinIndexNumEntries(int minIndexNumEntries)
public long writeIndexBlocks(org.apache.hadoop.fs.FSDataOutputStream out)
                      throws IOException
out - FSDataOutputStreamIOExceptionpublic void writeSingleLevelIndex(DataOutput out, String description) throws IOException
out - the buffered output stream to write the index to. Typically a
          stream writing into an HFile block.description - a short description of the index being written. Used
          in a log message.IOExceptionprivate HFileBlockIndex.BlockIndexChunk writeIntermediateLevel(org.apache.hadoop.fs.FSDataOutputStream out, HFileBlockIndex.BlockIndexChunk currentLevel) throws IOException
out - currentLevel - the current level of the block index, such as the a
          chunk referencing all leaf-level index blocksIOExceptionprivate void writeIntermediateBlock(org.apache.hadoop.fs.FSDataOutputStream out,
                          HFileBlockIndex.BlockIndexChunk parent,
                          HFileBlockIndex.BlockIndexChunk curChunk)
                             throws IOException
IOExceptionpublic final int getNumRootEntries()
public int getNumLevels()
private void expectNumLevels(int expectedNumLevels)
public boolean shouldWriteBlock(boolean closing)
shouldWriteBlock in interface InlineBlockWriterclosing - whether the file is being closed, in which case we need to write
          out all available data and not wait to accumulate another blockpublic void writeInlineBlock(DataOutput out) throws IOException
writeInlineBlock in interface InlineBlockWriterout - IOExceptionpublic void blockWritten(long offset,
                int onDiskSize,
                int uncompressedSize)
blockWritten in interface InlineBlockWriteroffset - the offset of the block in the streamonDiskSize - the on-disk size of the blockuncompressedSize - the uncompressed size of the blockpublic BlockType getInlineBlockType()
InlineBlockWritergetInlineBlockType in interface InlineBlockWriterpublic void addEntry(byte[] firstKey,
            long blockOffset,
            int blockDataSize)
public void ensureSingleLevel()
                       throws IOException
IOException - if we happened to write a multi-level index.public boolean getCacheOnWrite()
getCacheOnWrite in interface InlineBlockWriterpublic long getTotalUncompressedSize()
Copyright © 2007–2019 The Apache Software Foundation. All rights reserved.