Recommanded Free YOUTUBE Lecture: <% selectedImage[1] %>

Contents

Go 언어를 이용한 HBase 애플리케이션 개발

HBase 애플리케이션개발은 보통 Java를 이용하겠지만, go 언어를 이용해서 개발해 보려고 한다. 굳이 go를 이용하는 이유는 아직 java에 익숙치 않아서이다.(결국 java를 해야 할 것 같다.)

개발 환경

virtualbox를 이용해서 하둡클러스터를 만들고 그 위에 hbase를 구성했다. hbase 설치문서그대로 구성했으니 참고 한다.

데이터베이스

개발에 사용할 데이터베이스다.

 HBase Table

tutorialspoint.com의 데이터베이스 구조를 그대로 사용했다. personal data와 professional data 두 개의 컬럼 패밀리를 가지고 있다. 여기에 name, city, designation, salary 패밀리 정보들을 저장한다.

GoHbase

GoHbase라는 패키지를 찾았다. 아직 알파버전이기는 하지만 충분히 제품수준에서 사용 할 수 있을 것으로 보인다. pure hbase client로 Thrift gateway와 같은 다른 도구의 도움 없이 즉시 hbase에 접근가능한 장점이 있다.
package main

import (
    "context"
    "fmt"
    "github.com/tsuna/gohbase"
    "github.com/tsuna/gohbase/hrpc"
)

func main() {
    client := gohbase.NewClient("hadoop01,hadoop02,hadoop03")
    values := map[string]map[string][]byte{
        "personal data":     map[string][]byte{"city": []byte("pusan"), "name": []byte("sangbae")},
        "professional data": map[string][]byte{"designation": []byte("programer"), "salary": []byte("50000")},
    }
    putRequest, err := hrpc.NewPutStr(context.Background(), "emps", "2", values)
    if err != nil {
        panic(err)
    }
    _, err = client.Put(putRequest)
    if err != nil {
        panic(err)
    }
    getRequest, err := hrpc.NewGetStr(context.Background(), "emps", "1")
    if err != nil {
        panic(err)
    }
    getRsp, err := client.Get(getRequest)
    fmt.Println(len(getRsp.Cells))
    for _, v := range getRsp.Cells {
        fmt.Println(string(v.Row), ":", string(v.Family), string(v.Qualifier), string(v.Value))
    }

    getRequest, err = hrpc.NewGetStr(context.Background(), "emps", "2")
    if err != nil {
        panic(err)
    }
    getRsp, err = client.Get(getRequest)
    fmt.Println(len(getRsp.Cells))
    for _, v := range getRsp.Cells {
        fmt.Println(string(v.Row), ":", string(v.Family), string(v.Qualifier), string(v.Value))
    }
}
프로그램을 실행시켜보자.
# go run myhbase.go 
4
1 : personal data city seoul
1 : personal data name yundream
1 : professional data designation manager
1 : professional data salary 50000
4
2 : personal data city pusan
2 : personal data name sangbae
2 : professional data designation programer
2 : professional data salary 50000
hbase shell로 확인했다.
hbase(main):020:0> scan 'emps'
ROW  COLUMN+CELL 
 1   column=personal data:city, timestamp=1493549649430, value=seoul
 1   column=personal data:name, timestamp=1493549630369, value=yundream
 1   column=professional data:designation, timestamp=1493558408019, value=manager
 1   column=professional data:salary, timestamp=1493558423673, value=50000
 2   column=personal data:city, timestamp=1493560623259, value=pusan
 2   column=personal data:name, timestamp=1493560623259, value=sangbae
 2   column=professional data:designation, timestamp=1493560623259, value=programer
 2   column=professional data:salary, timestamp=1493560623259, value=50000 
2 row(s) in 0.1250 seconds