백엔드

Apache Ignite에 대해 알아보자 - (2)설치 및 실행

CyberI 2017. 12. 22. 18:01

 

 

 

 

이전 포스팅에서 개념에 대해 살펴봤으니, 이번 편에서는 실제로 로컬에서 테스트를 해보려고 합니다. Ignite 사이트에 Getting started라는 메뉴에서 Ignite를 돌려볼 수 있는 몇 가지 방법에 대해 설명을 해놓았습니다. 이 포스팅에서는 binary 배포판을 다운받아서 시작하는 방법과 Maven 프로젝트를 생성해 pom 파일에서 dependency를 추가하는 방법을 다루고 있습니다.

1. 설치하기

https://ignite.apache.org/download.cgi 에서 Apache Ignite ZIP 파일을 다운로드 받아 압축을 풀고, 그 경로를 IGNITE_HOME으로 등록합니다. 가이드에는 이 스텝은 선택적(optional)이라고 나와있습니다. 이 과정을 생략하고 진행해본 결과, 디폴트 설정으로 그리드 노드를 실행하는 데에는 문제가 없습니다. 그러나 로그 설정을 위한 xml 파일에서 IGNITE_HOME 경로를 참조하고 있기 때문에 노드를 실행하며 나타나는 모든 로그를 기록하는 .log 파일을 생성하지 못했습니다. 그래서 IGNITE_HOME을 지정해주었습니다.

그리고 소스가 아니라 바이너리 릴리즈로 받는 것이 실행할 때 별도의 빌드가 필요없어 간편합니다. git 저장소에서 clone을 받아 메이븐 빌드를 하는 것도 시도해봤는데, package를 하던 중 모듈이 많아 java.lang.OutOfMemoryError: Java heap space error가 발생하여 메모리를 올려줘도 같은 에러가 계속 발생하여, 결국 포기하였습니다.(!) 저는 아래 캡처 화면과 같이 최신 버전 소스를 받았습니다.

 

다운로드 후 압축을 풀고 루트 경로를 IGNITE_HOME이라는 환경변수로 등록합니다. ignite-core 코드가 보고싶다면 git repository에서 클론을 받거나(https://git-wip-us.apache.org/repos/asf/ignite), source 배포판을 다운로드 받아서 볼 수 있습니다.

2. 테스트 프로젝트 생성

1) binary 배포판으로 생성

위에서 다운로드 받은 파일의 압축을 풀어보면 아래의 화면과 같은 구조를 가지고 있습니다.

bin 폴더에는 ignite 노드를 실행할 수 있는 sh, bat 파일이 들어있습니다. config 폴더에는 로그와 bean 설정 xml 파일들이 들어있고, libs 폴더에는 ignite-core jar 파일을 비롯하여 필수 및 선택적 기능의 jar파일들이 들어있습니다. 그리고 마지막으로 examples 폴더에는 예제 소스가 있습니다. 따라서 IDE툴에서 IGNITE_HOME 경로를 루트로 하는 자바 프로젝트를 생성한 후  examples\src\main\java를 소스 폴더로 등록하고 libs 폴더를 library로 설정하면 툴 내에서 예제 파일들을 그대로 실행하거나 추가 및 수정을 하면서 기능 테스트를 해볼 수 있습니다.

2) 메이븐 프로젝트로 생성

메이븐에 익숙한 분이라면 1번 방법보다 이 방법이 더 편하다고 느낄 것 같습니다. 메이븐으로 Ignite를 시작하기 위해서 필수적인 dependency는 ignite-core 딱 하나입니다. 가이드에는 스프링 기반의 xml 설정을 위한 ignite-spring과 SQL 쿼리를 위한 ignite-indexing도 종종 필요한 dependency로 소개하고 있습니다. IDE툴에서 메이븐 프로젝트를 하나 생성한 후 pom.xml 파일에 dependency만 추가하면 아주 간단하게 테스트 프로젝트를 생성할 수 있습니다.

<properties>
    <ignite.version>2.3.0</ignite.version>
</properties>

<dependencies>
    <dependency>
        <groupId>org.apache.ignite</groupId>
        <artifactId>ignite-core</artifactId>
        <version>${ignite.version}</version>
    </dependency>
    <dependency>
        <groupId>org.apache.ignite</groupId>
        <artifactId>ignite-spring</artifactId>
        <version>${ignite.version}</version>
    </dependency>
    <dependency>
        <groupId>org.apache.ignite</groupId>
        <artifactId>ignite-indexing</artifactId>
        <version>${ignite.version}</version>
    </dependency>
    <dependency>
        <groupId>org.apache.ignite</groupId>
        <artifactId>ignite-log4j</artifactId>
        <version>${ignite.version}</version>
    </dependency>

</dependencies>

   

3. Ignite node 실행하기

1) Java 코드로 실행하기

