HBase 아키텍처에 대한 통찰력



이 게시물은 HBase 아키텍처에 대한 HBase 및 통찰력에 대해 설명합니다. 또한 Master, Region 서버 및 Zoo keeper와 같은 Hbase 구성 요소 및 사용 방법에 대해 설명합니다.

오늘의 게시물에서는 HBase 아키텍처에 대해 논의 해 보겠습니다. HBase 아키텍처에 대해 자세히 알아보기 전에 HBase의 기본 사항을 살펴 보겠습니다.





인도의 자바 개발자 급여

HBase – 기본 사항 :

HBase는 HDFS에서 실행되는 Google BigTable을 모델로 한 오픈 소스, NoSQL, 분산, 비 관계형, 버전 관리, 다차원, 열 지향 저장소입니다. 'NoSQL'은 데이터베이스가 기본 액세스 언어로 SQL을 지원하는 RDBMS가 아니라는 것을 의미하는 광범위한 용어입니다. 그러나 많은 유형의 NoSQL 데이터베이스가 있으며 Berkeley DB는 로컬 NoSQL 데이터베이스의 좋은 예인 반면 HBase는 매우 많은 분산 데이터베이스.

HBase는 Google BigTable의 모든 기능을 제공합니다. 자연어 검색을 위해 방대한 양의 데이터를 처리하는 Powerset의 프로젝트로 시작되었습니다. Apache의 Hadoop 프로젝트의 일부로 개발되었으며 HDFS (Hadoop 분산 파일 시스템) 위에서 실행됩니다. 대량의 희소 데이터를 저장하는 내결함성 방법을 제공합니다. HBase는 형식화 된 열, 보조 인덱스, 트리거 및 고급 쿼리 언어 등과 같이 RDBMS에서 사용할 수있는 많은 기능이 없기 때문에 실제로 '데이터베이스'보다 '데이터 저장소'에 가깝습니다.



열 지향 데이터베이스에서 데이터 테이블은 데이터 행이 아닌 데이터 열 섹션으로 저장됩니다. 열 지향 데이터베이스의 데이터 모델은 테이블 이름, 행 키, 열 패밀리, 열, 타임 스탬프로 구성됩니다. HBase에서 테이블을 생성하는 동안 행은 행 키와 타임 스탬프를 사용하여 고유하게 식별됩니다. 이 데이터 모델에서 column family는 정적이지만 열은 동적입니다. 이제 HBase 아키텍처를 살펴 보겠습니다.

HBase는 언제 갈까요?

HBase는 수억 또는 수십억 개의 행이있는 경우에만 좋은 옵션입니다. HBase는 포트가 아닌 완전한 재 설계로 RDBMS에서 HBase 로의 전환을 고려할 때도 사용할 수 있습니다. 즉, HBase는 클래식 트랜잭션 애플리케이션 또는 관계형 분석에 최적화되어 있지 않습니다. 또한 대규모 배치 MapReduce를 수행 할 때 HDFS를 완전히 대체하는 것은 아닙니다. 그렇다면 왜 HBase를 선택해야합니까 ?? 애플리케이션에 각 행이 약간 다른 가변 스키마가있는 경우 HBase를 살펴 봐야합니다.

HBase 아키텍처 :

다음 그림은 HBase 아키텍처를 명확하게 설명합니다.



HBase 아키텍처에 대한 통찰력

HBase에는 세 가지 주요 구성 요소가 있습니다. 마스터, 지역 서버 및 사육사 . 다른 구성 요소는 Memstore, HFile 및 WAL.

HBase는 HDFS 위에서 실행되므로 HMaster가 마스터 노드가되고 리젼 서버가 슬레이브 노드가되는 마스터-슬레이브 아키텍처를 활용합니다. 클라이언트가 쓰기 요청을 보내면 HMaster는 해당 요청을 가져와 각 리젼 서버로 전달합니다.

지역 서버 :

데이터 노드와 유사한 역할을하는 시스템입니다. 리젼 서버 (RS)가 쓰기 요청을 수신하면 요청을 특정 리전으로 보냅니다. 각 지역은 행 세트를 저장합니다. 행 데이터는 여러 컬럼 패밀리 (CF)로 분리 될 수 있습니다. 특정 CF의 데이터는 Memstore와 HFile 집합으로 구성된 HStore에 저장됩니다.

자바 스크립트를 사용하여 HTML의 진행률 표시 줄

Memstore는 무엇을합니까?

