샘플 HBase POC



이 게시물에서는 HBase의 개념 증명 샘플에 대해 설명합니다. HBase에 대한 이해를 높이기 위해 개념에 대한 명확한 설명을 찾을 수 있습니다.

이 블로그에서는 HBase의 개념 증명 샘플에 대해 설명합니다.





여기에 아래 이미지와 같은 데이터 세트가 있습니다.

Sample_Hbase_Use_case



이 데이터 세트는 총 수신 통화, 발신 통화 및 특정 날짜에 특정 휴대폰 번호에서 보낸 메시지에 대한 세부 정보로 구성됩니다.

첫 번째 필드는 날짜, 두 번째 필드는 휴대폰 번호, 세 번째 필드는 총 수신 통화 시간, 네 번째 필드는 총 발신 통화 시간, 다섯 번째 필드는 총 메시지 전송 수를 나타냅니다.

이제 우리의 임무는 특정 날짜의 전화 번호에서 수신 및 발신 전화 및 메시지 전송 기간에 대한 정보를 검색하는 것입니다.



이 사용 사례에서는 15 개의 레코드를 필터링하려고합니다.이를 달성하기위한 HBase 프로그램이 있습니다.

아래는 완전한 코드입니다.

공공의 수업 견본{

은밀한 공전 구성 conf

공전 HTable

공공의 sample (문자열 tableName, 문자열 colFams) 던지다 IOException {

conf = HBaseConfiguration. 창조하다 ()

createTable (tableName, colFams)

= 새로운 HTable ( conf , tableName)

}

createTable (문자열 tableName, 문자열 colFams) 던지다 IOException {

HBaseAdmin hbase = 새로운 HBaseAdmin ( conf )

HTableDescriptor desc = 새로운 HTableDescriptor (tableName)

HColumnDescriptor 메타 = 새로운 HColumnDescriptor (colFams.getBytes ())

desc.addFamily (메타)

hbase.createTable (desc)

}

공공의 공전 addColumnEntry (문자열 tableName, 문자열 행,

문자열 colFamilyName, 문자열 colName, 문자열 값)

던지다 IOException {

바이트 [] rowKey = 바이트. toBytes (열)

putdata = 새로운 Put (rowKey)

putdata.add (바이트. toBytes (colFamilyName), 바이트. toBytes (colName),

바이트. toBytes (값))

.put (putdata)

}

공공의 공전 getAllRecord (문자열 tableName, 문자열 startPartialKey,

문자열 endPartialKey) 던지다 IOException {

시험 {

자바의 해시 세트는 무엇입니까

스캔 s

만약 (startPartialKey == 없는 || endPartialKey == 없는 )

s = 새로운 주사()

그밖에

s = 새로운 스캔 (바이트. toBytes (startPartialKey),

바이트. toBytes (endPartialKey))

ResultScanner ss = .getScanner (s)

HashMapoutputRec = 새로운 HashMap()

문자열 imsi =“”

...에 대한 (결과 r : ss) {

HashMap keyVal = 새로운 HashMap ()

...에 대한 (KeyValue kv : r.raw ()) {

imsi = 새로운 문자열 (kv.getRow ()). substring (10)

keyVal.put ( 새로운 문자열 (kv.getQualifier ()),

기계 학습을 배우기위한 전제 조건

새로운 문자열 (kv.getValue ()))

outputRec.put (imsi, keyVal)

만약 (keyVal.size () == 3)

체계. .println (take +””+“Incoming minutes :”

+ keyVal.get (“c1 ″) +”예정 시간 :”

+ keyVal.get (“c2 ″) +”메시지 :”

+ keyVal.get ( 'c3'))

}

}

} 드디어 {

}

}

공공의 공전 main (문자열 [] 인수) 던지다 IOException {

문자열 tableName = 'daterecords'

문자열 colFamilyNames =“i”

샘플 테스트 = 새로운 sample (tableName, colFamilyNames)

문자열 fileName =“/ home / cloudera / Desktop / data”

// 한 번에 한 줄을 참조합니다.

문자열 줄 = 없는

시험 {

// FileReader는 기본 인코딩으로 텍스트 파일을 읽습니다.

FileReader fileReader = 새로운 FileReader (파일 이름)

// 항상 BufferedReader에 FileReader를 래핑합니다.

BufferedReader bufferedReader = 새로운 BufferedReader (fileReader)

동안 ((라인 = bufferedReader.readLine ())! = 없는 ) {

String [] values ​​= line.split ( '')

addColumnEntry (tableName, values ​​[0] + '-'+ values ​​[1],

colFamilyNames, 'c1', 값 [2])

addColumnEntry (tableName, values ​​[0] + '-'+ values ​​[1],

colFamilyNames, 'c2', 값 [3])

addColumnEntry (tableName, values ​​[0] + '-'+ values ​​[1],

colFamilyNames, 'c3', 값 [4])

}

bufferedReader.close ()

} 잡기 (FileNotFoundException 예) {

체계. .println (“파일‘”+ fileName +“‘”을 (를) 열 수 없습니다.)

} 잡기 (IOException 예) {

체계. .println (“파일‘”+ fileName +“‘”읽기 오류)

// 또는 다음과 같이 할 수 있습니다.

// ex.printStackTrace ()

}

getAllRecord (tableName,“20140315”,“20140316”)

}

}

