[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.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) } } }
from https://stackoverflow.com/questions/38887556/hbase-scan-timerange-does-not-work-in-scala by cc-by-sa and MIT license
'HADOOP' 카테고리의 다른 글
[HADOOP] 시간에 따른 버킷 레코드 (kafka-hdfs-connector) (0) | 2019.08.16 |
---|---|
[HADOOP] hadoop의 모든 매퍼에게 객체 사본을 전달하는 모범 사례 (0) | 2019.08.16 |
[HADOOP] MASTER = yarn-cluster를 사용하여 HiveFromSpark 예제를 실행하십시오. (0) | 2019.08.16 |
[HADOOP] TaskID. <init> (Lorg / apache / hadoop / mapreduce / JobID; Lorg / apache / hadoop / mapreduce / TaskType; I) V (0) | 2019.08.16 |
[HADOOP] LoadFunc에 대한 예제 및 추가 설명 (0) | 2019.08.16 |