Memstore는 특정 지역 서버 내에서 수행 된 읽기 및 쓰기 작업에 대한 모든 로그를 추적합니다. 이것으로부터 우리는 Hadoop의 이름 노드와 유사하게 작동한다고 말할 수 있습니다. Memstore는 메모리 내 스토리지이므로 Memstore는 각 데이터 노드의 메모리 내 스토리지를 사용하여 로그를 저장합니다. 특정 임계 값이 충족되면 Memstore 데이터가 HFile로 플러시됩니다.

Memstore를 사용하는 주요 목적은 행 키로 정렬 된 DFS에 데이터를 저장해야한다는 것입니다. HDFS는 파일 수정이 허용되지 않는 순차 읽기 / 쓰기 용으로 설계되었으므로 HBase는 데이터를 수신 할 때 디스크에 효율적으로 데이터를 쓸 수 없습니다. 기록 된 데이터는 정렬되지 않습니다 (입력이 정렬되지 않은 경우). 이는 향후 최적화되지 않음을 의미합니다. 검색. 이 문제를 해결하기 위해 HBase는 메모리 (Memstore에서)에서 마지막으로 수신 한 데이터를 버퍼링하고 플러시하기 전에 '정렬'한 다음 빠른 순차 쓰기를 사용하여 HDFS에 씁니다. 따라서 HFile에는 정렬 된 행 목록이 포함됩니다.

Memstore 플러시가 발생할 때마다 각 CF에 대해 하나의 HFile이 생성되고 잦은 플러시로 인해 수많은 HFile이 생성 될 수 있습니다. 읽는 동안 HBase는 많은 HFile을 확인해야하기 때문에 읽기 속도가 저하 될 수 있습니다. 너무 많은 HFile을 여는 것을 방지하고 읽기 성능 저하를 방지하기 위해 HFiles 압축 프로세스가 사용됩니다. HBase는 주기적으로 (특정 구성 가능한 임계 값이 충족 될 때) 여러 개의 작은 HFile을 큰 파일로 압축합니다. 분명히 Memstore 플러시로 생성 된 파일이 많을수록 시스템에 대한 작업 (추가로드)이 늘어납니다. 또한 압축 프로세스는 일반적으로 다른 요청을 처리하는 것과 병렬로 수행되며 HBase가 HFile 압축을 따라갈 수없는 경우 (예, 이에 대한 임계 값도 구성되어 있음) RS에 대한 쓰기를 다시 차단합니다. 위에서 논의한 것처럼 이것은 매우 바람직하지 않습니다.

데이터가 Memstore 전체에서 지속될 것이라고 확신 할 수 없습니다. 특정 데이터 노드가 다운되었다고 가정합니다. 그러면 해당 데이터 노드의 메모리에있는 데이터가 손실됩니다.

이 문제를 극복하기 위해 마스터로부터 요청이 오면 WAL에도 기록했습니다. WAL은 미리 쓰기 로그 영구 저장소 인 HDFS에 상주합니다. 이제 데이터 노드가 다운 된 경우에도 데이터가 손실되지 않도록 할 수 있습니다. WAL에서해야 할 모든 작업의 ​​사본이 있습니다. 데이터 노드가 가동되면 모든 활동을 다시 수행합니다. 작업이 완료되면 모든 것이 Memstore 및 WAL에서 플러시되고 메모리가 부족하지 않도록 HFile에 기록됩니다.

10 행을 추가하고 쓰기 요청이 들어 오면 모든 메타 데이터를 Memstore와 WAL에 제공하는 간단한 예를 들어 보겠습니다. 특정 행이 HFile에 기록되면 Memstore 및 WAL의 모든 항목이 플러시됩니다.

동물원 키퍼 :

HBase는 Zoo keeper와 통합됩니다. HBase를 시작하면 Zoo keeper 인스턴스도 시작됩니다. 그 이유는 Zoo keeper가 HBase에있는 모든 지역 서버를 추적하는 데 도움이되기 때문입니다. Zoo keeper는 얼마나 많은 지역 서버가 있는지, 어떤 지역 서버가 어떤 데이터 노드에서 어떤 데이터 노드를 보유하고 있는지 추적합니다. Hadoop이 누락 된 더 작은 데이터 세트를 추적합니다. 대부분의 메타 데이터를 추적하는 Hadoop의 오버 헤드를 줄입니다. 따라서 HMaster는 실제로 Zoo keeper에 연락하여 지역 서버의 세부 정보를 얻습니다.

질문이 있으십니까? 댓글 섹션에 언급하시면 다시 연락 드리겠습니다.

C ++ stl 정렬

관련 게시물:

유용한 Hive 명령