ChatGPT를 능숙하게 사용하여 Hbase 스냅샷 읽기 성능 최적화 문제 해결

1. 배경

최근 회사는 Hbase 스캔 방식을 채택하여 작업이 완료되지 않고 영역 읽기 시간이 초과되는 경우가 종종 발생합니다.스캔 데이터의 전체 양으로 인해 총 행 수는 10억이고 열 수는 근접합니다. 500까지. 제안된 솔루션에 따라 Hbase 스냅샷 읽기 방법으로 변경하여 영역에 대한 과도한 압력을 방지합니다.

2. Hbase 스냅샷 원리

스냅샷 프로세스는 주로 3단계로 이루어집니다.

1. 전역 잠금을 추가합니다. 이때 데이터 쓰기, 업데이트 또는 삭제가 허용되지 않습니다.

2. Memstore의 캐시된 데이터를 파일로 플러시(선택 사항)

3. 모든 HFile 파일에 대한 새로운 참조 포인터를 생성합니다. 이러한 포인터 메타데이터는 스냅샷입니다.

3. 실제 온라인 실적

스냅샷 스캔으로 전환한 후 제출된 작업은 반나절 동안 제출할 수 없으며 거의 ​​1시간 후에만 작업을 시작할 수 있습니다.

일반적으로 프로그램이 멈추면 jstack을 사용하여 프로그램의 스택 정보를 보는 것을 생각할 것입니다.

(1) 프로그램의 프로세스 pid 보기(top 명령 또는 ps -ef|grep 명령)

(2) 프로그램의 pid를 찾아 jstack 정보를 출력

 프로그램이 이 위치에 고정되어 블록 정보를 계산하고 해당 Hbase 소스 코드를 찾아 해당 코드 정보를 볼 수 있음을 알 수 있습니다.

블록 위치 정보의 계산에 의한 것이라고 볼 수 있는데 위치란?

chatGPT를 사용하여 hbase 지역성의 의미를 쿼리하면 실제로 데이터 지역성임을 알 수 있으며 실제 작업에서 지역성 비율을 계산할 필요가 없습니다. 로컬 또는 원격

HBase locality的原理可以分为两个方面,即数据本地性和任务本地性。

数据本地性
在HBase中,数据是以Region的形式存储的,一个Region包含了一段连续的行键范围。每个Region都会被分配到一个RegionServer上进行管理,并在该RegionServer上存储它所包含的所有数据。

当客户端访问HBase中的数据时,它会首先向HBase的Master节点请求获取对应数据所在的RegionServer的信息,然后再从该RegionServer上获取所需的数据。如果客户端所在的节点与该数据所在的RegionServer节点相同,就可以直接在该节点上获取数据,避免了网络传输的延迟,从而提高了数据访问的效率。

任务本地性
HBase中的任务包括数据写入和数据查询两种类型。在HBase中,数据写入是通过向表中的RegionServer发送写请求来完成的。如果客户端所在的节点与该RegionServer节点相同,那么写请求可以直接发送到该节点上,从而实现本地写入。

另一方面,数据查询任务是由HBase的RegionServer节点完成的。当RegionServer节点接收到查询请求时,它会首先检查所需数据所在的Region是否已经在该节点上加载到内存中,如果是,则可以直接在该节点上执行查询操作,否则需要从其他节点上获取数据,这将导致额外的网络延迟和资源开销。

因此,为了最大化任务本地性,HBase通常会将数据分布在多个Region中,并将这些Region分配到尽可能多的节点上进行管理,从而最大化数据和任务之间的本地性。此外,HBase还提供了一些机制来管理Region的负载均衡和RegionServer节点的故障转移,以保证系统的高可用性和稳定性。

 결국 작업이 제출되는 위치에서  hbase.TableSnapshotInputFormat.locality.enabled 를 false로 설정하기만 하면  작업 제출이 매우 빨라집니다.

참고:

HBase 원칙 – 분산 시스템에서 스냅샷은 어떻게 작동합니까? – 태도가 있는 HBase/Spark/BigData

추천

출처blog.csdn.net/weixin_43291055/article/details/129616020