복붙노트

[HADOOP] HBase 스캔 성능

HADOOP

HBase 스캔 성능

저에게 500k 레코드를 제공하는 범위 스캔을 수행하고 있습니다. scan.setCaching (100000)을 설정하면 1 초도 걸리지 않지만 scan.setCaching (100000)이 설정되지 않은 경우 거의 38 초가 걸립니다.

scan.setBlockCache (false)와 scan.setCaching (100000)을 어떻게 설정합니까? 행이 캐시 될 것인가 아닌가?

첫 번째 검색 후에 OS 캐시를 삭제하지만 기록을 검색하는 데 시간이 변경되지는 않습니다. 왜?

그러면 읽기 성능을 어떻게 확인할 수 있습니까?

해결법

  1. ==============================

    1.Scan.setCaching은 잘못된 이름입니다. 그것은 실제로 Scan.setPrefetch와 같은 것으로 불려야합니다. setCaching은 실제로 얼마나 많은 행이 regionserver에 RPC 당 전송 될지를 지정합니다. setCaching (1)을 사용하면 next ()를 호출 할 때마다 regionserver에 대한 왕복 비용을 지불하게됩니다. 아래쪽은 더 많은 수로 설정하는 것이 클라이언트에서 추가 메모리를 지불하는 것입니다. 잠재적으로 사용하지 않을 행을 가져 오는 것입니다. 예를 들어 특정 수의 행에 도달 한 후 검색을 중지하거나 특정 가치를 찾은 후에

    Scan.setCaching은 잘못된 이름입니다. 그것은 실제로 Scan.setPrefetch와 같은 것으로 불려야합니다. setCaching은 실제로 얼마나 많은 행이 regionserver에 RPC 당 전송 될지를 지정합니다. setCaching (1)을 사용하면 next ()를 호출 할 때마다 regionserver에 대한 왕복 비용을 지불하게됩니다. 아래쪽은 더 많은 수로 설정하는 것이 클라이언트에서 추가 메모리를 지불하는 것입니다. 잠재적으로 사용하지 않을 행을 가져 오는 것입니다. 예를 들어 특정 수의 행에 도달 한 후 검색을 중지하거나 특정 가치를 찾은 후에

    Scan.setBlockCache는 Chandra가 지적한 것과는 완전히 다른 것을 의미합니다. 기본적으로 regionserver는이 Scan의 데이터를 MemStore의 별도 메모리 풀인 HBase BlockCache로 가져 오지 않도록 지시합니다. MemStores는 쓰기에 사용되고 BlockCache는 읽기에 사용되며이 두 메모리는 완전히 별개입니다. HBase는 현재 쓰기 캐시로 BlockCache를 사용하지 않습니다. hbase-site.xml의 hfile.block.cache.size 구성 설정을 사용하여 블록 캐시의 크기를 제어 할 수 있습니다. 마찬가지로 hbase.regionserver.global.memstore.size 설정을 통해 MemStore의 전체 풀 크기를 제어 할 수 있습니다.

    전체 테이블 스캔을 수행하고 블록 캐시에서 현재 작업 세트를 플러시하지 않으려면 setBlockCache (false)를 사용하는 것이 좋습니다. 그렇지 않으면 자주 사용되는 데이터를 스캔하는 경우 setBlockCache 만 남겨 두는 것이 좋습니다.

  2. ==============================

    2.Hbase에는 2 가지 유형의 캐시 구조 (메모리 저장과 블록 캐시)가 있습니다. 메모리 저장소는 MemStore로 구현되며 읽기 위해 사용하는 캐시는 블록 캐시입니다. HDFS에서 데이터 블록을 읽으면 BlockCache에 캐시됩니다. 인접 데이터의 후속 읽기는 BlockCache에서 제공됩니다. 따라서 수동으로 scan.set Block Cache (false)를 설정하면 hdfs에서 읽는 행의 캐싱이 중지됩니다. scan.set-caching (100000)은 스캐너와 관련된 클라이언트 측 최적화입니다. 따라서 여전히 영향을받지 않습니다.

    Hbase에는 2 가지 유형의 캐시 구조 (메모리 저장과 블록 캐시)가 있습니다. 메모리 저장소는 MemStore로 구현되며 읽기 위해 사용하는 캐시는 블록 캐시입니다. HDFS에서 데이터 블록을 읽으면 BlockCache에 캐시됩니다. 인접 데이터의 후속 읽기는 BlockCache에서 제공됩니다. 따라서 수동으로 scan.set Block Cache (false)를 설정하면 hdfs에서 읽는 행의 캐싱이 중지됩니다. scan.set-caching (100000)은 스캐너와 관련된 클라이언트 측 최적화입니다. 따라서 여전히 영향을받지 않습니다.

  3. from https://stackoverflow.com/questions/22528859/hbase-scan-performance by cc-by-sa and MIT license