HBase新特性—Stripe Compaction
借鉴于LevelDB、Cassandra的Compaction方法,https://issues.apache.org/jira/browse/HBASE-7667 提出了Stripe Compaction的方法。 Motivation: 1)过多Region会增大RS维护的开销,降低RS的读写性能。随着数据量的增大,在一定程度上增加Region个数,会提高
借鉴于LevelDB、Cassandra的Compaction方法,https://issues.apache.org/jira/browse/HBASE-7667 提出了Stripe Compaction的方法。
Motivation:
1)过多Region会增大RS维护的开销,降低RS的读写性能。随着数据量的增大,在一定程度上增加Region个数,会提高系统的吞吐率。然而,RS上服务的Region个数增多,增加了RS下内存维护的开销,尤其每个Store下都配置有一个MemStore,从而会造成频率更高的Flush操作,影响系统的读写性能。因此,如果能够提出更轻量级的mini-Region,不仅能够降低服务多个Region的开销,而且能够提升读写数据的效率。
2) Region Compaction容易”放大”。例如,Region区间为[1FFF,2FFF),在该区间内仅有[1FFF,21FF)区间有大量的写操作(put、delete),但是,在触及MajorCompaction条件时,却需要对所有的文件执行Major Compaction,从而引起大量的IO。
3) Region Split操作代价较大。
需要了解之前HBase的Compaction与Flush过程,可以参考:HBaseCompaction机制 以及 HBase Flush对读写的影响
Stripe-Compaction设计的核心思想:
1)对于Region下的rowkey区间进行二次切分,例如[1FFF,2FFF),切分成[1FFF,24FF),[24FF,2FFF)两个区间,每个区间成为Stripe。
2)Region下的数据文件分为Level-0和Level-1两层。其中Level-0主要用来存储临时的数据文件(例如使用bulkload或者执行mem flush操作之后的数据), Level-1层的数据是按照Stripe的分区来区分。
3)支持两种方式的配置:Mini-regions的个数设置、或者以Size-based为大小触发因子的自动切分机制。
4)容错机制。如果在Stripes之间存在空洞。那么可以根据在Store当中的设置,将所有的处于Level-1层的文件回归到Level-0重新进行compaction。
5)Get操作时,一个Row所涉及到文件有:MemStore、Level-0下所有文件、以及Level-1下对应Stripe区下的文件。根据Stack的意见,最终Level-0下的文件只是一个暂时的状态,大部分文件都位于Level-1 Stripe下,因此,这样随机读时,需要涉及到的文件更聚集。
6)Scan操作时,需要定位startrow即可。在扫描过程中,会按照Stripe的row区间的排序,依次进行。
7)Compaction,是Level-0上升到Level-1的过程,同时,在Level-1层次的数据,也会进行相关的合并。
8)在Split操作时,定位Rowkey区间的中心点,可以根据Stripe记录的位置,进一步查找,因此,使用预置的Stripe会有利于Split操作的进行,可以实现多数HFile文件直接拷贝到子Region目录,从而加快了Split操作的效率。
下面对于Cassandra以及LevelDB中使用的多层次Compaction算法做一个介绍。
1)分层式压缩方式将数据分成条个层,最底层的叫L0,其上分别是L1,L2….,每一层的数据大小是其上的那一层数据最大大小的10倍,其中最底层L0的大小为5M (可以配置)
2) 当level层次大于0时,同一层的各个文件之间的Rowkey区间不会重叠。所以在level n与level n+1的数据块进行合并时,可以明确的知道某个key值处在哪个数据块中,可以一个数据块一个数据块的合并,合并后生成新块就丢掉老块。不用一直到所有合并完成后才能删除老的块。
3)整体执行流程是从L0->L1->L2,依次合并的过程,如下图所示。
由上图,我们可以得知,越是level较低的块,它的数据就越新,在满足向下归约合并的过程中,就会按照文件的Rowkey的区间,进行合并,去除多余的版本,或者执行相关删除操作。因此,在读请求最极端的情况下,从Level0开始读数据,一直读到最下层Level n。
这种Compaction的优势在于:
1)大部分的读操作如果有LRU特性,都会落入较低的Level上。因此,数据越"热",Level就越低。从而有利于未来HFile多种存储介质的定位问题。
2)在合并的过程中,仅需在由上到下的部分文件参与,而不是要对所有文件执行Compaction操作。这样会加快Compaction执行的效率。
劣势在于,如果层次太多,在递归合并的过程中,容易造成某个区间的Compaction风暴,影响该区间数据操作的吞吐。
因此,HBase-Stripe Compaction的方案中,只有两层,Level 0和Level1,这种方法在保留分层压缩的优势的同时,降低了总文件个数,有利于RS执行Split、Merge等操作。
参考文献:
[1] HBase-7667 https://issues.apache.org/jira/browse/HBASE-7667
本系列文章属于Binos_ICT在Binospace个人技术博客原创,原文链接为http://www.binospace.com/index.php/hbase-new-features-stripe-compaction,未经允许,不得转载。
From Binospace, post HBase新特性—Stripe Compaction
文章的脚注信息由WordPress的wp-posturl插件自动生成
Copyright © 2008
This feed is for personal, non-commercial use only.
The use of this feed on other websites breaches copyright. If this content is not in your news reader, it makes the page you are viewing an infringement of the copyright. (Digital Fingerprint:
)

핫 AI 도구

Undresser.AI Undress
사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover
사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

AI Hentai Generator
AI Hentai를 무료로 생성하십시오.

인기 기사

뜨거운 도구

메모장++7.3.1
사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전
중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기
강력한 PHP 통합 개발 환경

드림위버 CS6
시각적 웹 개발 도구