여기에서는 Configuration, HTable 클래스의 개체를 만들고 이름으로 Hbase Table을 만들었습니다. 날짜 기록 및 column family : 나는 .

이 사용 사례에서는 '-'로 구분 된 날짜와 휴대폰 번호의 조합을이 Hbase 테이블의 행 키와 수신, 발신 통화 시간 ','c1 ','열로 전송 된 메시지 수로 사용합니다. 열 패밀리 'i'의 경우 c2 ','c3 '.

Cloudera의 로컬 파일 시스템에 입력 데이터가 저장되어 있습니다. 따라서 파일에서 데이터를 읽는 Java Logic을 작성해야합니다.

다음은 Java 로직입니다.

이 방법에서는 column family의 각 열에 대한 테이블에 데이터를 저장합니다.

스캔 명령어를 사용하여 Hbase 테이블 'daterecords'에 저장된 데이터를 확인할 수 있습니다.

아래 이미지와 같은 데이터를 받게됩니다.

이제 데이터를 HBase 테이블에 성공적으로 삽입했습니다.

특정 날짜의 테이블에 저장된 레코드를 검색해 보겠습니다.

이 사용 사례에서는 Date : 15의 레코드를 검색하려고합니다.2014 년 3 월

레코드를 검색하기 위해 메서드를 만들었습니다.

getAllRecord (문자열 tableName, 문자열 startPartialKey, 문자열 endPartialKey)

첫 번째 매개 변수는 테이블 이름을 나타내고 두 번째 매개 변수는 데이터를 검색해야하는 시작 날짜를 나타내고 세 번째 매개 변수는 시작 날짜의 다음 날짜입니다.

예 :

getAllRecord (tableName,“20140315”,“20140316”)

이제 이해합시다 논리 이 방법의.

startPartialKey 및 endPartialKey의 도움으로 HBase API를 사용하여 Hbase 테이블을 스캔하려고합니다.

StartPartialKey 및 endPartialkey가 null이 아니므로 else 블록으로 이동하여 startPartialKey 값을 가진 레코드를 스캔합니다.

자바 예제에서 xml 파일 읽기

Hbase 테이블의 스캔 된 레코드를 저장하는 Result scanner 객체와 결과가 될 출력을 저장하기위한 HashMap을 만들었습니다.

결과 스캐너에서 데이터 저장소를 가져오고 for 루프를 실행하기 위해 Result 개체를 생성하고 있습니다.

imsi는 휴대폰 번호를 저장하기 위해 정의 된 문자열이고 keyVal은 특정 전화기의 열에서 검색된 출력을 저장하는 해시 맵입니다.

우리는 20140315-1234567890rowkey Hbase 테이블에. 이 20140315는 날짜를 나타내고 1234567890은 휴대폰 번호를 나타냅니다.

휴대폰 번호 만 필요하므로 하위 문자열 메서드를 사용하여 검색합니다.

r.raw ()에서 데이터를 검색하고 Put을 사용하여 HashMap에 저장합니다.

마지막으로 콘솔에 인쇄하려고합니다.

출력은 아래 이미지와 같습니다.

Date : 15의 기록을 성공적으로 검색했습니다.2014 년 3 월.