아파치 H베이스는 2007년 처음 만들어진 하둡 플랫폼을 위한 NoSQL 데이터베이스입니다. 2006년 구글에서 공개한 빅테이블(BigTable) 논문을 참고하여 만들어졌으며대용량의 분산된 데이터를 저장하기 위해서 무정지(Fault Tolerant) 방법을 제공하는 구글의 빅테이블과 비슷한 기능을 제공합니다. 2008년 아파치 하둡 프로젝트에 편입되었으며하둡의 분산 파일 시스템(HDFS, Hadoop Distributed File System)기반 위에서 데이터를 저장합니다또한 H베이스는 자바 언어(Java Language)로 만들어졌습니다.


결함 감내 시스템(Fault tolerant system)

 

구성하는 부품의 일부에서 결함(fault) 또는 고장(failure)이 발생하여도 정상적 혹은 부분적으로 기능을 수행할 수 있는 시스템입니다.


H베이스는 압축 기능과 자주 사용되는 데이터를 메모리에 미리 캐싱하는 인-메모리(In-Memory) 처리 기술과 초기 빅테이블에 제시하고 있는 Bloom 필터 기능을 제공합니다


Bloom Filter(블룸 필터)


블룸 필터는 파일에서 찾고자 하는 정보가 있는지 없는지를 알려주는 확률기반의 필터입니다블룸 필터를 이용하면 빠르게 데이터의 존재를 확인할 수 있습니다.

 

블룸 필터는 두가지 함수를 제공합니다하나는 추가하는 add()이고다른 하나는 존재하는지를 검사하는 isExist()입니다. add()가 실행되면 키를 해쉬 알고리즘을 이용하여 여러 개의 해시값을 나누고 버킷이라는 저장소에 저장합니다이후에 isExist()가 실행될 때 add()를 통해서 생성된 버킷을 이용하여 키가 있는지를 확인합니다


H베이스에 있는 테이블들은 하둡에서 동작하는 맵-리듀스(Map-Reduce) 잡들을 위한 입력출력을 제공하며클라이언트 프로그램은 자바 API REST, Avro 또는 다른 언어를 풍부하게 지원하는 쓰리프트(Thrift) 게이트웨이를 통하여 접근할 수 있습니다.


쓰리프트(Thrift)

 

다양한 언어를 지원하는 RPC서버와 RPC서버에서 제공하는 서비스를 호출하는 클라이언트 코드를 생성해주는 소프트웨어 프레임워크입니다.

 

① C++, Java, Python, PHP, Ruby, Erlang, Perl, C#, Java Script 등을 지원

② 서블릿(Servlet) 지원멀티스레드(Multi Thread) 지원

③ Async 지원, List, Set, Map 지원

④ RPC 기능 제공 및 서버/클라이언트을 다양한 언어로 구현이 가능

 

 

에이브로(Avro)

 

데이터 직렬화를 기본 개념으로 데이터 접근은 RPC 호출뿐 아니라 파일에 데이터를 저장하는 용도로 사용할 수 있다.

 

① C, C++, Java, PHP, Python, Ruby 지원

② 하둡의 RPC Avro로 교체할 예정

③ Avro Thrift와 비슷한 기능을 대부분 지원

④ RPC 매커니즘과 데이터 직렬화 제공

 

 

원격 프로시져 호출(RPC, Remote Procedure Call)

 

한 프로그램이 네트워크상의 다른 컴퓨터에 위치하고 있는 프로그램에 서비스를 요청할 때 사용되는 프로토콜로서이때 서비스를 요청하는 프로그램은 네트워크에 대한 상세 내용을 알 필요가 없습니다. RPC는 클라이언트/서버 모델을 사용하는데서비스를 요청하는 프로그램이 클라이언트이고서비스를 제공하는 프로그램이 서버입니다



H베이스는 기존의 SQL 데이터베이스를 직접적으로 대체하지는 않지만 페이스북의 메시징 플랫폼과 핀터레스트카시니세일즈포스닷컴과 같은 다수의 기업에서  사용되고 있습니다.

 

 

H베이스의 특징

  ① 메모리에 우선 기록되어지며디스크에 저장된 후에는 읽기 전용 상태

  ② 추가적인 환경 구성없이 간단하게 클러스터를 추가하여 확장 가능

  ③ 대량의 Read/Write 기능을 지원하며 Fast Scans 기능 지원

  ④ 주키퍼(Zookeeper)를 이용한 고 가용성 보장

  ⑤ 마스터(Master)와 리전(Region) 서버 관리를위한 웹 기반의 UI 관리툴을 제공

 

 

논리 스토리지 구조

관계형 데이터베이스에서 테이블(Table)은 와이드 컬럼 스토어에서는 키스페이스(Keyspace)라고 불립니다키스페이스는 N개의 행(row)으로 구성되어 있고하나의 행(row) N개의 컬럼 패밀리(Column Family)로 구성되어 있고하나의 컬럼 패밀리는 N개의 컬럼으로 구성되어 있습니다.


[ H베이스의 데이터 모델 ]

 

 

H베이스 구조

