H베이스 Archi강의: 사용 사례, 구성 요소 및 데이터 모델

⚡ 스마트 요약

HBase 아키텍처는 HMaster, 리전 서버, ZooKeeper 및 HDFS라는 네 가지 조정 구성 요소로 이루어져 있으며, 이러한 구성 요소는 데이터를 컬럼 지향 모델로 저장하고, 리전별로 분할하고, 지연 시간이 짧은 임의 읽기 및 쓰기 작업을 제공합니다.

  • 🧭 HMaster: 리전을 리전 서버에 할당하고, 로드 밸런싱 및 장애 조치를 처리하며, 스키마 및 메타데이터 변경 사항을 관리합니다.
  • 🗄️ 지역 서버: 클라이언트의 읽기 및 쓰기 요청을 처리하고, 리전을 호스팅하며, 데이터 증가에 따라 리전을 자동으로 분할합니다.
  • 🧱 지역 및 매장: 각 영역은 컬럼 패밀리별로 하나의 저장소를 유지하며, 이 저장소는 메모리의 MemStore와 디스크의 HFiles로 구성됩니다.
  • 🔗 ZooKeeper : 클러스터의 좌표를 지정합니다. tracks 서버 오류가 발생했을 때, 클라이언트가 연결하는 데 사용하는 쿼럼 구성을 유지합니다.
  • 🧮 데이터 모델: 테이블은 컬럼 패밀리와 행을 그룹화하며, 행 키는 모든 접근에 대한 기본 키 역할을 합니다.
  • HBase와 HDFS 비교: HBase는 HDFS 배치 스토리지 위에 지연 시간이 짧은 임의 읽기 및 쓰기 기능을 추가합니다.

HBase 아키텍처, 구성 요소, 데이터 모델 및 읽기/쓰기 데이터 흐름

Apache HBase는 Apache 기반의 분산형 컬럼 지향 NoSQL 데이터베이스입니다. 하둡 그리고 하둡 분산 파일 시스템(HDFS)이 있습니다. HDFS의 아키텍처는 조정 마스터, 지역 서버 및 ZooKeeper를 결합하여 매우 큰 테이블을 저장하고 빠른 임의 읽기 및 쓰기를 제공합니다.

H베이스 Archi강의 및 주요 구성 요소

HBase 아키텍처는 다음과 같은 주요 구성 요소를 가지고 있습니다.

  • H마스터
  • HRegionServer
  • H지역
  • 주 키퍼
  • HDFS

아래는 그림에 표시된 바와 같이 HBase의 구성 요소를 포함한 상세한 아키텍처입니다.

HMaster, 리전 서버, ZooKeeper 및 HDFS를 보여주는 HBase 아키텍처 다이어그램

H마스터

HBase의 HMaster는 HBase 아키텍처에서 마스터 서버를 구현한 것입니다. 클러스터에 있는 모든 리전 서버 인스턴스를 모니터링하는 모니터링 에이전트 역할을 하며, 모든 메타데이터 변경 사항에 대한 인터페이스 역할을 합니다. 분산 클러스터 환경에서 마스터는 네임노드(NameNode)에서 실행됩니다. 마스터는 여러 백그라운드 스레드를 실행합니다.

다음은 HBase에서 HMaster가 수행하는 중요한 역할입니다.

  • 클러스터 내 노드의 성능과 유지관리 측면에서 중요한 역할을 합니다.
  • HMaster는 관리 성능을 제공하고 다양한 지역 서버에 서비스를 배포합니다.
  • HMaster는 지역 서버에 지역을 할당합니다.
  • HMaster는 클러스터에 있는 노드 전체에 부하를 분산시키기 위해 로드 밸런싱 및 페일오버를 제어합니다.
  • 클라이언트가 스키마 또는 메타데이터 작업을 변경하려는 경우 HMaster가 이러한 작업에 대한 책임을 집니다.

HMaster 인터페이스에서 제공하는 메서드 중 일부는 주로 메타데이터 관련 메서드입니다.

  • 테이블(createTable, RemoveTable, 활성화, 비활성화)
  • ColumnFamily(열 추가, 열 수정)
  • 지역(이동, 할당)

클라이언트는 HMaster 및 ZooKeeper와 양방향으로 통신합니다. 읽기 및 쓰기 작업의 경우, 클라이언트는 HRegion 서버에 직접 접속합니다. HMaster는 리전을 리전 서버에 할당하고, 리전 서버의 상태를 확인합니다.

전체 아키텍처에는 여러 개의 리전 서버가 있습니다. 리전 서버에는 모든 로그 파일을 저장하는 HLog가 있습니다.

HBase 지역 서버

HBase 리전 서버는 클라이언트로부터 쓰기 및 읽기 요청을 받으면 해당 요청을 실제 컬럼 패밀리가 위치한 특정 리전에 할당합니다. 클라이언트는 HRegion 서버에 직접 연결할 수 있으며, HRegion 서버와의 통신을 위해 HMaster 권한이 필수적으로 요구되는 것은 아닙니다. 클라이언트는 메타데이터 및 스키마 변경과 관련된 작업이 필요한 경우에만 HMaster의 도움을 필요로 합니다.

HRegionServer는 리전 서버 구현체입니다. 이는 분산 클러스터에 있는 데이터, 즉 리전을 제공하고 관리하는 역할을 담당합니다. 리전 서버는 하둡 클러스터의 데이터 노드에서 실행됩니다.

HMaster는 여러 HRegion 서버와 연결하여 다음과 같은 기능을 수행할 수 있습니다.

  • 호스팅 및 관리 지역
  • 자동으로 지역 분할
  • 읽기 및 쓰기 요청 처리
  • 클라이언트와 직접 소통

HBase 영역

HRegion은 HBase 클러스터의 기본 구성 요소입니다. 테이블의 분산으로 구성되며 컬럼 패밀리로 이루어져 있습니다. 하나의 Region에는 여러 개의 Store가 포함되며, 각 Store는 컬럼 패밀리마다 하나씩 있습니다. HRegion은 주로 MemStore와 HFile이라는 두 가지 구성 요소로 이루어져 있습니다.

주 키퍼

H베이스 주 키퍼 ZooKeeper는 구성 정보를 유지하고 분산 동기화를 제공하는 중앙 집중식 모니터링 서버입니다. 분산 동기화는 클러스터 전체에서 실행되는 분산 애플리케이션을 조정하여 노드 간 조정 서비스를 제공합니다. 클라이언트가 리전과 통신하려면 먼저 ZooKeeper에 접근해야 합니다.

이것은 오픈 소스 프로젝트이며, 많은 중요한 서비스를 제공합니다.

ZooKeeper에서 제공하는 서비스:

  • 구성 정보를 유지 관리합니다.
  • 분산 동기화를 제공합니다
  • 클라이언트와 지역 서버 간의 통신을 설정합니다.
  • 서로 다른 지역 서버를 나타내는 임시 노드를 제공합니다.
  • 마스터 서버가 이러한 임시 노드를 사용하여 클러스터에서 사용 가능한 서버를 검색할 수 있도록 합니다.
  • Tracks 서버 오류 및 네트워크 분할

마스터 노드와 HBase 슬레이브 노드(리전 서버)는 ZooKeeper에 자체 등록을 합니다. 클라이언트는 마스터 및 리전 서버에 연결하기 위해 ZooKeeper(ZK) 쿼럼 구성에 접근해야 합니다.

HBase 클러스터에 있는 노드에 장애가 발생하면 ZooKeeper 쿼럼이 오류 메시지를 발생시키고 장애가 발생한 노드를 복구하기 시작합니다.

HDFS

HDFS는 Hadoop 분산 시스템입니다. 파일 시스템이름에서 알 수 있듯이, 하둡은 분산 스토리지 환경을 제공하며, 일반적인 하드웨어에서 실행되도록 설계된 파일 시스템입니다. 각 파일은 여러 블록으로 나누어 저장되며, 내결함성을 유지하기 위해 블록들은 하둡 클러스터 전체에 복제됩니다.

HDFS는 높은 수준의 내결함성을 제공하며 저렴한 범용 하드웨어에서 실행됩니다. 클러스터에 노드를 추가하고 저렴한 범용 하드웨어를 사용하여 처리 및 저장을 수행함으로써 기존 설정보다 고객에게 더 나은 결과를 제공합니다.

여기서는 각 블록에 저장된 데이터가 3개의 노드에 복제되므로 어느 노드에 문제가 발생하더라도 데이터 손실이 없습니다. 적절한 백업 및 복구 메커니즘을 갖추고 있습니다.

HDFS는 HBase 구성 요소와 연결되어 대량의 데이터를 분산 방식으로 저장합니다.

HBase 데이터 모델

HBase 데이터 모델은 테이블, 행, 컬럼 패밀리, 셀, 컬럼 및 버전으로 구성된 구성 요소 집합입니다. HBase 테이블은 컬럼 패밀리와 행을 포함하며, 각 요소는 기본 키로 정의됩니다. HBase 데이터 모델 테이블의 컬럼은 객체의 속성을 나타냅니다.

HBase 데이터 모델은 다음과 같은 요소로 구성됩니다.

  • 테이블 세트
  • 컬럼 패밀리와 행이 있는 각 테이블
  • 각 테이블에는 기본 키로 정의된 요소가 있어야 합니다.
  • 행 키는 HBase에서 기본 키 역할을 합니다.
  • HBase 테이블에 접근할 때는 항상 이 기본 키가 사용됩니다.
  • HBase의 각 열은 객체에 해당하는 속성을 나타냅니다.

HBase 사용 사례

다음은 HBase 사용 사례 예시와 HBase가 다양한 기술적 문제에 대해 제공하는 해결책에 대한 자세한 설명입니다.

문제 정책 해법
통신 업계는 다음과 같은 기술적 과제에 직면해 있습니다. 통신 분야에서 생성되는 수십억 건의 통화 상세 기록(CDR) 로그를 저장해야 하고, 고객의 CDR 로그 및 청구 정보에 대한 실시간 접근을 제공해야 하며, 기존 데이터베이스 시스템에 비해 비용 효율적인 솔루션을 제공해야 합니다. HBase는 수십억 개의 자세한 통화 기록 행을 저장하는 데 사용됩니다. 기존 RDBMS 데이터베이스에 매달 20TB의 데이터가 추가되면 성능이 저하됩니다. 이 사용 사례에서 대량의 데이터를 처리하려면 HBase가 가장 좋은 솔루션입니다. HBase는 빠른 쿼리를 수행하고 기록을 표시합니다.
은행 업계는 매일 수백만 건의 거래 기록을 생성합니다. 또한, 은행 업계는 자금 거래에서 발생하는 사기를 탐지할 수 있는 분석 솔루션이 필요합니다. 방대한 양의 데이터를 저장, 처리, 업데이트하고 분석을 수행하기 위한 이상적인 솔루션은 여러 하둡 에코시스템 구성 요소와 통합된 HBase입니다.

그 외에도 HBase를 사용할 수 있습니다.

  • 쓰기 작업이 많이 필요한 애플리케이션이 있을 때마다.
  • 온라인 로그 분석을 수행하고 규정 준수 보고서를 생성하기 위한 것입니다.

HBase의 저장 메커니즘

HBase는 컬럼 지향 데이터베이스이며, 데이터는 테이블에 저장됩니다. 테이블은 RowId를 기준으로 정렬됩니다. 아래 그림에서 볼 수 있듯이, HBase에는 RowId라는 것이 있는데, 이는 테이블에 존재하는 여러 컬럼 패밀리의 집합입니다.

스키마에 존재하는 컬럼 패밀리는 키-값 쌍으로 구성됩니다. 자세히 살펴보면, 각 컬럼 패밀리는 여러 개의 컬럼을 포함하고 있습니다. 컬럼 값은 디스크 메모리에 저장됩니다. 테이블의 각 셀에는 타임스탬프 및 기타 정보와 같은 고유한 메타데이터가 있습니다.

행 키, 열 패밀리 및 셀을 포함하는 열 지향형 저장 레이아웃은 아래와 같습니다.

HBase의 저장 메커니즘을 보여주는 그림으로, 행 키, 컬럼 패밀리, 컬럼 및 셀을 나타냅니다.

다음은 HBase 테이블 스키마를 나타내는 주요 용어입니다.

  • 테이블: 존재하는 행들의 모음입니다.
  • 행: 컬럼 패밀리 모음입니다.
  • 컬럼 패밀리: 컬럼 모음입니다.
  • 컬럼: 키-값 쌍의 모음입니다.
  • 네임스페이스: 논리적 그룹ping 테이블.
  • Cell: HBase에서 셀 정의를 정확하게 지정하는 {행, 열, 버전} 튜플입니다.

열 기반 저장소와 행 기반 저장소

컬럼 지향형 스토리지와 행 지향형 스토리지는 저장 메커니즘에서 차이가 있습니다. 전통적인 관계형 모델은 데이터를 행 단위로 저장하는 반면, 컬럼 지향형 스토리지는 데이터를 컬럼과 컬럼 패밀리 형태로 저장합니다.

다음 표는 이 두 저장 방식의 주요 차이점을 보여줍니다.

열 기반 데이터베이스 행 지향형 데이터베이스
온라인 분석 처리(OPP) 및 그 응용 프로그램과 같이 처리 및 분석이 필요한 상황에서 사용됩니다. 은행 및 금융 분야와 같은 온라인 거래 처리는 이러한 접근 방식을 사용합니다.
이 모델에 저장할 수 있는 데이터 양은 페타바이트 단위로 매우 방대합니다. 소수의 행과 열을 위해 설계되었습니다.

HBase 읽기 및 쓰기 데이터 설명

아래 다이어그램은 클라이언트에서 HFile로의 읽기 및 쓰기 작업을 보여줍니다.

클라이언트, 리전 서버, MemStore 및 HFile 간의 HBase 읽기 및 쓰기 데이터 흐름

1단계) 클라이언트는 데이터를 쓰려고 하며, 이를 위해 먼저 리전 서버와 통신한 다음 리전들과 통신합니다.

2단계) 해당 영역은 컬럼 패밀리와 관련된 데이터를 저장하기 위해 MemStore에 연결합니다.

3단계) ​​먼저 데이터는 MemStore에 저장되고, 정렬된 후 HFile에 기록됩니다. MemStore를 사용하는 주된 이유는 행 키를 기반으로 분산 파일 시스템에 데이터를 저장하기 위함입니다. MemStore는 리전 서버의 메인 메모리에 위치하며, HFile은 HDFS에 기록됩니다.

4단계) 클라이언트는 해당 지역의 데이터를 읽어오기를 원합니다.

5단계) 그러면 클라이언트는 MemStore에 직접 접근하여 데이터를 요청할 수 있습니다.

6단계) 클라이언트가 HFiles에 접근하여 데이터를 가져옵니다. 클라이언트가 데이터를 가져오고 검색합니다.

MemStore는 저장소에 대한 메모리 내 수정 사항을 저장합니다. HBase 영역의 객체 계층 구조는 위에서 아래로 아래 표에 나와 있습니다.

작업대 HBase 클러스터에 존재하는 HBase 테이블
지역 제시된 테이블의 HRegions
스토어 테이블의 각 지역별로 컬럼 패밀리별로 하나씩 저장합니다.
멤스토어 테이블의 각 영역별 저장소마다 MemStore가 사용됩니다. 데이터를 HFiles에 저장하기 전에 정렬합니다. 정렬 덕분에 쓰기 및 읽기 성능이 향상됩니다.
저장파일 테이블의 각 지역별 매장별 StoreFiles
블록 StoreFiles 내부에 있는 블록

HBase 대 HDFS

HBase는 HDFS와 Hadoop 위에 구축되어 실행됩니다. HDFS와 HBase의 주요 차이점은 데이터 작업 및 처리 방식에 있습니다.

H베이스 HDFS
저지연 작업 높은 지연 시간 작업
무작위 읽기 및 쓰기 한 번 쓰고, 여러 번 읽어보세요.
다음을 통해 액세스됨 쉘 명령클라이언트 API Java, REST, Avro 또는 Thrift 주로 MapReduce를 통해 접근합니다.MR) 일자리
저장과 처리 모두 수행 가능합니다. 보관 용도로만 사용됩니다.

일반적인 IT 산업 애플리케이션에서는 Hadoop과 함께 HBase를 사용합니다. 예를 들어 주식 시장 데이터 및 온라인 뱅킹 데이터 처리와 같은 애플리케이션에서 HBase는 최적의 솔루션입니다. 클러스터가 준비되면 다음과 같은 작업을 수행할 수 있습니다. HBase에서 데이터 읽기 및 쓰기 or HBase 설치 새로운 노드에서.

자주 묻는 질문

예. HBase는 분산형 컬럼 지향 NoSQL 데이터베이스로, SQL Server를 모델로 합니다. Google Bigtable은 HDFS를 기반으로 구축되었습니다. 관계형 데이터베이스처럼 고정된 스키마나 SQL 조인을 사용하지 않고 컬럼 패밀리 테이블에 희소 데이터를 저장합니다.

WAL(HLog라고도 함)은 메모리 저장소에 저장되기 전 리전 서버에서 발생하는 모든 쓰기 작업을 기록합니다. WAL은 HDFS에 저장되므로 리전 서버가 플러시 전에 충돌하는 경우 HBase는 WAL을 재생하여 저장되지 않은 편집 내용을 복구합니다.

압축은 읽기 속도를 유지하기 위해 HFile을 병합합니다. 마이너 압축은 인접한 여러 개의 작은 HFile을 하나로 결합합니다. 메이저 압축은 컬럼 패밀리의 모든 HFile을 단일 파일로 다시 작성하고 삭제되거나 만료된 셀을 물리적으로 제거합니다.

둘 다 Bigtable에서 영감을 받은 NoSQL 스토어이지만, HBase는 단일 활성 HMaster와 강력한 일관성을 갖춘 HDFS에서 실행되는 반면, Cassandra HBase는 마스터리스 방식이며, 조정 가능한 최종 일관성 복제 기능을 제공합니다. HBase는 Hadoop 분석에 적합합니다. Cassandra 항상 켜져 있는 글쓰기에 적합합니다.

읽기 및 쓰기 작업이 여러 리전 서버에 고르게 분산되도록 행 키를 설계하십시오. 특정 리전 서버에 핫스팟이 발생하는 단조 증가 키는 피하십시오. 솔팅, 해싱 또는 필드 반전을 사용하고, 모든 셀에서 키가 반복되므로 키를 짧게 유지하십시오.

리전은 저장소 크기가 구성된 임계값을 초과하면 자동으로 분할됩니다. 리전 서버는 중간 행 키를 기준으로 리전을 두 개의 하위 리전으로 분할하며, HMaster는 부하 분산을 위해 이 중 하나를 다른 서버에 재할당할 수 있습니다.

AI 및 머신러닝 도구는 쿼리 및 액세스 패턴을 분석하여 핫스팟을 방지하는 행-키 및 열 패밀리 설계를 제안합니다. 또한 리전 서버 메트릭 및 로그를 스캔하여 리전 불균형 또는 노드 오류와 같은 이상 징후를 조기에 표시합니다.

예. GitHub 부조종사 HBase 초안 Java 클라이언트 코드, 셸 명령어 및 스캔 필터가 간략한 설명에 포함되어 있습니다. Rev실제 클러스터에서 실행하기 전에 출력 결과를 검토하여 테이블 이름, 컬럼 패밀리, Connection 및 Table과 같은 API 클래스가 올바른지 확인하십시오.

이 게시물을 요약하면 다음과 같습니다.