전 포스팅에서 라이프사이클에 대해 소개를 하며, 그리드 노드를 생성하는 법을 언급하였습니다. 모든 설정을 default로 하고 node를 생성하는 방법은 아주아주 간단합니다. 테스트 클래스를 만들고 Ignite ignite = Ignition.start(); 코드를 실행하면 Ignite node가 시작됩니다. 설정을 변경하는 방법은 두 가지가 있습니다. 첫 째는 아래와 같이 start() 메소드에 변경하고자하는 property를 설정한 xml 파일 경로 문자열을 파라미터로 넘기면 됩니다.

Ignition.start("examples/config/persistentstore/example-persistent-store.xml")

두번째는 설정 관련 클래스인 IgniteConfiguration의 인스턴스를 생성하여 설정에 관한 set 메소드를 호출하여 원하는대로 설정한 후 start() 메소드에 xml 경로 대신 IgniteConfiguration 인스턴스를 파라미터로 넘기는 것입니다.

2) command창에서 실행하기

 command창에서 실행시키는 방법도 아주 간단합니다. command창을 관리자권한으로 실행시킨 후 IGNITE_HOME 경로의 bin 디렉토리로 이동합니다. 그런 후 ignite.bat 를 실행합니다. os가 리눅스라면 ignite.sh을 실행합니다. 만약 특정 설정 파일로 실행하고 싶은 경우에는 ignite.bat 뒤에 경로를 입력하고 실행하면 됩니다. 입력하지 않으면 default 설정으로 시작됩니다.

ex1. 기본 설정으로 시작하는 경우

$ cd C:\intellij\workspace\apache-ignite-fabric-2.3.0-bin\bin

$ ignite.bat

ex2. 특정 설정 파일로 시작하는 경우

$ cd C:\intellij\workspace\apache-ignite-fabric-2.3.0-bin\bin

$ ignite.bat examples/config/persistentstore/example-persistent-store.xml

위의 어느 방법으로 하던지, 노드를 실행하면 콘솔에 다음과 같은 로그가 찍힙니다.

로그를 보다보니 몇 가지 사실을 알게되었습니다.

  • 콘솔에 출력되는 로그 모드를 설정할 수 있습니다. 기본적으로는 Quiet mode로 설정되어 있는데, 이 경우에 콘솔에는 핵심 내용만 출력이 됩니다. 만약 전체 내용이 출력되기를 원한다면 IGNITE_HOME 경로에 bin 폴더에서 운영체제에 맞게 ignite.sh 혹은 ignite.bat 파일에 -DIGNITE_QUIET=false 를 추가해야 합니다.
  • 전체 로그 내용은 기본으로 설정된 로그 파일 경로에 별도로 저장됩니다. 경로 및 이름 설정은 아래와 같습니다. 로그 파일에는 콘솔에 찍히는 것보다 더욱 자세한 내용이 기록됩니다.
  • ${IGNITE_HOME}/work/log/ignite-${sys:nodeId}.log
  • 2.3.0 버전은 가장 최신의 1.8 JVM 버전을 사용하기를 권장합니다. 처음에 프로젝트에서 사용하는 자바 버전을 1.7로 설정했더니 'Switch to the most recent 1.8 JVM version'이라는 메시지가 로그에 떴습니다. 그 이유는 가비지 콜렉터(Garbage Collector)와 관련이 있습니다. 먄약 G1 가비지 콜렉터(Garbage-First garbage collector)를 사용한다면, 성능이 계속 향상되고 있으므로 JDK 8 가장 최신 버전을 사용하기를 권장하는 것입니다. G1 가비지 콜렉터와 Ignite gc 튜닝에 대해서는 추후에 따로 정리를 해야겠습니다.
  • 실행 시 몇 가지 JVM 옵션을 추가하기를 권장합니다. JVM option을 별도로 설정하지 않고 실행했더니 로그에 몇 가지 메시지가 떴습니다. Ignite 사용 시 성능 향상을 위해 옵션 설정을 권장하는 것 같습니다. 로그에 나온 옵션을 다 추가한 후 재실행했더니 로그에 더 이상 관련 메시지가 뜨지 않았습니다.
    1. -server : JVM 서버 모드를 가능하게 할 것
    2. -Xms<size>[g|G|m|M|k|K] : JVM 힙 메모리 최대 사이즈를 설정할 것
    3. -XX:MaxDirectMemorySize=<size>[g|G|m|M|k|K] : OutOfMemory(OOME):Direct buffer memory 에러가 나면 최대 다이렉트 메모리를 크기를 설정할 것
    4.  -XX:+DisableExplicitGC : System.gc()를 호출하는 처리는 불가능하게 할 것
    5. -Xms512m -Xmx512m : 초기 힙 사이즈가 512MB보다 작아서는 안될 것

설치와 기본 노드 실행까지는 끝냈으니 다음 포스팅에서는 기능별 테스트를 해보도록 하겠습니다.

 


Apache Ignite 시리즈 1편에 대한 내용을 살펴보고 싶다면, 아래 링크를 클릭해주세요.

▶ Apache Ignite에 대해 알아보자 - (1)개념 이해