2020년 9월 20일 일요일

Apache Kafka [3] server.properties 환경설정


* https://www.ibm.com/support/knowledgecenter/ko/SSPFMY_1.3.5/com.ibm.scala.doc/config/iwa_cnf_scldc_kfk_prp_exmpl_c.html


$ vi /usr/local/kafka/config/server.properties


[ Server Basics ]

broker.id=1 : 브로커를 구분하기위한 ID


[ Socket Server Settings ]

listeners=PLAINTEXT://:9092 : 카프카 소켓서버가 수신하는 주소. 기본포트는 9092

num.network.threads=3 : 네트워크 요청을 처리하는 데 사용되는 스레드 수

num.io.threads=8 : 입력 및 출력 조작에 사용되는 스레드의 수

socket.send.buffer.bytes=102400 : 소켓서버가 사용하는 전송버퍼의 크기

socket.receive.buffer.bytes=102400 : 소켓서버가 사용하는 수신버퍼의 크기

socket.request.max.bytes=104857600 : 소켓 서버가 수락하는 요청의 최대 크기, Out Of Memory를 방지

queued.max.requests=16 : 네트워크 스레드가 차단되기 전에 허용되는 최대 스레드 수


[ Log Basics ]

log.dirs=/data1,/data2 : 로그 파일을 저장하려는 디렉토리

num.partitions=1 : 토픽당 기본 파티션의 수. 파티션이 많을수록 메세지 소비가 더 많은 병렬처리가 된다. 그러나 기본적으로 서버의 물리적 프로세서 수의 절반정도를 권한다. 예를 들어 8개의 프로세서가 있으면 4개로 지정

num.recovery.threads.per.data.dir=1 : 각 데이터 디렉토리에 대한 로그 복구에 사용되는 스레드 수

log.index.size.max.bytes=154624 : 오프셋 색인의 최대 크기

log.index.interval.bytes=4096 : 오프셋 색인에 추가되는 간격바이트

message.max.bytes=1000000 : 서버가 수신할 수 있는 메시지의 최대 크기

auto.create.topics.enable=true : 서버에서 토픽을 자동 생성 ( 존재하지 않는 토픽으로 메세지 보낼시 )


[ Internal Topic Settings ]

offsets.topic.replication.factor=1 : 

transaction.state.log.replication.factor=1 :

transaction.state.log.min.isr=1 : 

그룹 메타데이터 _consumer_offsets 과 _transaction_state에 대한 복제관련 설정 


Log Flush Policy ]

log.flush.interval.messages=10000 : 메시지가 플러시되기 전에 누적될 수 있는 최대 메시지 수

log.flush.interval.ms=1000 : 메시지가 플러시되기 전에 메모리에 유지할 수 있는 최대 시간

log.flush.scheduler.interval.ms=2000 : 로그가 플레시 되는 간격


Log Retention Policy ]

log.retention.hours=168 : 저장된 로그 보관시간

log.retention.bytes=1073741824 : 지정된 로그에서 보존되어야 하는 바이트 수

log.segment.bytes=1073741824 : 저장되는 로그파일 하나의 크기

log.retention.check.interval.ms=300000 : 로그 보관주기 체크시간

log.cleaner.enable=false : 로그 클리너사용. 설정 시 로그 보존 정책에서 지정된 보존 기간이 만료된 후 로그가 삭제됨


[ Zookeeper ] 

zookeeper.connect=hadoop01:2181,hadoop02:2181,hadoop03:2181/hadoop-kafka : 주키퍼 접속 정보

zookeeper.connection.timeout.ms=6000 : 브로커와 주키퍼 사이의 최대 연결 대기시간. 연결되지 않으면 타임아웃 발생


[ Group Coordinator Settings ]
group.initial.rebalance.delay.ms=0 : Group Coordinator가 초기 컨수머 재조정 시키는 시간. 개발 및 테스트를 위해 딜레이 없는 0으로 정의. 볼륨이 큰 운영환경에서는 3초 권장

Apache Kafka [2] - 설치


환경

가상머신 : Virtualbox 6.2.12

운영체제 : CentOS-7-x86_64-Everything-2003.ios

3대설치 각 host는 hadoop01, hadoop02, hadoop03으로 지정


1. virtual machine에 centOS-7을 올리고 설치


2. Java설치

카프카를 설치하기 전 주키퍼(zookeeper)를 설치해야 하는데, 주키퍼는 자바(java)애플리케이션이기에 먼저 설치해준다.

$ yum -y install java-1.8.0-openjdb


3. 호스트 이름변경

vi /etc/hosts를 열어 

111.11.11.1111    hadoop01

222.22.22.2222    hadoop02

333.33.33.3333    hadoop03

을 추가한다. ( 3대 서버 모두 )


4. Zookeeper설치

설치와 환경설정 모두 3대 서버 동일하게 진행한다. 주키퍼는 과반수투표 프로세스 때문에 3대 5대 7대와 같이 홀수로 구성해야 한다.

설치할 path로 이동한다.

$cd /usr/local

$wget http://apache.mirror.cdnetworks.com/zookeeper/zookeeper-3.4.14/zookeeper-3.4.14.tar.gz

$tar zxf zookeeper-3.4.14.tar.gz

심볼릭링크생성

ln -s zookeeper-3.4.14 zookeeper

설치경로와른 다른 별도의 주키퍼 데이터디렉토리를 추가한다. 여기엔 주키퍼지노드 복사본인 스냅샷과 트랜잭션 로그들이 저장된다. 

mkdir -p /data

myid라는 파일을 만들고 내용을 1이라고 한다.

echo 1> /data/myid    //host hadoop01

echo 2> /data/myid    //host hadoop02

echo 3> /data/myid    //host hadoop03


5. Zookeeper환경설정

$vi /usr/local/zookeeper/conf/zoo.cfg

tickTime=2000 : 주키퍼가 사용하는 시간에 대한 기본단위(밀리초)

initLimit=10 : 팔로워가 리더와 초기에 연결하는 시간에 대한 타임아웃 tick의 수

syncLimit=5 : 팔로워가 리더와 동기화하는 시간에 대한 타임아웃 tick의 수 (주키퍼에 저장된 데이터가 크면 수를 늘려야 함)

dataDir : 주기퍼의 트랜잭션 로그와 스냅샷이 저장되는 데이터 저장경로

clientPort : 주키퍼 사용 TCP포트

maxClientCnsxns=60 : 하나의 클라이언트에서 동시접속 수 제한. 0이면 unlimit로 설정

autopurge.purgeInterval=1 : 스냅샷 및 해당 트랜잭셕로그 자동 삭제 주기. 양수(1이상)로 설정하면 ON, 0은 OFF

server.N : 주기퍼 앙상플 구성을 위한 설정


기본설정은 수정하지 않고 

dataDir=/data

server.1=hadoop01:2888:3888

server.2=hadoop02:2888:3888

server.3=hadoop03:2888:3888

만 추가한다.

2888, 3888은 기본 포트이며 앙상블 내 노드끼리 연결(2888)하고, 리더선출(3888)에 사용한다.


6. Zookeeper 실행/중지

$ /usr/local/zookeeper/bin/zkServer.sh start    //실행

Using config: /usr/local/zookeeper/bin../conf/zoo.cfg

Starting zookeeper ... STARTED

$ /usr/local/zookeeper.bin/zkServer.sh stop    //중지


7. Kafka 설치

카프카 클러스터의 브로커 수를 3대로 구성

카프카 또한 자바 애플리케이션으로 자바가 설치되어야 함.

스칼라버전 2.13버전인 kafka2.6으로 다운로드.

$ cd /usrl/local

$ wget http://mirror.navercorp.com/apache/kafka/2.6.0/kafka_2.13-2.6.0.tgz

$ tar zxf kafka_2.13-2.6.0.tgz

심볼릭 링크

ln -s kafka_2.13-2.6.0


8. 카프카 환경설정

  • 서버별 브로커 아이디
  • 카프카 저장 디렉토리
  • 주키퍼정보

서버별 브로커 아이디

호스트        브로커ID

hadoop01    broker.id=1

hadoop02    broker.id=2

kadoop03    broker.id=3


카프카 저장디렉토리

카프카는 컨슈머가 메세지 소비 후에도 저장된 데이터를 임시로 보관할 수 있다.

이 데이터들은 디스크마다 별도로 저장할 수 있는데 예제에서는 디렉토리로 대체한다.

$ mkdir -p /data1

$ mkdir -p /data2


주키퍼정보

zookeeper.connect=주키퍼호스트:주키퍼포트/지노드네임

zookeeper.connect=172.30.1.17:2181,172.30.1.59:2181,172.30.1.40:2181/hadoop-kafka


server.properties 파일을 열어 3대 모두 카프카 환경설정을 해준다.

$ vi /usr/local/kafka/config/server.properties

broker.id = 1 / 2 / 3     각 서버별로 다르게 

log.dirs=/data1,/data2

zookeeper.connect=hadoop01:2181,hadoop02:2181,hadoop03:2181/hadoop-kafka


9. 카프카 실행

--daemon 옵션을 주어 백그라운드로 실행한다.

$/usr/local/kafka/bin/kafka-server-start.sh -daemon /usr/local/kafka/config/server.properties


중지하려면 다음 명령어를 입력한다.

$/usr/local/kafka/bin/kafka-server-stop.sh


10. 카프카 정보 확인

주키퍼에 접속하여 지노드를 확인해 카프카가 잘 작동하는지 확인해본다.

$/usr/local/zookeeper/bin/zkCli.sh

zk: localhost:2181(CONNECTED) 0] ls /

[ zookeeper, hadoop-kafka]


11. 카프카 로그 확인

$cat /usr/local/kafka/logs/server.log













Apache Kafka [1] - 개요 및 아키텍처

카프카는 이벤트스크리밍(Event Streaming)기반 메세징시스템(Messaging System)으로 실시간 데이터를 저장, 조작, 다른목적지로 배치작업 등을 하기에 용이하다. 


메세징시스템이란?

메세징시스템은 한 어플리케이션에서 다른 어플리케이션으로 데이터를 전송하는 역할을 한다. 분산메세징시스템은 메세지 큐를 기반으로 어플리케이션과 메세지 큐 사이에 비동기적(Asynchronously)으로 작동한다.

보통 2개의 타입의 메세징패턴이 제공되는데 포인트 투 포인트(point-point)와 게시구독(pub-sub)시스템이다.


포인트 투 포인트 메세징시스템(point to point messaging system)

대표적인 예로 주문처리시스템을 생각하면 된다. 한 명 이상의 소비자가 큐에 있는 메세지를 소비할 수 있지만 특정 메세지는 한 명의 소비자만 소비할 수 있다.



게시-구독 메세징시스템(publish-subscribe messaging system)

포인트 투 포인트 시스템과 달리 소비자들은 하나 이상의 큐에있는 데이터를 소비할 수 있다. 게시-구독 시스템에선 생산자를 Publisher라 하고, 메세지 소비자를 Subscriber라고 한다. 간단한 예로 TV채널을 들 수 있는데, 누구나 자신이 가입한 채널을 시청할 수 있듯이 Subscriber들은 연결되기만 하면 누구든 큐에서 데이터를 가져다 올 수 있다.


카프카도 분산된 게시-구독 메세징시스템이며, 대량의 데이터를 처리함과 동시에 데이터손실을 막기위해 데이터들은 클러스터 내에 복제된다. 카프카는 Zookeeper서비스 위에서 작동하며 아파치 스톰, 스파크 등과 연동하여 실시간 스트리밍분석 또한 용이하다.


카프카의 장점(Benefits)

  • 성능(Performance) - 카프카는 고성능 TCP네트워크 프로토콜을 통해 통신하는 분산형 시스템이다. 이는 모든 쓰기가 OS(RAM) 캐시로 수행하기 때문에 가능한데, 때문에 초당 200만번의 쓰기 작업을 수행 할 수 있다. 
  • 신뢰성(Reliability) - 대기시간이 짧은 메세지 전달을 지원하며, 분산/분할/복제를 통해 시스템 장애 발생 시 결함되지 않는 안정성을 보장한다. 
  • 확장성(Scalability) - 프로듀서와 컨슈머의 분리로 Hive, Hbase, Python 등과 같이 다양한 어플리케이션과 사용하기 쉬우며 다운타임(down time)없이 쉽게 확장 가능하다.
  • 내구성(Durability) - 카프카는 분산커밋로그(Distributed commit log)를 사용하여, 중간에 데이터를 잃어도 재생할 수 있어 내구성이 뛰어나다. 



주요 개념(main concepts)


- 카프카 아키텍처(kafka architecture)

  • Topics - 특정 범주에 속하는 메세지 스트림. 토픽을 통해 Producers와 Consumers가 데이터를 전송한다.
  • Partition - Topic을 이루는 단위. 토픽은 수많은 파티션으로 구성된다.
  • Partition offset - 파티션을 구분하는 시퀀스ID
  • Replicas of partition - 파티션 백업을 위한 복제본. 데이터를 읽거나 쓰지 않으며 단지 데이터 손실이 있을 경우 사용된다.
  • Brokers - 데이터를 관리하는 시스템. 각 브로커는 주제당 0개 이상의 파티션을 가질 수 있다.
  • Kafka Cluster - 카프카 브로커 1개 이상이 있는 것을 클러스터라고 부른다. 클러스터는 다운타임(down time)없이 확장할 수 있으며 메세지 데이터의 지속성과 복제를 관리하는데 사용된다.
  • Producers - 프로듀서는 하나이상의 카프카 토픽(Topic)을 제공한다. 프로듀서는 토픽의 파티션에 데이터를 전송하며 메세지를 퍼블리싱할 때마다 브로커가 파시션의 마지막 세그먼트 파일에 메세지를 첨부한다. 
  • Consumers - 컨슈머는 하나 이상의 토픽에 연결되어 있고 브로커로부터 데이터를 읽는다.
  • Leader - 리더는 주어진 파티션에 대한 모든 읽기,쓰기를 담당하는 노드다. 모든 파티션에는 리더 역할을 하는 하나의 서버가 있다. 
  • Follower - 리더의 지시를 따르는 노드. 리더가 결함시 팔로워 중 한명이 자동으로 새로운 리더가 된다. 팔로워는 메세지를 끌어들이고 자신의 데이터 저장소를 업데이트 한다.
  • Consumer Group - 컨슈머의 집합을 구성하는 단위. 컨슈머 그룹 안의 컨슈머 수만큼 파티션의 데이터를 분산처리한다.


- 프로듀서와 컨슈머 Read/Write Work Flow




Apaceh JMeter - 설치 및 실행


[ 개요 ]

제이미터는 웹프로그램을 테스트하기 위한 JAVA애플리케이션이다.

현재는 다양한 테스트가 가능하도록 기능이 확장되었다.

  • Web - HTTP, HTTPS (Java, NodeJS, PHP, ASP.NET, …)
  • SOAP / REST Webservices
  • FTP
  • Database via JDBC
  • LDAP
  • Message-oriented middleware (MOM) via JMS
  • Mail - SMTP(S), POP3(S) and IMAP(S)
  • Native commands or shell scripts
  • TCP
  • Java Objects


[ 설치 ]

해당 URL에서 https://jmeter.apache.org/download_jmeter.cgi Binaries의 zip파일을 클릭한다. 

설치하려는 환경에 자바가 설치되어있어야한다


[ 실행 ]

압축을 풀고 bin 폴더에 있는 jmeterw.cmd파일을 실행


[ 예제 ]

HTTP Request를 이용해 해당 input태그에 값을 POST로 넘기고 확인해보는 예제이다.

1. 좌측 약병이모티콘 우클릭 -> add -> Threads(Users) -> Thread Group

2. Thread Group우클릭 -> add -> Sampler -> Http Request

3. Thread Group우클릭 -> add -> Listener -> View Results Tree / View Results in Table

* Http Request로 파라미터를 넣고 실행하고 View Results Tree / View Results in Table로 해당 결과를 확인한다.




4. HTML CODE

<form action="upload_file.php" method="post" enctype="multipart/form-data">

<label for="file">Filename:</label>

<input type="file" name="file1" id="file1"><br>

<input type="text" name="position1"><br>

<input type="text" name="action1"><br>

<input type="text" name="imageCode1"><br>

<input type="text" name="width1"><br>

<input type="text" name="height1"><br>

.....

<input type="submit" name="submit" value="Submit">

</form>


5. 파라미터 값 입력

테스트 데이터들을 아래그림과 같이 Input 태그의 Name에 맞춰서 넣는다.



6. 업로드 테스트할 파일 파라미터 입력



7. 실행 후 확인

상단의 메뉴표시바에서 실행버튼을 클릭 후 View Results Tree / View Results in Table 통해 확인.

Sampler result, Request, Response data탭을 활용하여 리턴된 값, Http 상태등을 체크


이상으로 간단히 HTTP Request를 통해 해당 웹페이지에 값을 POST로 보내고 결과를 확인해 보았다. 파라미터 값 뿐만 아니라 csv, json파일로도 테스트가 가능하다. 

자세한 기능은 https://jmeter.apache.org/ 을 참조한다.















InfluxDB [1] - 설치 및 실행

 

[ 개요 ]

InfluxDB는 쓰기쿼리를 빠르게 처리하도록 설계된 시계열 데이터베이스(TSDB)이다. 기존 RDBS와 다르게 시간을 기준으로 데이터를 입력하므로 금융데이터, 로그데이터 등 시간에 따른 데이터를 분석하기에 적합하다. InfluxDB와 함께 Telegraf(모니터링 및 수집), Grafana(시계열데이터 시각화) 등과 함께 사용된다.


[ 설치 ]

InfluxDB 1.8

- Red Hat & CentOS

cat <<EOF | sudo tee /etc/yum.repos.d/influxdb.repo
[influxdb]
name = InfluxDB Repository - RHEL \$releasever
baseurl = https://repos.influxdata.com/rhel/\$releasever/\$basearch/stable
enabled = 1
gpgcheck = 1
gpgkey = https://repos.influxdata.com/influxdb.key
EOF
sudo yum install influxdb
sudo service influxdb start

- Ubuntu

wget -qO- https://repos.influxdata.com/influxdb.key | sudo apt-key add -
source /etc/lsb-release
echo "deb https://repos.influxdata.com/${DISTRIB_ID,,} ${DISTRIB_CODENAME} stable" | sudo tee /etc/apt/sources.list.d/influxdb.list
sudo apt-get update && sudo apt-get install influxdb
sudo service influxdb start


[ 설정파일 ]

/etc/influxdb/influxdb.conf


[ 실행 ]

$ influx -precision rfc3339

InfluxDB는 기본적으로 포트 8086에서 실행된다. -precision옵션은 타임스탬프의 포맷을 지정한다. 위 예에서 rfc3339는 (YYYY-MM-DDH:MM:SS.nnnnnnnZ)형식의 타임스탬프를 반환하도록 하는 옵션이다.


[ 예제 ]

구성요소

  • Points : 시간값과 measurement, key-value tag와 field로 구성된 단위
  • Measurement : RDBS에서 Table과 같은 개념
  • Field : 인덱스되지 않은 column
  • Tags : 인덱스된 column

- DB생성

> CREATE DATABASE mydb

> SHOW DATABASES

> USE mydb


- 데이터쓰기

<measurement>[,<tag-key>=<tag-value>...] <field-key>=<field-value>[, <field2-key>=<field2-value>...] [unix-nano-timestamp]

> INSERT cpu,host=serverA,region=us_west value=0.64  //cpu measurement가 없다면 자동생성

> SHOW MEASUREMENTS  //cpu measurement가 검색됨


- 결과

> SELECT "host", "region", "value" FROM "cpu"

name: cpu

time                           host    region  value

----                           ----    ------  -----

2020-09-13T12:21:37.928191574Z serverA us_west 0.64

> SELECT * FROM /.*/ LIMIT1

> SELECT * FROM "cpu"

> SELECT * FROM "cpu" WHERE "value" > 0.5


Ref : https://docs.influxdata.com/influxdb/v1.8/introduction/get-started/

Apache Sqoop [1] - 설치[ Install ]


[ 개요 ]

전 프로젝트에서 mysql데이터를 hive table에 주기적으로 input하는 기능이 필요했다. 이런 상황에서 Data-pip-line을 구성하기 좋고 적용하기도 쉬운 Sqoop에 대해 알아보자.  

스쿱(Sqoop)은 관계형데이터베이스(Ex. Mysql,MariaDB)와 아파치 하둡간의 데이터 인아웃을 위한 CLI(Command Line Interface) 어플리케이션이다. RDB에서 데이터를 가져와 맵리듀스작업을 할 수 있고 그 반대도 가능하다. 장애컨트롤 뿐만 아니라 병렬처리까지 가능한 것이 장점이다.


[ 아키텍처 ]









중간에 위치한 Sqoop Tool은 Java로 프로그래밍되어 SQL to Hadoop, Hadoop to SQL 변환을 자유롭게 해준다.

Import : RDBMS에서 개별테이블을 가져와 한 행씩 HDFS 레코드로 처리된다. 레코드는 텍스트데이터, Avro, 이진데이터로 병렬로 저장된다. 

Export : HDFS에서 RDBMS 행데이터가 있는 파일집합을 만들어 내보낸다. 


[ 설치 ]

일단 Java와 Hadoop이 설치되어 있어야 한다.

설치할 경로에 스쿱 tar.gz파일 다운받는다.

$ cd /usr/local
$ wget http://mirror.navercorp.com/apache/sqoop/1.4.7/sqoop-1.4.7.bin__hadoop-2.6.0.tar.gz $ tar -xvf sqoop-1.4.7.tar.gz


스쿱관련 설정을 해준다.

$ vi /etc/profile
//아래 코드 추가
export SQOOP_HOME=/usr/local/sqoop-1.4.7.bin__hadoop-2.6.0
export PATH=$JAVA_HOME/bin:$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$SQOOP_HOME/bin:$PATH
$ source /etc/profile
$ cd $SQOOP_HOME/conf
$ mv sqoop-env-template.sh sqoop-env.sh
$ vi sqoop-env.sh
//주석을 제거하고 아래 코드를 추가한다.
export HADOOP_COMMON_HOME=/usr/local/hadoop/hadoop-3.2.1
export HADOOP_MAPRED_HOME=/usr/local/hadoop/hadoop-3.2.1


위에서 Sqoop Tool은 Java기반으로 동작하기 때문에 mysql-connector-java-5.1.30.tar.gz을 다운받아서 Sqoop경로에 복사한다.

$ wget https://downloads.mysql.com/archives/get/p/3/file/mysql-connector-java-5.1.30.tar.gz
$ cd /usr/local/mysql-connector-java-5.1.30
$ cp mysql-connector-java-5.1.30-bin.jar /usr/local/sqoop-1.4.7.bin__hadoop-2.6.0/lib/


설치 확인

$ sqoop-version



2020년 9월 19일 토요일

Apache HBase [1] - 개요 및 아키텍처


1.Hbase의 등장

하둡은 MapReduce를 이용하여 대용량 데이터를 저장하고 처리하는데는 탁월하다. 그러나 데이터를 순차적방식으로 액세스하여, 간단한 작업을 할 때에도 해당 데이터를 찾을 때 까지 데이터 집합 전체를 검색해야 한다.

이러한 불편함을 개선하기 위해 Random Access Database를 개발하였는데 HBase, Cassandra, couchDB, Dynamo, MongoDB와 같은 데이터베이스이다.


2.HBase란

[ 컬럼지향데이터베이스 ]

HBase는 HDFS(Hadoop Distributed File System)위에 구축된 분산형 컬럼지향 데이터베이스이다. ROW기반의 RDBMS보다 데이터를 통계화 하는데 이점이 있다. 

[ 이미지참조 http://www.dbguide.net/ ]

위의 예와 같이 column1의 평균을 구하려면 RDBMS에서는 Group By로 묶은 후 평균을 구하는 "SELECT AVG(column1) FROM DB1 GROUP BY column1" 와 같이 그룹핑 단계를 거쳐야 하지만 컬럼지향데이터베이스는 그럴 필요가 없어 매우 빠른 속도로 결과값을 얻을 수 있다.

RDBMS는 Online Transaction Process(OLTP)에 적합하여 비즈니스 트랜잭션 처리에 많이 사용한다. 쇼핑몰 구매시스템이 그 예다. 반면 컬럼기반 HBase는 Online Analytical Processing(OLAP)에 적합하여 데이터 분석, 통계 모델링 구축에 많이 사용된다.

[ 랜덤 액세스 ]

기존 HDFS와 가장 큰 차이점은 순차적 데이터액세스만 제공했던 HDFS와는 다르게, HBase는 내부적 Hash테이블을 사용한 실시간 읽기/쓰기 랜덤 액세스를 제공한다. 따라서 보다 빠른 데이터처리를 할 수 있다.


3. HBase 저장 매커니즘

HBase의 테이블 스키마는 키-값 쌍으로 된 컬럼패밀리(column family)로 정의된다. 컬럼패밀리는 수 많은 컬럼을 가질 수 있으며, 각 컬럼은 타임스탬프 값을 가진다.



4. HBase의 특징

  • HBase는 행기준으로 확장이 가능하다. ( 스키마 정보만 있으면 클러스터A에는 1-100행, 클러스터B에는 100-300행을 따로 저장하여 확장기능을 가능케한다. )
  • HBase는 Failure support 기능이 있다.
  • 일관된 읽기과 쓰기를 제공한다.
  • Hadoop및 관련 애플리케이션(Phoenix, Hive 등)과 사용이 용이하다.
  • 클라이언트를 위한 쉬운 JAVA API를 제공한다.
  • 클러스터 간에 데이터 복제 기능을 제공하여 데이터의 정밀성과 정합성을 보장한다.


5. HBase 아키텍처
HBase는 컬럼패밀리에 의해 수직으로 분리된 스토어(MemStore+H file)로 나뉘며, region server에 의해 각 스토어가 HDFS에 저장된다. 지역서버(region server)는 추가되거나 제거할 수 있다.


Hbase 구성요소
  • 클라이언트 라이브러리(Client Library)
  • 마스터서버(Master Server)
  • 지역서버(Region Server)
* HDFS와 Zookeeper와 함께 연동

[ 마스터서버 ]
- Zookeeper를 통해 각 지역서버를 할당하고 작업을 지시
- 서버간 로드밸런싱
- 스키마 및 테이블, 컬럼패밀리 생성/삭제와 같은 메타데이터 작업처리

[ 지역서버 ]
- 클라이언트와 통신하여 데이터관련 작업처리(읽기/쓰기)
- 데이터 및 서버의 Data Size 임계값을 결정
- HDFS 위에서 동작한다.


WAL
(Write Ahead Log) : 새로운 데이터를 저장하기 위해 쓰이는데 중간에 데이터를 잃을 경우 데이터 복구 역할도 한다.
Block Cache : 자주 읽는 데이터를 메모리에 저장
Memstore : Disk에 새로운 데이터를 Write한다. key-value기반의 Cache메모리로 속도가 빠르며 region의 하나의 컬럼패밀리마다 memstore를 갖는다.
Hfile : key-value로 저장된 데이터파일


[ 주키퍼 ]
- 마스터서버가 사용가능한 서버와 통신(서버장애확인,사용가능서버검색)하기 위해 사용