HBase와 Bigtable의 차이점
Bigtable에 액세스하는 한 가지 방법은 자바용 Apache HBase 클라이언트의 커스텀 버전을 사용하는 것입니다. 일반적으로 커스텀 설정된 클라이언트는 HBase의 표준 설치와 동일한 API를 노출합니다. 이 페이지에서는 자바용 Cloud Bigtable HBase 클라이언트와 표준 HBase 설치의 차이점을 설명합니다. 이러한 차이점은 대부분 Bigtable에서 자동으로 처리하는 관리 작업과 관련이 있습니다.
column family
column family를 만들 때 HBase 셸 또는 HBase API를 통해 블록 크기나 압축 방법을 구성할 수 없습니다. 블록 크기와 압축은 Bigtable에서 관리합니다.
HBase 셸을 사용하여 테이블에 대한 정보를 얻을 경우 항상 HBase 셸은 각 column family가 압축을 사용하지 않는다고 보고합니다. 실제로 Bigtable은 모든 데이터에 독점적인 압축 방법을 사용합니다.
Bigtable에서 column family 이름이 정규 표현식 [_a-zA-Z0-9][-_.a-zA-Z0-9]*
을 준수해야 합니다. HBase에서 Bigtable로 데이터를 가져올 경우 먼저 이 패턴에 따라 column family 이름을 변경해야 할 수 있습니다.
행 및 셀
- 개별 행에 ACL을 정의할 수 없습니다.
- 개별 셀에 공개 상태를 설정할 수 없습니다.
- 태그는 지원되지 않습니다.
org.apache.hadoop.hbase.Tag
클래스를 사용하여 개별 셀에 메타데이터를 추가할 수 없습니다.
변형 및 삭제
- Bigtable의
Append
작업은 리더와 작성자에 대해 완전한 원자성을 가집니다. 리더는 부분적으로 적용된Append
작업을 읽을 수 없습니다. - 타임스탬프를 기반으로 특정 열의 특정 버전을 삭제할 수는 있지만 지정된 column family 또는 행에서 특정 타임스탬프가 있는 모든 값을 삭제하는 것은 지원되지 않습니다.
org.apache.hadoop.hbase.client.Delete
클래스에서 다음 메서드는 지원되지 않습니다.new Delete(byte[] row, long timestamp)
addColumn(byte[] family, byte[] qualifier)
addFamily(byte[] family, long timestamp)
addFamilyVersion(byte[] family, long timestamp)
- HBase에서 마스킹을 삭제하지만, 삭제 요청 후 마스킹 요청이 전송될 때 Bigtable에서 삭제 후 마스킹을 수행하지 않습니다. 즉, Bigtable에서 셀에 전송된 쓰기 요청은 이전에 동일한 셀로 전송된 삭제 요청의 영향을 받지 않습니다.
가져오기 및 검색
- 역방향 스캔을 사용하면 행 범위를 역방향으로 읽을 수 있습니다. 자세한 내용은 역 스캔을 참고하세요.
- HBase와 달리 읽기 요청을 전송할 때 Bigtable은 예정된 가비지 컬렉션 주기에서 삭제되도록 표시된 만료된 데이터를 자동으로 필터링하지 않습니다. 만료된 데이터를 읽지 않으려면 읽기 요청에 필터를 사용하세요. 자세한 내용은 가비지 컬렉션 개요를 참고하세요.
- 타임스탬프 범위 내의 column family 버전 쿼리는 지원되지 않습니다. 다음 메서드를 호출할 수 없습니다.
org.apache.hadoop.hbase.client.Query#setColumnFamilyTimeRange(byte[] cf, long minStamp, long maxStamp)
org.apache.hadoop.hbase.client.Get#setColumnFamilyTimeRange(byte[] cf, long minStamp, long maxStamp)
org.apache.hadoop.hbase.client.Scan#setColumnFamilyTimeRange(byte[] cf, long minStamp, long maxStamp)
- column family를 기준으로 각 행에 있는 값의 수를 제한하는 것은 지원되지 않습니다.
org.apache.hadoop.hbase.client.Scan#setMaxResultsPerColumnFamily(int limit)
메서드를 호출할 수 없습니다. next()
를 호출할 때마다 반환할 최대 셀 수를 설정하는 작업은 지원되지 않습니다.org.apache.hadoop.hbase.client.Scan#setBatch(int batch)
메서드 호출은 무시됩니다.- 캐싱할 행 수 설정은 지원되지 않습니다.
org.apache.hadoop.hbase.client.Scan#setCaching(int caching)
메서드 호출은 무시됩니다.
보조 프로세서
보조 프로세서는 지원되지 않습니다. org.apache.hadoop.hbase.coprocessor
인터페이스를 구현하는 클래스를 만들 수 없습니다.
필터
다음 표에는 지원되는 필터가 나와 있습니다. 이 모든 필터는 org.apache.hadoop.hbase.filter
패키지에 있습니다.
지원 | 지원됨, 제한 있음 | 지원되지 않음 |
---|---|---|
|
||
ColumnPrefixFilter FamilyFilter FilterList FuzzyRowFilter MultipleColumnPrefixFilter MultiRowRangeFilter PrefixFilter 6RandomRowFilter TimestampsFilter
|
ColumnCountGetFilter 1ColumnPaginationFilter 1ColumnRangeFilter 1FirstKeyOnlyFilter 1KeyOnlyFilter 2PageFilter 5QualifierFilter 3RowFilter 1, 4SingleColumnValueExcludeFilter 1, 4, 7SingleColumnValueFilter 4, 7ValueFilter 4
|
DependentColumnFilter FirstKeyValueMatchingQualifiersFilter InclusiveStopFilter ParseFilter SkipFilter WhileMatchFilter |
또한 다음 차이점이 Bigtable 필터에 영향을 미칩니다.
- 정규 표현식 비교 연산자(
org.apache.hadoop.hbase.filter.RegexStringComparator
)를 사용하는 필터에서 정규 표현식은 자바 문법이 아닌 RE2 문법을 사용합니다. - 커스텀 필터는 지원되지 않습니다.
org.apache.hadoop.hbase.filter.Filter
에서 상속되는 클래스를 만들 수 없습니다. - 필터 표현식의 크기는 20KB로 제한됩니다. 필터 표현식의 크기를 줄이는 방법은 필터 기준의 해시 값을 저장하는 보조 열을 사용하는 것입니다.
타임스탬프
Bigtable은 타임스탬프를 마이크로초 단위로 저장하고, HBase는 타임스탬프를 밀리초 단위로 저장합니다. 이러한 차이는 Bigtable용 HBase 클라이언트 라이브러리를 사용하고 데이터에 역방향 타임스탬프가 있을 때 적용됩니다.
클라이언트 라이브러리는 마이크로초와 밀리초 간에 전환하지만 Bigtable에서 저장할 수 있는 최대 HBase 타임스탬프가 Long.MAX_VALUE/1000이므로 이보다 큰 값은 모두 Long.MAX_VALUE/1000으로 변환됩니다. 따라서 큰 역방항 타임스탬프 값이 올바르게 변환되지 않을 수 있습니다.
관리
이 섹션에서는 Bigtable에서 사용할 수 없거나 Bigtable에서 HBase와 다르게 작동하는 org.apache.hadoop.hbase.client.Admin
인터페이스의 메서드를 설명합니다. 이 목록은 완전한 목록이 아니며 최근에 추가된 HBase API 메서드를 반영하지 않을 수 있습니다.
관리 작업이 자동으로 처리되기 때문에 이러한 대부분의 메서드는 Bigtable에서 필요하지 않습니다. 일부 메서드는 Bigtable에서 지원하지 않는 기능과 관련되어 있어 사용할 수 없습니다.
일반 유지보수 작업
Bigtable은 대부분의 유지보수 작업을 자동으로 처리합니다. 따라서 다음과 같은 메서드는 사용할 수 없습니다.
abort(String why, Throwable e)
balancer()
enableCatalogJanitor(boolean enable)
getMasterInfoPort()
getOperationTimeout()
isCatalogJanitorEnabled()
rollWALWriter(ServerName serverName)
runCatalogScan()
setBalancerRunning(boolean on, boolean synchronous)
shutdown()
stopMaster()
updateConfiguration()
updateConfiguration(ServerName serverName)
지역 그룹
Bigtable에서 column family에 대한 지역 그룹을 지정할 수 없습니다 결과적으로 지역 그룹을 반환하는 HBase 메서드를 호출할 수 없습니다.
네임스페이스
Bigtable은 네임스페이스를 사용하지 않습니다. row key 프리픽스를 사용하여 네임스페이스를 시뮬레이션할 수 있습니다. 다음과 같은 메서드는 사용할 수 없습니다.
createNamespace(NamespaceDescriptor descriptor)
deleteNamespace(String name)
getNamespaceDescriptor(String name)
listNamespaceDescriptors()
listTableDescriptorsByNamespace(String name)
listTableNamesByNamespace(String name)
modifyNamespace(NamespaceDescriptor descriptor)
리전 관리
Bigtable은 리전과 유사한 태블릿을 사용하며, 태블릿을 자동으로 관리합니다. 따라서 다음과 같은 메서드는 사용할 수 없습니다.
assign(byte[] regionName)
closeRegion(byte[] regionname, String serverName)
closeRegion(ServerName sn, HRegionInfo hri)
closeRegion(String regionname, String serverName)
closeRegionWithEncodedRegionName(String encodedRegionName, String serverName)
compactRegion(byte[] regionName)
compactRegion(byte[] regionName, byte[] columnFamily)
compactRegionServer(ServerName sn, boolean major)
flushRegion(byte[] regionName)
getAlterStatus(byte[] tableName)
getAlterStatus(TableName tableName)
getCompactionStateForRegion(byte[] regionName)
getOnlineRegions(ServerName sn)
majorCompactRegion(byte[] regionName)
majorCompactRegion(byte[] regionName, byte[] columnFamily)
mergeRegions(byte[] encodedNameOfRegionA, byte[] encodedNameOfRegionB, boolean forcible)
move(byte[] encodedRegionName, byte[] destServerName)
offline(byte[] regionName)
splitRegion(byte[] regionName)
splitRegion(byte[] regionName, byte[] splitPoint)
stopRegionServer(String hostnamePort)
unassign(byte[] regionName, boolean force)
스냅샷
다음과 같은 메서드를 사용할 수 없습니다.
deleteSnapshots(Pattern pattern)
deleteSnapshots(String regex)
isSnapshotFinished(HBaseProtos.SnapshotDescription snapshot)
restoreSnapshot(byte[] snapshotName)
restoreSnapshot(String snapshotName)
restoreSnapshot(byte[] snapshotName, boolean takeFailSafeSnapshot)
restoreSnapshot(String snapshotName, boolean takeFailSafeSnapshot)
snapshot(HBaseProtos.SnapshotDescription snapshot)
테이블 관리
테이블 압축과 같은 작업은 자동으로 처리됩니다. 따라서 다음과 같은 메서드는 사용할 수 없습니다.
compact(TableName tableName)
compact(TableName tableName, byte[] columnFamily)
flush(TableName tableName)
getCompactionState(TableName tableName)
majorCompact(TableName tableName)
majorCompact(TableName tableName, byte[] columnFamily)
modifyTable(TableName tableName, HTableDescriptor htd)
split(TableName tableName)
split(TableName tableName, byte[] splitPoint)
보조 프로세서
Bigtable에서는 보조 프로세서를 지원하지 않습니다. 따라서 다음과 같은 메서드는 사용할 수 없습니다.
coprocessorService()
coprocessorService(ServerName serverName)
getMasterCoprocessors()
분산 절차
Bigtable은 분산 절차를 지원하지 않습니다. 따라서 다음과 같은 메서드는 사용할 수 없습니다.
execProcedure(String signature, String instance, Map<String, String> props)
execProcedureWithRet(String signature, String instance, Map<String, String> props)
isProcedureFinished(String signature, String instance, Map<String, String> props)