복붙노트

[HADOOP] 스칼라에서 HBase 스캔 TimeRange가 작동하지 않음

HADOOP

스칼라에서 HBase 스캔 TimeRange가 작동하지 않음

시간 범위에 따라 데이터를 검색하는 스칼라 코드를 작성합니다. 내 코드는 다음과 같습니다.

object Hbase_Scan_TimeRange {

  def main(args: Array[String]): Unit = {
    //===Basic Hbase (Non Deprecated)===Start
    Logger.getLogger(this.getClass)
    Logger.getLogger("org").setLevel(Level.ERROR)
    BasicConfigurator.configure()
    val conf = HBaseConfiguration.create()
    val connection = ConnectionFactory.createConnection(conf)
    val admin  = connection.getAdmin()
    //===Basic Hbase (Non Deprecated)===End

    val scan = new Scan()
    val _min = 1470387596203L
    val _max = 1470387596204L
    scan.setTimeRange(1470387596203L,1470387596204L)
    val table = connection.getTable(TableName.valueOf("tm_movie"))
    val scanner  = table.getScanner(scan)
    var result = scanner.next()
    println()
    while (result != null ) {
      //===start
      println(result)
    }
  }
}

그러나 작동하지 않으며 여전히 tm_movie의 모든 데이터를 표시합니다.

Hbase Shell의 아래 쿼리와 동일 할 것으로 예상됩니다.

scan 'tm_movie', { TIMERANGE => [1470387596203,1470387596204] }

어떤 아이디어?

해결법

  1. ==============================

    1.Iterator를 수정하여 솔루션을 찾았습니다. 내 코드는 다음과 같습니다.

    Iterator를 수정하여 솔루션을 찾았습니다. 내 코드는 다음과 같습니다.

    object Hbase_Scan_TimeRange {
    
      def main(args: Array[String]): Unit = {
        //===Basic Hbase (Non Deprecated)===Start
        Logger.getLogger(this.getClass)
        Logger.getLogger("org").setLevel(Level.ERROR)
        BasicConfigurator.configure()
        val conf = HBaseConfiguration.create()
        val connection = ConnectionFactory.createConnection(conf)
        val admin  = connection.getAdmin()
        //===Basic Hbase (Non Deprecated)===End
    
        val scans = new Scan()
        scans.setMaxVersions(1)
        val _min = 1470387596203L
        val _max = 1470387596204L
        scans.setTimeRange(1470387596203L, 1470387596204L)
    
        val table = connection.getTable(TableName.valueOf("tm_movie"))
        val scanner  = table.getScanner(scans)
        val result = scanner.iterator()
        while(result.hasNext)
        {
            val data = result.next()
            val movieId = Bytes.toString(data.getValue(Bytes.toBytes("data"),Bytes.toBytes("movieId")))
            val movieName = Bytes.toString(data.getValue(Bytes.toBytes("data"),Bytes.toBytes("movieName")))
            val movieGenre = Bytes.toString(data.getValue(Bytes.toBytes("data"),Bytes.toBytes("movieGenre")))
    
            println()
            println("movieGenre::"+movieGenre)
            println("movieName::"+movieName)
            println("movieId::"+movieId)
        }
    
      }
    }
    
  2. from https://stackoverflow.com/questions/38887556/hbase-scan-timerange-does-not-work-in-scala by cc-by-sa and MIT license