들어가며
이 포스팅에서는 Hbase 로컬 설치 방법과, 로컬 웹 어플리케이션을 띄워서 로컬의 Hbase와 연동하는 방법에 대해 포스팅 할 예정입니다.
설치 환경은 다음과 같습니다.
- 맥 요세미티
- JDK 1.8
- Spring Boot
- Intellij
Homebrew install
Homebrew는 맥에서 사용하는 패키지 매니저입니다. 이를 사용하여 Hbase를 설치할 예정입니다. 여기 에서 사용법을 확인하실 수 있습니다만, 설치 방법을 간단하게 옮겨 두겠습니다.
터미널을 열고
/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"이 명령어를 입력하시면 Homebrew가 설치됩니다.
install Hbase
Homebrew를 설치하였다면, Hbase를 설치할 차례입니다.
brew install hbase명령어를 입력하면 Hbase를 설치할 수 있습니다.
setting
이후에는 Hbase 세팅을 진행해야 합니다.
- /usr/local/Cellar/hbase/{version}/libexec/conf 으로 이동합니다.
- hbase-site.xml을 vi 로 엽니다. Hbase 설정 기본 구성 파일입니다.
- 설정을 추가합니다.
<!-- add quorum to localhost-->
<property>
<name>hbase.zookeeper.quorum</name>
<value>localhost</value>
</property>
<!-- add znode parent config -->
<property>
<name>zookeeper.znode.parent</name>
<value>/hbase-unsecure</value>
</property>- quorum은 Hbase의 클러스터 설정입니다. 이곳에 클러스터로 사용할 node의 주소를 입력하면 되는데요. 로컬에서 스탠드얼론으로 띄울 것이기 때문에, localhost 주소를 입력하겠습니다.
- zookeeper는 znode라는 데이터 저장 객체를 가지고 있습니다. 이 설정은 Hbase에서 사용할 Root Znode를 가리키는 설정입니다. hbase-unsecure 로 세팅해줍니다.
/etc/hosts 수정
/ets/hosts 파일에 다음과 같은 값을 추가합니다.
127.0.0.1 localhostSpirng Boot 설치
JDK 와 Intellij는 깔려 있다고 가정하겠습니다. 메이븐 프로젝트를 하나 생성한 다음에, pom.xml 에 다음과 같은 설정을 추가합니다.
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>org.springframework</groupId>
<artifactId>gs-spring-boot</artifactId>
<version>0.1.0</version>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.5.2.RELEASE</version>
</parent>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.apache.hbase</groupId>
<artifactId>hbase-client</artifactId>
<version>1.3.1</version>
</dependency>
</dependencies>
<properties>
<java.version>1.8</java.version>
</properties>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>Application.java
그 후에 java 아래에 hbase 패키지를 생성하고, 그 아래에 Application.java를 생성하겠습니다. Application.java에서는 스프링 부트의 설정을 잡아주고, Hbase 커넥션을 빈으로 생성하는 역할을 합니다.
package hbase;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.hbase.HBaseConfiguration;
import org.apache.hadoop.hbase.client.Connection;
import org.apache.hadoop.hbase.client.ConnectionFactory;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.Bean;
import java.io.IOException;
@SpringBootApplication
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
@Bean
public Connection connect() throws IOException {
Configuration conf = HBaseConfiguration.create();
conf.set("hbase.zookeeper.property.clientPort", "2181");
conf.set("hbase.zookeeper.quorum", "127.0.0.1");
conf.set("zookeeper.znode.parent", "/hbase-unsecure");
Connection conn = ConnectionFactory.createConnection(conf);
return conn;
}
}main을 실행하면 임베디드 톰캣이 뜨면서 Hbase 아래에 있는 서비스와 컨트롤러를 컴포넌트 스캔으로 읽을 것입니다.
Connect 메서드는 Hbase 클라이언트에서 로컬 Hbase DB에 접근할 수 있게 Baen을 띄워 놓습니다.
사용 예제
앞에서 Hbase DB에 접근할 수 있게 커넥션을 Bean으로 설정하였습니다. 설정한 Bean을 사용하는 코드는 다음과 같습니다.
@Autowired
private Connection connection;
...
public void addUser(String user, String name, String email, String password) throws IOException {
TableName tableName = TableName.valueOf(TABLE_NAME);
// use table as needed, the table returned is lightweight
Table table = connection.getTable(tableName);
Put p = mkPut(new User(user, name, email, password));
table.put(p);
table.close();
}이와 같이 테이블 이름을 가지고 객체를 생성하여, connection.getTable을 호출하여 테이블 객체를 획득할 수 있습니다. 이 테이블 객체를 가지고 로컬 Hbase에 접근하여 데이터를 put, get 할 수 있습니다.