Uploaded image for project: 'Phoenix'
  1. Phoenix
  2. PHOENIX-6385

Not to use Scan#setSmall for HBase 2.x versions

    XMLWordPrintableJSON

Details

    • Improvement
    • Status: Resolved
    • Major
    • Resolution: Fixed
    • None
    • 5.1.1, 4.16.1, 4.17.0, 5.2.0
    • None
    • None

    Description

      /**
         * Set whether this scan is a small scan
         * <p>
         * Small scan should use pread and big scan can use seek + read seek + read is fast but can cause
         * two problem (1) resource contention (2) cause too much network io [89-fb] Using pread for
         * non-compaction read request https://issues.apache.org/jira/browse/HBASE-7266 On the other hand,
         * if setting it true, we would do openScanner,next,closeScanner in one RPC call. It means the
         * better performance for small scan. [HBASE-9488]. Generally, if the scan range is within one
         * data block(64KB), it could be considered as a small scan.
         * @param small
         * @deprecated since 2.0.0 and will be removed in 3.0.0. Use {@link #setLimit(int)} and
         *   {@link #setReadType(ReadType)} instead. And for the one rpc optimization, now we will also
         *   fetch data when openScanner, and if the number of rows reaches the limit then we will close
         *   the scanner automatically which means we will fall back to one rpc.
         * @see #setLimit(int)
         * @see #setReadType(ReadType)
         * @see <a href="https://issues.apache.org/jira/browse/HBASE-17045">HBASE-17045</a>
         */
        @Deprecated
        public Scan setSmall(boolean small) 
      

      In 1.x there is seperate ClientSmallScanner impl doing single RPC for scan. In 2.x by default it handles single RPC if there are less number of rows. We might have to setLimit.

      Also in 2.x setSmall() API sets the readType to be PRead. But this is good for small reads like only one hfile blocks get read. But what I noticed in phoenix is that even count query result in setting Scan as small scan and end up using PRead (This will result in full scan).
      So we should not be setting the ReadType at all. Instead rely on HBase to intelligently switch scan type (start with PRead and if it scans more data switch to stream read)

      Attachments

        Issue Links

          Activity

            People

              vjasani Viraj Jasani
              anoop.hbase Anoop Sam John
              Votes:
              0 Vote for this issue
              Watchers:
              5 Start watching this issue

              Dates

                Created:
                Updated:
                Resolved: