Hive Architecture

 

·       Version : Hive

 

Apache Hive 데이터 쿼리 분석을 제공하기 위해 Apache Hadoop 위에 구축 데이터웨어 하우스 소프트웨어 프로젝트이다. Hive Hadoop 통합되는 다양한 데이터베이스 파일 시스템에 저장된 데이터를 쿼리하기위한 SQL 유사한 인터페이스를 제공한다. 분산 데이터에 대해 SQL 응용 프로그램 조회를 실행하려면 MapReduce Java API에서 기존 SQL 조회를 구현해야한다. HiveJava API에서 쿼리를 구현할 필요없이 SQL 유사한 쿼리 (HiveQL) 기본 Java 통합하는 필요한 SQL 추상화를 제공한다. 대부분의 데이터웨어 하우징 응용 프로그램은 SQL 기반 쿼리 언어와 함께 작동하므로 Hive SQL 기반 응용 프로그램을 Hadoop으로 이식 있도록 도와준다.

·       Apache Hive : https://en.wikipedia.org/wiki/Apache_Hive

 

아래 그림은 Apache Hive Architecture 이다. 크게 Hive Client, Hive Services, Hive Storage 영역으로 나눌 있으며, Meta store, Hive Server, Driver 대해서 살펴본다.

 

 

 

[Meta Store]

Meta Store Hive 구동될때 필요한 테이블의 스키만 구조나 다양한 설정값이 저장된다. 따라서 Hive 구성하는데 가장 중요한 요소이며, Meta Store 장애가 발생할 경우 Hive 정상적으로 구동되지 않는다. Hive Mete Store MySQL, Oracle, PostgreSQL 등에 저장되며, 임베디드(Embedded), 로컬(Local), 리모트(Remote) 3가지 실행모드가 있다.

·       임베디드(Embedded)  : 별도의 데이터베이스를 구성하지 않고 더비DB 이용한 모드이며 한번에 한명의 유저만 접근이 가능하다.

·       로컬(Local) : 별도의 데이터베이스를 가지고 있지만 하이브 드라이버와 같은 JVM에서 동작한다.

·       리모트(Remote) : 별도의 데이터베이스를 가지고, 별도의 JVM에서 단독으로 동작하는 모드이며, 리모트로 동작하는 메타스토어를 HCat서버라고도 한다.

 

 

[Hive Server]

Hive Server Hive 질의하는 가장 앞단의 서버이다. JDBC ODBC 부터 질의를 받아서 이를 Driver 전달하는 역할이다. Hive Server 통해야 권한, 접근성 등을 체크할 있다. Hive Server 상단 박스의 CLI 통할경우 바로 Driver 접속되기 때문에 권한이나 제어를 받지않고 바로 모든 컨트롤이 가능해진다. 따라서 보안을 위해서는 운영모드에서는 사용하지 않는것이 좋다.

 

[Driver]

Driver Hive 엔진으로써 여러 질의에 대해 Optimizer 통해 Hive SQL 연산 방식을 계산하고 MR, Spark 여러 엔진등과 연동하는 역할을 담당한다.

 

 

2019-11-25 / Sungwook Kang / http://sungwookkang.com

 

Hadoop, Hive, 하둡, 하이브, Hive Datawarehouse, 하이브 아키텍처, Hive Architecture

HBase Zookeeper 상호작용 관계

 

·       Version : HBASE, Zookeeper

 

Hadoop 에코 시스템으로 HBase Zookeeper 시스템이 있다. HBase NoSQL 분산 데이터베이스 시스템이며, Zookeeper 분산 코디네이터 시스템으로 서버간의 상호 조정이 필요한 다양한 서비스를 제공한다.

HBase 마스터-슬레이브 구조를 가지고 있으며 마스터 역할을 하는 서버를 HMaster, 슬레이브 역할을 하는 서버를 HRegionServer라고 한다. 서버의 특징은 아래와 같이 정리할 있다.

·       HMaster HBase 대한 설정파일들과 HRegionServer 대한 정보만을 가지고 있는 서버이다.

·       HRegionServer HRegion이라 불리는 블록을 가지고 있으며, 데이터 로우에 대한 정보가 저장되어 있다.

·       HRegion 저장할 있는 데이터 사이즈의 한계를 가지고 있으며, 한계치에 도달할 경우 HRegion 두개의 리전으로 분리된다. 이때 변경 사항은 Zookeeper에게 보고된다.

·       클라이언트가 HRegionServer 통해서 데이터를 가져오거나 추가할때 HBase 두개의 카탈로그 테이블(-ROOT-, .META.) 제공한다.

·       -ROOT- 테이블은 모든 .META. 리전에 대한 정보를 가지고 있으며 .META. 테이블은 모든 사용자 테이블 리전에 대한 정보를 가지고 있다. -ROOT- 테이블이 존재하는 리전의 정보는 Zookeeper 저장된다. 매칭되는 .META. 리전은 -ROOT- 테이블로 부터 조회되며, 사용자의 리전은 .META. 테이블로부터 클라이언트에게 제공된다.

·       클라이언트는 -ROOT-, .META. 사용자 리전을 캐싱하며 캐시된 데이터에 연산을 수행한다. HRegion 문제가 발생하면 .META. 한단계 위로 연산을 실행하게 되며 데이터에도 문제가 있을 경우 -ROOT- 테이블에 연산을 요청하게 된다.

 

기본적으로 마스터-슬레이브 유형의 HBase 아키텍처에는 3 가지 유형의 서버가 있다. HBase HMaster, HRegionServer ZooKeeper이다. 리전 서버는 읽기 쓰기 목적으로 데이터를 제공한다. , 클라이언트는 데이터에 액세스하면서 HBase 리전 서버와 직접 통신 있다. 또한 HBase 마스터 프로세스는 영역 할당 DDL (테이블 만들기, 삭제) 작업을 처리한다. 마지막으로 HDFS 일부인 Zookeeper 라이브 클러스터 상태를 유지한다. 또한 리전 서버가 관리하는 데이터는 Hadoop DataNode 추가로 저장된다. 또한 모든 HBase 데이터는 HDFS 파일에 저장된다. 그런 다음 리전서버가 제공하는 데이터의 경우, 지역 서버는 HDFS DataNode 함께 배치되어 데이터 지역성을 사용할 있다. 여기서 데이터 지역성은 데이터를 필요한 곳에 가까이 두는 것을 의미한다.

 

 

 

HBase Zookeeper 상호작용은 아래 순서로 설명할 있다.

1.       Zookeeper 외부 클라이언트의 연결을 제어하며, HRegionServer 대한 정보 tracking -ROOT- 리전에 대한 정보를 관리한다.

2.       클라이언트는 제일 먼저 Zookeeper cluster/ensemble 연결되고 리전 서버들의 위치 정보를 요청한다.

3.       클라이언트로부터 특정 테이블에 대한 쓰기요청이 발생하는 경우 HBase 우선적으로 WAL(Write Ahead Log) 데이터를 저장한다.

4.       Zookeeper  사용 가능한 HRegionServer 찾아서 WAL 저장된 데이터를 memstore 불리는 저장소에 가져온다. 만약 memstore 공간이 가득차게 되면 Zookeeper HFile 불리는 파일에 데이터를 flush하며 HDFS 저장한다.

5.       HRegionServer 장애가 발생하면 Zookeeper HRegion 장애복구 프로세스를 진행하며 Zookeeper Ensemble 프로세스를 HMaster 아닌곳에서 실행한다.

 

 

[참고자료]

https://data-flair.training/blogs/hbase-architecture/

 

 

2019-11-20 / Sungwook Kang / http://sungwookkang.com

 

Hadoop, zookeeper, 하둡, 주키퍼, HBase, 분산 코디네이터, 분산 데이터베이스, 하둡 에코 시스템, Hadoop Echo system

'SW Engineering > Hadoop' 카테고리의 다른 글

Hive 테이블 생성  (0) 2019.11.27
Hive Architecture  (0) 2019.11.26
HBase와 Zookeeper 상호작용 관계  (0) 2019.11.21
NameNode and Secondary NameNode Heap Memory Size 변경  (0) 2019.11.20
Hadoop Name Node  (0) 2019.11.19
HDFS 블록  (0) 2019.11.16

NameNode and Secondary NameNode Heap Memory Size 변경

 

·       Version : CDH 6.3

 

NameNode Master and Slave 구성하였을때, NameNode간의 힙메모리 설정이 다른 경우 경고가 발생한다. (서비스 장애가 발생하는 것은 아님) Cloudera Hadoop Manager에서는 아래와 같은 메뉴에서 Heap Memory Size 설정할 있다.

 

NameNode 핵심은 HDFS 메타 데이터 (HDFS 블록 정보) 관리하며, 파일 시스템 레이아웃은 디스크에 유지되며 블록 위치는 단독으로 메모리에 유지된다. 클라이언트가 파일을 조회하면 네임노드는 클라이언트에게 파일에 있는 모든 블록의 위치를 알려준다. 그리고 클라어인트는 데이터 전송을 위해 네임노드와 통신할 필요가 없다. 네임노드에 필요한 메모리는 많으면 많을수록 좋지만, 일반적으로 백만개의 객체(파일, 디렉토리 블록) 1GB 정로로 계산한다. 자세한 내용은 아래 링크를 참고 하여 사용자 서버환경에 적합한 메모리를 산정할 있도록 한다.

 

·       Sizing NameNode Heap Memory : https://docs.cloudera.com/documentation/enterprise/5-8-x/topics/admin_nn_memory_config.html

 

 

Cloudera Manager 실행하여 HDFS 탭으로 이동하여Configuration 메뉴를 선택한다.

 

검색창에서 “Java Heap Size” 검색하여 Java Heap Size 변경한다.

 

 

 

 

2019-11-19 / Sungwook Kang / http://sungwookkang.com

 

Hadoop, 하둡, HDFS, 하둡 파일 저장, NameNode, 네임노드, 보조네임노드, Secondary NameNode, heap memory size, heap memory

'SW Engineering > Hadoop' 카테고리의 다른 글

Hive Architecture  (0) 2019.11.26
HBase와 Zookeeper 상호작용 관계  (0) 2019.11.21
NameNode and Secondary NameNode Heap Memory Size 변경  (0) 2019.11.20
Hadoop Name Node  (0) 2019.11.19
HDFS 블록  (0) 2019.11.16
HDFS 파일 저장(로컬 업로드)  (0) 2019.11.14

Hadoop Name Node

 

·       Version : HDFS

 

네임노드(Namenode) 파일 시스템의 네임스페이스를 관리한다. 네임노드는 파일 시스템 트리와 트리에 포함된 모든 파일과 디렉터리에 대한 메타데이터를 유지한다. 정보는 네임스페이스 이미지(namespace image) 에디트 로그(edit log)라는 종류의 파일로 로컬 디스크에 영속적으로 저장된다. 네임노드는 파일에 속한 모든 블록이 어느 데이터노드에 있는지 파악하고 있다. 하지만 블록의 위치 정보는 시스템이 시작할 모든 데이터노드로 부터 받아서 재구성하기 때문에 디스크에 영속적으로 저장하지는 않는다.

 

네임노드는 메타데이터를 관리하기 때문에 네임노드에 장애가 발생하면 파일 시스템은 동작하지 않으며 파일 시스템의 어떠한 파일도 찾을 없다. 데이터 노드에 블록이 저장되어 있지만 이러한 블록 정보를 이용하여 파일을 재구성할 없기 때문이다. 따라서 네임노드의 2중화 장애복구 전략은 필수적이다. 아래 그림은 Namenode HA 주요 컴포넌트 구성이다.

 

 

[저널노드]

·       하둡 1.0에서는 네임노드에서만 에디트 로그 저장하고, 하둡 2.0에서는 여러 서버에 에디트 로그를 복제해서 저장한다.

·       저널노드(데몬) 에디트 로그를 자신이 실행되는 서버의 로컬디스크에 저장한다.

·       네임노드는 클라이언트가 돼서 저널노드에게 접근해 저장을 요청. 액티브 네임노드만 에디트로그를 저장할 권한이 있으며 스탠바이 네임노드는 조회만 요청 가능하다.

·       저널노드는 3 이상의 서버에서 실행되어야하고 홀수 단위로만 실행가능하기 때문에, 네임노드가 저널노드의 장애에 영향을 받지 않으려면 "(전체 저널노드 설치대수/2) / +1" 만큼 노드가 필요하다. (ex : 5대에 저널 노드를 설치했으면 최소 3 이상의 저널노드가 실행)

·       리소스를 적게 사용하기 때문에 "네임노드", "잡트래커", "리소스매니저" 같은 데몬이 돌아가는 서버에서 함께 실행 가능하다.

 

[주키퍼]

·       네임노드 HA 상태 정보를 저장하는 장소이며 어떤 서버가 액티브(active) 네임노드인지 스탠바이(standby) 네임노드인지 저장한다.

·       분산시스템 코디네이터 역할을 하며 서버 간의 정보 공유한다.

·       서버 모니터링하여 새로운 노드를 추가하거나 삭제하였을때, 다른 노드들에게 알려준다.

·       주키퍼 마스터(주키퍼 앙상블에 구성된 주키퍼 한대) 홀수 단위로 실행하며 주키퍼 클라이언트는 주키퍼 마스터가 응답을 안할 경우 다른 주키퍼 마스터 에게 요청한다. (2대중 한대가 고장나면 실행 안됨)

·       주키퍼 마스터는 동일한 주키퍼 데이터를 복제하고 있기 때문에 클라이언트로부터 조회요청이 들어오면 자신이 보관한 데이터를 이용해 응답하며 쓰기 요청은은 오로지 리더로 설정된 주키퍼 마스터에게 보내진다.

·       ZNode: 주키퍼에서 저장되는 파일 하나하나를 ZNode라고

 

[ZKFC (Zookeeper Failover Controller)]

·       로컬 네임노드(자신이 위치한 네임노드) 상태를 모니터링하며 주키퍼 세션 관리한다.

·       액티브 네임노드의 상태가 정상이면 주키퍼 마스터에 대한 세션 유지하며 액티브 네임 노드에 장애가 발생하면 자동으로 ZKFC 주키퍼 마스터 간의 세션을 종료하고 스탠바이 네임 노드를 액티브 네임 노드로 전환하며, 기존의 액티브 네임 노드 제거한다.

 

[네임노드]

·       네임노드 내부에 있는 QJM(Quorum Journal Manager) 저널노드에 에디트 로그 출력하며, 반드시 절반이상의 저널노드가 실행되고 있어야 에디트 로그를 fsimage 반영할 있다. (3대중 2대는 최소 작동)

·       액티브 네임노드만 저널노드에 에디트로그 쓸수 있으며, 스탠바이 네임노드는 저널노드에서 에디트로그 조회하고 fsimage 갱신한다.

 

[데이터 노드]

·       데이터노드의 블록 정보를 액티브 네임노드, 스탠바이 네임노드로 리포트 전송

 

 

네임노드 장애 복구를 위해서는 아래와 같은 절차를 사용할 있다.

·       네임노드 로컬 디스크와 원격의 NFS 마운트 곳에 동시 백업진행한다.

·       파일 시스템의 데타데이터를 지속적인 상태로 보존하기 위해 파일로 백업한다.

·       보조 네임 노드를 운영한다. 병합 작업을 수행하기 위해 보조 네임노드는 충분한 CPU 네임노드와 비슷한 용량의 메모리가 필요하므로 별도의 물리 머신에 실행되는것이 좋다.

·       보조 네임 노드는 네임노드에 장애가 발생할 것을 대비해서 네임스페이스 이미지의 복제본을 보관하는 역할도 맡는다. 하지만 네임노드의 네임스페이스 이미지는 약간의 시간차를 두고 보노 네임 노드로 복제되기 때문에 네임노드에 장애가 발생하면 어느정도의 데이터 손실은불가피 하다. 일반적인 복구 방식은 NFS 저장된 네임노드의 메타데이터 파일을 보조 네임노드로 복사하여 새로 병합된 네임스페이스 이미지를 만들고 그것을 새로운 네임노드에 복사한 다음 실행하는 것이다.

 

 

 

 

2019-11-18 / Sungwook Kang / http://sungwookkang.com

 

Hadoop, 하둡, HDFS, 하둡 파일 저장, NameNode, 네임노드, 보조네임노드, Secondary NameNode

'SW Engineering > Hadoop' 카테고리의 다른 글

HBase와 Zookeeper 상호작용 관계  (0) 2019.11.21
NameNode and Secondary NameNode Heap Memory Size 변경  (0) 2019.11.20
Hadoop Name Node  (0) 2019.11.19
HDFS 블록  (0) 2019.11.16
HDFS 파일 저장(로컬 업로드)  (0) 2019.11.14
Cloudera Hadoop 6.3.0 Install  (0) 2019.11.14

+ Recent posts