SublimeText3 Mac 버전
신 수준의 코드 편집 소프트웨어(SublimeText3)

뜨거운 주제











SpringMVC의 주요 기능 이해: 이러한 중요한 개념을 익히려면 특정 코드 예제가 필요합니다. SpringMVC는 개발자가 MVC(Model-View-Controller) 아키텍처 패턴을 통해 유연하고 확장 가능한 구조를 구축하는 데 도움이 되는 Java 기반 웹 애플리케이션 개발 프레임워크입니다. 웹 애플리케이션. SpringMVC의 주요 기능을 이해하고 익히면 웹 애플리케이션을 보다 효율적으로 개발하고 관리할 수 있습니다. 이 기사에서는 SpringMVC의 몇 가지 중요한 개념을 소개합니다.

PHP8.3 출시: 새로운 기능 개요 기술이 계속 발전하고 변화가 필요함에 따라 프로그래밍 언어는 지속적으로 업데이트되고 개선됩니다. 웹 개발에 널리 사용되는 스크립팅 언어인 PHP는 개발자에게 더욱 강력하고 효율적인 도구를 제공하기 위해 지속적으로 개선되어 왔습니다. 최근 출시된 PHP 8.3 버전에는 오랫동안 기다려온 많은 새로운 기능과 개선 사항이 포함되어 있습니다. 이러한 새로운 기능에 대한 개요를 살펴보겠습니다. null이 아닌 속성의 초기화 이전 버전의 PHP에서는 클래스 속성에 명시적으로 값이 할당되지 않은 경우 해당 값은

인터넷의 급속한 발전으로 프로그래밍 언어는 끊임없이 진화하고 업데이트되고 있습니다. 그 중 오픈소스 프로그래밍 언어인 Go 언어는 최근 몇 년간 많은 주목을 받고 있습니다. Go 언어는 간단하고 효율적이며 안전하고 개발 및 배포가 용이하도록 설계되었습니다. 높은 동시성, 빠른 컴파일, 메모리 안전성 등의 특징을 갖고 있어 웹 개발, 클라우드 컴퓨팅, 빅데이터 등 분야에서 널리 사용됩니다. 그러나 현재 다양한 버전의 Go 언어를 사용할 수 있습니다. 적합한 Go 언어 버전을 선택할 때 요구 사항과 기능을 모두 고려해야 합니다. 머리

최신 기술을 익히는 데 도움이 되는 PHP8의 새로운 기능에 대한 심층 분석입니다. 시간이 지남에 따라 PHP 프로그래밍 언어는 지속적으로 발전하고 개선되었습니다. 최근 출시된 PHP8 버전은 개발자에게 많은 흥미로운 새로운 기능과 개선 사항을 제공하여 개발 작업에 더 많은 편의성과 효율성을 제공합니다. 이 기사에서는 PHP8의 새로운 기능을 심층적으로 분석하고 이러한 최신 기술을 더 잘 익히는 데 도움이 되는 특정 코드 예제를 제공합니다. JIT 컴파일러 PHP8에는 JIT(Just-In-Time) 컴파일이 도입되었습니다.

Golang(Go 언어)에는 전통적인 의미의 클래스 개념이 없지만, 클래스와 유사한 객체지향 기능을 구현할 수 있는 구조체라는 데이터 형식을 제공합니다. 이 기사에서는 구조를 사용하여 객체 지향 기능을 구현하는 방법을 설명하고 특정 코드 예제를 제공합니다. 구조의 정의와 사용법 먼저 구조의 정의와 사용법을 살펴보자. Golang에서는 type 키워드를 통해 구조를 정의한 다음 필요한 곳에 사용할 수 있습니다. 구조에는 속성이 포함될 수 있습니다.

C++ 함수에는 단순 함수, const 함수, 정적 함수 및 가상 함수 유형이 있습니다. 기능에는 인라인 함수, 기본 매개변수, 참조 반환 및 오버로드된 함수가 포함됩니다. 예를 들어,calculateArea 함수는 π를 사용하여 주어진 반경의 원의 면적을 계산하고 이를 출력으로 반환합니다.

php8의 새로운 기능에는 JIT 컴파일러, 유형 추론, 명명된 매개변수, 공용체 유형, 속성, 오류 처리 개선, 비동기 프로그래밍 지원, 새로운 표준 라이브러리 함수 및 익명 클래스 확장이 포함됩니다. 자세한 소개: 1. JIT 컴파일러, PHP8은 중요한 성능 향상을 제공하는 JIT 컴파일러를 도입하여 일부 고주파 실행 코드를 실시간으로 컴파일하고 최적화하여 실행 속도를 향상시킵니다. 개발자가 변수 등을 선언할 때 변수의 유형을 자동으로 추론할 수 있도록 유형 추론 기능을 도입합니다.

[Go 언어의 새로운 기능 해석: 프로그래밍을 보다 효율적으로 만들기 위해서는 구체적인 코드 예제가 필요합니다.] 최근 소프트웨어 개발 분야에서 Go 언어가 많은 주목을 받고 있으며, Go 언어의 단순하고 효율적인 디자인 개념이 점점 더 주목을 받고 있습니다. 개발자. 정적으로 유형이 지정된 프로그래밍 언어인 Go 언어는 개발 효율성을 향상하고 코드 작성 프로세스를 단순화하는 새로운 기능을 계속해서 도입하고 있습니다. 이 글에서는 Go 언어의 최신 기능에 대해 심층적으로 설명하고, 구체적인 코드 예제를 통해 이러한 새로운 기능이 제공하는 편리함을 경험하는 방법을 논의할 것입니다. 모듈형 개발(GoModules) 1부터 Go 언어