H베이스는 완전한 분산 시스템입니다초기에 개발할 때부터 분산을 고려해서 설계되었습니다그래서 전통적인 단일-머신 가용성 전략은 하나의 노드(Node) 가 아닌 N개 노드(Node)들의 집합인 클러스터(Cluster) 수준에서 동작되도록 만들어졌습니다.

 

H베이스 클러스터는 두개의 파트로 구성이 되어 있습니다하나는 주키퍼(Zookeeper)로써 주로 설정 정보를 관리하며주키퍼 노드들로 구성된 클러스터를 형성하고 있습니다테이블에 대한 메타데이터는 마스터 서버(Master 서버)에서 관리를 합니다.

 

노드(Node)라는 용어가 자주 나오는데서버(Server) 또는 머신(Machine) 또는 하나의 컴퓨터(Computer)와 같은 의미라고 생각하시면 됩니다.

 

주키퍼 클러스터마스터 서버리전서버 관계 ]

 

마스터 노드는 여러 개의 리전서버를 관리합니다하단의 그림에서 ‘RS’가 하나의 리전서버입니다리전서버는 N개의 리전으로 구성되어 있습니다.

 

[ H베이스 Region Server의 구조 ]

 

리전서버에서의 리전은 테이블에 존재하는 데이터들의 부분 집합을 관리합니다그리고 각각의 리전은 기본값으로 설정된 256MB 보다 커지면 동일한 크기로 분리가 됩니다분리된 덩어리들은 리전이 되고 설정된 크기까지 데이터를 저장할 수 있습니다.

 

리전서버의 경우 테이블에 있는 데이터을 저장할 때 동일한 데이터를 3곳의 데이터 노드(DataNode)에 분산하여 저장함으로써 장애 발생으로부터 데이터의 손실을 예방합니다.


리전 서버의 구조 ]

 

 

HBase Write Path

데이터를 put()하면 일단 멤스토어(MemStore)에 데이터가 저장됩니다멤스토어가 가득차게 되면 HFile형식으로 파일로 기록이 되면 멤스토어에 저장되어 있는  데이터는 비워지게 됩니다. HFile은 한번 기록되면 변경할 수 있는 메소드가 없기 때문에 변경이 불가능하며 하나의 블록 크기는 64KB입니다.


[ H베이스 쓰기 동작 ]

 

 

WAL(Write Ahead Log)

다음 그림은 리전(Region)에 있는 데이터를 디스크에 파일로 저장하는 과정을 보여주는 시퀀스 다이어그램(Sequence Diagram)입니다. H베이스에서 모든 변경 작업(Puts/Deletes)은 특정 리전 서버의 멤스토어에 저장되고 동시에 WAL(Write Ahead Log) 파일안에 WALEdit 형태로 저장이 됩니다.

 

WALEdit는 하나의 트랜잭션을 나타내는 오브젝트이고하나 이상의 변경 작업을 가지고 있습니다. H베이스가 Single-Row 레벨의 트랜잭션을 지원하기 때문에, WALEdit는 오직 하나의 로우에 대한 정보만 가지고 있습니다. WAL 파일들은 설정된 시간(기본적으로 60분 마다이후에 지속적으로 변경되므로특정 시간에 하나의 리전 서버에는 오직 하나의WAL 파일만 존재합니다.

 

멤스토어에 저장되는 데이터는 휘발성 메모리에 저장되기 때문에시스템에 문제가 발생할 경우에 메모리에 있는 정보들은 모두 손실될 수 있습니다이러한 단점에도 불구하고 멤스토어를 사용하는 것은 쓰기 작업시에 빠른 속도를 보장하기 때문입니다.

 

만약 시스템에 문제가 발생하여 멤스토어에 저장된 데이터가 디스크(Disk)에 기록되지 않고 사라지는 경우에도WAL(Write Ahead Log) 파일을 이용하여 효율적으로 파일을 재생할 수 있습니다.



주키퍼(Zookeeper)의 역할

주키퍼는 복제(Replication)에서 중요한 역할을 담당합니다주키퍼는 슬레이브 클러스터(Slave Cluster)를 등록하거나 복제(Replication)을 시작/중지하거나새로운 WAL(Write Ahead Log)을 큐에 넣거나리전 서버의 장애를 핸들링하거나 등의 중요한 업무를 관리합니다.

 

 

H베이스를 사용하는 곳

H베이스는 엄격하지 않은 스키마(Schema) 구조에서 동작하는 NoSQL 계통의 데이터베이스로 단순한 데이터 구조나 연산이 별로 필요없는 채팅 프로그램에서 많이 이용되고 있습니다특히 H베이스는 쓰기 연산 성능이 다른 데이터베이스에 비해서 빠른 편이어서네이버의 라인(Line) 또는 페이스북의 메신저에서 많이 사용됩니다.

'빅데이터 > No SQL' 카테고리의 다른 글

NoSQL 7종 비교  (0) 2017.09.10
네오포제이(Neo4j)  (0) 2017.08.04
카산드라(Cassandra)  (0) 2017.08.04
카우치DB(Couch DB)  (0) 2017.08.04
몽고DB(Mongo DB)  (0) 2017.08.04

+ Recent posts