알려진 HBase 버전 간 비호환성
알려진 HBase 버전 간 비호환성 (Known Incompatibilities Among HBase Versions)
이전 버전의 HBase에서 HBase 2.0으로 업그레이드할 때 겪게 될 주요 비호환 변경 사항을 정리한 페이지예요. 특히 1.x 사용자가 HBase 2.0으로 넘어갈 때 마주칠 수 있는 명백한 비호환성에 초점을 맞추고 있어요. 업그레이드 전에 꼭 확인해 보면 도움이 돼요.
출처: 문서
본문
HBase 2.0의 비호환 변경 (HBase 2.0 Incompatible Changes)
이 부록은 이전 버전의 HBase와 비교한 HBase 2.0의 비호환 변경 사항을 설명해요. 이 목록이 가능한 모든 비호환성을 모두 포함한다는 의미는 아니에요. 대신 이 내용은 HBase 1.x 릴리스에서 오는 대부분의 사용자가 마주칠 명백한 비호환성에 대한 통찰을 주기 위한 것이에요.
HBase 2.0의 주요 변경 목록 (List of Major Changes for HBase 2.0)
- HBASE-1912- HBCK는 불일치를 포착하기 위한 HBase 데이터베이스 검사 도구예요. HBase 관리자는 HBase 1.0 버전의 hbck 도구로 HBase 2.0 데이터베이스를 검사해서는 안 돼요. 그렇게 하면 데이터베이스가 손상되고 예외 오류가 발생해요.
- HBASE-16189와 HBASE-18945- HBase 1.0 버전으로는 HBase 2.0 hfile을 열 수 없어요. HBase 1.x 버전을 사용하는 관리자나 사용자라면 먼저 최신 HBase 1.x 버전으로 롤링 업그레이드한 다음 HBase 2.0으로 업그레이드해야 해요.
- HBASE-18240 - ReplicationEndpoint 인터페이스를 변경했어요. 또한 hbase 클러스터에서 실행될 것으로 예상되는 모든 서드 파티 유틸리티를 패키징하는 새로운 hbase-third party 1.0을 도입했어요.
코프로세서 API 변경 (Coprocessor API changes)
- HBASE-16769 - MasterObserver와 RegionServerObserver에서 PB 참조를 deprecated 처리했어요.
- HBASE-17312 - [JDK8] Observer Coprocessors에 기본 메서드를 사용해요. BaseMasterAndRegionObserver, BaseMasterObserver, BaseRegionObserver, BaseRegionServerObserver 및 BaseWALObserver의 인터페이스 클래스는 JDK8의 'default' 키워드를 사용해서 빈 no-op 구현을 제공해요.
- 인터페이스 HTableInterface HBase 2.0은 아래 나열된 메서드에 다음과 같은 변경을 도입해요:
인터페이스 CoprocessorEnvironment 변경 (interface CoprocessorEnvironment changes)
ChangeResult추상 메서드 getTable ( TableName )이 제거되었어요.클라이언트 프로그램이 NoSuchMethodError 예외로 중단될 수 있어요.추상 메서드 getTable ( TableName, ExecutorService )이 제거되었어요.클라이언트 프로그램이 NoSuchMethodError 예외로 중단될 수 있어요.
- 공개 대상 (Public Audience)
다음 표는 코프로세서 변경 사항을 설명해요.
클래스 CoprocessorRpcChannel
ChangeResult이 클래스가 인터페이스가 되었어요.이 클래스의 사용 방식에 따라 클라이언트 프로그램이 IncompatibleClassChangeError 또는 InstantiationError 예외로 중단될 수 있어요.
클래스 CoprocessorHost
Audience Private였지만 제거된 클래스들이에요.
ChangeResult필드 coprocessors의 타입이 java.util.SortedSet
MasterObserver
HBase 2.0은 MasterObserver 인터페이스에 다음과 같은 변경을 도입해요.
인터페이스 MasterObserver
ChangeResult추상 메서드 void postCloneSnapshot ( ObserverContext
RegionObserver
HBase 2.0은 RegionObserver 인터페이스에 다음과 같은 변경을 도입해요.
인터페이스 RegionObserver
ChangeResult추상 메서드 void postCloseRegionOperation ( ObserverContext
WALObserver
HBase 2.0은 WALObserver 인터페이스에 다음과 같은 변경을 도입해요.
인터페이스 WALObserver
ChangeResult추상 메서드 void postWALWrite ( ObserverContext
기타 (Miscellaneous)
HBase 2.0은 다음 클래스에 변경을 도입해요:
hbase-server-1.0.0.jar, OnlineRegions.class 패키지 org.apache.hadoop.hbase.regionserver
OnlineRegions.getFromOnlineRegions ( String p1 ) [abstract] : HRegion
org/apache/hadoop/hbase/regionserver/OnlineRegions.getFromOnlineRegions:(Ljava/lang/String;)Lorg/apache/hadoop/hbase/regionserver/HRegion;
ChangeResult반환 값 타입이 Region에서 Region으로 변경되었어요.이 메서드는 반환 타입이 메서드 시그니처의 일부이기 때문에 제거되었어요.클라이언트 프로그램이 NoSuchMethodError 예외로 중단될 수 있어요.
hbase-server-1.0.0.jar, RegionCoprocessorEnvironment.class 패키지 org.apache.hadoop.hbase.coprocessor
RegionCoprocessorEnvironment.getRegion ( ) [abstract] : HRegion
org/apache/hadoop/hbase/coprocessor/RegionCoprocessorEnvironment.getRegion:()Lorg/apache/hadoop/hbase/regionserver/HRegion;
ChangeResult반환 값 타입이 org.apache.hadoop.hbase.regionserver.HRegion에서 org.apache.hadoop.hbase.regionserver.Region으로 변경되었어요.이 메서드는 반환 타입이 메서드 시그니처의 일부이기 때문에 제거되었어요.클라이언트 프로그램이 NoSuchMethodError 예외로 중단될 수 있어요.
hbase-server-1.0.0.jar, RegionCoprocessorHost.class 패키지 org.apache.hadoop.hbase.regionserver
RegionCoprocessorHost.postAppend ( Append append, Result result ) : void
org/apache/hadoop/hbase/regionserver/RegionCoprocessorHost.postAppend:(Lorg/apache/hadoop/hbase/client/Append;Lorg/apache/hadoop/hbase/client/Result;)V
ChangeResult반환 값 타입이 void에서 org.apache.hadoop.hbase.client.Result로 변경되었어요.이 메서드는 반환 타입이 메서드 시그니처의 일부이기 때문에 제거되었어요.클라이언트 프로그램이 NoSuchMethodError 예외로 중단될 수 있어요.
RegionCoprocessorHost.preStoreFileReaderOpen ( FileSystem fs, Path p, FSDataInputStreamWrapper in, long size, CacheConfig cacheConf, Reference r ) : StoreFile.Reader
org/apache/hadoop/hbase/regionserver/RegionCoprocessorHost.preStoreFileReaderOpen:(Lorg/apache/hadoop/fs/FileSystem;Lorg/apache/hadoop/fs/Path;Lorg/apache/hadoop/hbase/io/FSDataInputStreamWrapper;JLorg/apache/hadoop/hbase/io/hfile/CacheConfig;Lorg/apache/hadoop/hbase/io/Reference;)Lorg/apache/hadoop/hbase/regionserver/StoreFile$Reader;
ChangeResult반환 값 타입이 StoreFile.Reader에서 StoreFileReader로 변경되었어요.이 메서드는 반환 타입이 메서드 시그니처의 일부이기 때문에 제거되었어요.클라이언트 프로그램이 NoSuchMethodError 예외로 중단될 수 있어요.
IPC
스케줄러 변경 (Scheduler changes):
- 다음 메서드들이 추상이 되었어요:
package org.apache.hadoop.hbase.ipc
클래스 RpcScheduler
ChangeResult추상 메서드 void dispatch ( CallRunner )이 이 클래스에서 제거되었어요.클라이언트 프로그램이 NoSuchMethodError 예외로 중단될 수 있어요.
hbase-server-1.0.0.jar, RpcScheduler.class 패키지 org.apache.hadoop.hbase.ipc
RpcScheduler.dispatch ( CallRunner p1 ) [abstract] : void 1
org/apache/hadoop/hbase/ipc/RpcScheduler.dispatch:(Lorg/apache/hadoop/hbase/ipc/CallRunner;)V
ChangeResult반환 값 타입이 void에서 boolean으로 변경되었어요.이 메서드는 반환 타입이 메서드 시그니처의 일부이기 때문에 제거되었어요.클라이언트 프로그램이 NoSuchMethodError 예외로 중단될 수 있어요.
- 다음 추상 메서드들이 제거되었어요:
인터페이스 PriorityFunction
ChangeResult추상 메서드 long getDeadline ( RPCProtos.RequestHeader, Message )이 이 인터페이스에서 제거되었어요.클라이언트 프로그램이 NoSuchMethodError 예외로 중단될 수 있어요.추상 메서드 int getPriority ( RPCProtos.RequestHeader, Message )이 이 인터페이스에서 제거되었어요.클라이언트 프로그램이 NoSuchMethodError 예외로 중단될 수 있어요.
서버 API 변경 (Server API changes):
클래스 RpcServer
ChangeResult필드 CurCall의 타입이 java.lang.ThreadLocal<RpcServer.Call>에서 java.lang.ThreadLocal
다음 추상 메서드가 제거되었어요:
ChangeResult추상 메서드 Pair<Message,CellScanner> call ( BlockingService, Descriptors.MethodDescriptor, Message, CellScanner, long, MonitoredRPCHandler )이 이 인터페이스에서 제거되었어요.클라이언트 프로그램이 NoSuchMethodError 예외로 중단될 수 있어요.
복제와 WAL 변경 (Replication and WAL changes):
HBASE-18733: WALKey가 HBase 2.0에서 완전히 제거(purge)되었어요. 다음은 WALKey의 변경 사항이에요:
WALKey 클래스 (class WALKey)
ChangeResult필드 clusterIds의 접근 수준이 protected에서 private로 변경되었어요.클라이언트 프로그램이 IllegalAccessError 예외로 중단될 수 있어요.필드 compressionContext의 접근 수준이 protected에서 private로 변경되었어요.클라이언트 프로그램이 IllegalAccessError 예외로 중단될 수 있어요.필드 encodedRegionName의 접근 수준이 protected에서 private로 변경되었어요.클라이언트 프로그램이 IllegalAccessError 예외로 중단될 수 있어요.필드 tablename의 접근 수준이 protected에서 private로 변경되었어요.클라이언트 프로그램이 IllegalAccessError 예외로 중단될 수 있어요.필드 writeTime의 접근 수준이 protected에서 private로 변경되었어요.클라이언트 프로그램이 IllegalAccessError 예외로 중단될 수 있어요.
다음 필드들이 제거되었어요:
ChangeResult필드 LOG(타입 org.apache.commons.logging.Log)이 이 클래스에서 제거되었어요.클라이언트 프로그램이 NoSuchFieldError 예외로 중단될 수 있어요.필드 VERSION(타입 WALKey.Version)이 이 클래스에서 제거되었어요.클라이언트 프로그램이 NoSuchFieldError 예외로 중단될 수 있어요.필드 logSeqNum(타입 long)이 이 클래스에서 제거되었어요.클라이언트 프로그램이 NoSuchFieldError 예외로 중단될 수 있어요.
다음은 WALEdit.class의 변경 사항이에요: hbase-server-1.0.0.jar, WALEdit.class 패키지 org.apache.hadoop.hbase.regionserver.wal
WALEdit.getCompaction ( Cell kv ) [static] : WALProtos.CompactionDescriptor
org/apache/hadoop/hbase/regionserver/wal/WALEdit.getCompaction:(Lorg/apache/hadoop/hbase/Cell;)Lorg/apache/hadoop/hbase/protobuf/generated/WALProtos$CompactionDescriptor;
ChangeResult반환 값 타입이 org.apache.hadoop.hbase.protobuf.generated.WALProtos.CompactionDescriptor에서 org.apache.hadoop.hbase.shaded.protobuf.generated.WALProtos.CompactionDescriptor로 변경되었어요.이 메서드는 반환 타입이 메서드 시그니처의 일부이기 때문에 제거되었어요.클라이언트 프로그램이 NoSuchMethodError 예외로 중단될 수 있어요.
WALEdit.getFlushDescriptor ( Cell cell ) [static] : WALProtos.FlushDescriptor
org/apache/hadoop/hbase/regionserver/wal/WALEdit.getFlushDescriptor:(Lorg/apache/hadoop/hbase/Cell;)Lorg/apache/hadoop/hbase/protobuf/generated/WALProtos$FlushDescriptor;
ChangeResult반환 값 타입이 org.apache.hadoop.hbase.protobuf.generated.WALProtos.FlushDescriptor에서 org.apache.hadoop.hbase.shaded.protobuf.generated.WALProtos.FlushDescriptor로 변경되었어요.이 메서드는 반환 타입이 메서드 시그니처의 일부이기 때문에 제거되었어요.클라이언트 프로그램이 NoSuchMethodError 예외로 중단될 수 있어요.
WALEdit.getRegionEventDescriptor ( Cell cell ) [static] : WALProtos.RegionEventDescriptor
org/apache/hadoop/hbase/regionserver/wal/WALEdit.getRegionEventDescriptor:(Lorg/apache/hadoop/hbase/Cell;)Lorg/apache/hadoop/hbase/protobuf/generated/WALProtos$RegionEventDescriptor;
ChangeResult반환 값 타입이 org.apache.hadoop.hbase.protobuf.generated.WALProtos.RegionEventDescriptor에서 org.apache.hadoop.hbase.shaded.protobuf.generated.WALProtos.RegionEventDescriptor로 변경되었어요.이 메서드는 반환 타입이 메서드 시그니처의 일부이기 때문에 제거되었어요.클라이언트 프로그램이 NoSuchMethodError 예외로 중단될 수 있어요.
다음은 WALKey.class의 변경 사항이에요: 패키지 org.apache.hadoop.hbase.wal
WALKey.getBuilder ( WALCellCodec.ByteStringCompressor compressor ) : WALProtos.WALKey.Builder
org/apache/hadoop/hbase/wal/WALKey.getBuilder:(Lorg/apache/hadoop/hbase/regionserver/wal/WALCellCodec$ByteStringCompressor;)Lorg/apache/hadoop/hbase/protobuf/generated/WALProtos$WALKey$Builder;
ChangeResult반환 값 타입이 org.apache.hadoop.hbase.protobuf.generated.WALProtos.WALKey.Builder에서 org.apache.hadoop.hbase.shaded.protobuf.generated.WALProtos.WALKey.Builder로 변경되었어요.이 메서드는 반환 타입이 메서드 시그니처의 일부이기 때문에 제거되었어요.클라이언트 프로그램이 NoSuchMethodError 예외로 중단될 수 있어요.
Deprecated API 또는 코프로세서 (Deprecated APIs or coprocessor):
HBASE-16769 - MasterObserver와 RegionServerObserver의 PB 참조가 제거되었어요.
Admin 인터페이스 API 변경 (Admin Interface API changes):
HBase 1.0 클라이언트(RplicationAdmin, ACC, Thrift 및 REST의 Admin ops 사용 포함)로 HBase 2.0 클러스터를 관리할 수 없어요. protobuf를 반환하는 메서드들은 대신 POJO를 반환하도록 변경되었어요. API에서 더 이상 pb를 사용하지 않아요. 비동기 메서드의 반환은 void에서 Future로 변경되었어요. HBASE-18106 - Admin.listProcedures와 Admin.listLocks가 getProcedures와 getLocks로 이름이 바뀌었어요. MapReduce는 Splits를 계산하기 위해 admin.getClusterStatus()를 수행하며 Admin을 사용해요.
Thrift의 Admin API 사용:
compact(ByteBuffer)
createTable(ByteBuffer, List<ColumnDescriptor>)
deleteTable(ByteBuffer)
disableTable(ByteBuffer)
enableTable(ByteBuffer)
getTableNames()
majorCompact(ByteBuffer)
REST의 Admin API 사용: hbase-rest org.apache.hadoop.hbase.rest RootResource getTableList() TableName[] tableNames = servlet.getAdmin().listTableNames(); SchemaResource delete(UriInfo) Admin admin = servlet.getAdmin(); update(TableSchemaModel, boolean, UriInfo) Admin admin = servlet.getAdmin(); StorageClusterStatusResource get(UriInfo) ClusterStatus status = servlet.getAdmin().getClusterStatus(); StorageClusterVersionResource get(UriInfo) model.setVersion(servlet.getAdmin().getClusterStatus().getHBaseVersion()); TableResource exists() return servlet.getAdmin().tableExists(TableName.valueOf(table));
다음은 Admin 인터페이스의 변경 사항이에요:
Admin 인터페이스 (interface Admin)
ChangeResult추상 메서드 createTableAsync ( HTableDescriptor, byte[ ][ ] )이 이 인터페이스에서 제거되었어요.클라이언트 프로그램이 NoSuchMethodError 예외로 중단될 수 있어요.추상 메서드 disableTableAsync ( TableName )이 이 인터페이스에서 제거되었어요.클라이언트 프로그램이 NoSuchMethodError 예외로 중단될 수 있어요.추상 메서드 enableTableAsync ( TableName )이 이 인터페이스에서 제거되었어요.클라이언트 프로그램이 NoSuchMethodError 예외로 중단될 수 있어요.추상 메서드 getCompactionState ( TableName )이 이 인터페이스에서 제거되었어요.클라이언트 프로그램이 NoSuchMethodError 예외로 중단될 수 있어요.추상 메서드 getCompactionStateForRegion ( byte[ ] )이 이 인터페이스에서 제거되었어요.클라이언트 프로그램이 NoSuchMethodError 예외로 중단될 수 있어요.추상 메서드 isSnapshotFinished ( HBaseProtos.SnapshotDescription )이 이 인터페이스에서 제거되었어요.클라이언트 프로그램이 NoSuchMethodError 예외로 중단될 수 있어요.추상 메서드 snapshot ( String, TableName, HBaseProtos.SnapshotDescription.Type )이 이 인터페이스에서 제거되었어요.클라이언트 프로그램이 NoSuchMethodError 예외로 중단될 수 있어요.추상 메서드 snapshot ( HBaseProtos.SnapshotDescription )이 이 인터페이스에서 제거되었어요.클라이언트 프로그램이 NoSuchMethodError 예외로 중단될 수 있어요.추상 메서드 takeSnapshotAsync ( HBaseProtos.SnapshotDescription )이 이 인터페이스에서 제거되었어요.클라이언트 프로그램이 NoSuchMethodError 예외로 중단될 수 있어요.
다음은 Admin.class의 변경 사항이에요: hbase-client-1.0.0.jar, Admin.class 패키지 org.apache.hadoop.hbase.client
Admin.createTableAsync ( HTableDescriptor p1, byte[ ][ ] p2 ) [abstract] : void 1
org/apache/hadoop/hbase/client/Admin.createTableAsync:(Lorg/apache/hadoop/hbase/HTableDescriptor;[[B)V
ChangeResult반환 값 타입이 void에서 java.util.concurrent.Future<java.lang.Void>로 변경되었어요.이 메서드는 반환 타입이 메서드 시그니처의 일부이기 때문에 제거되었어요.클라이언트 프로그램이 NoSuchMethodError 예외로 중단될 수 있어요.
Admin.disableTableAsync ( TableName p1 ) [abstract] : void 1
org/apache/hadoop/hbase/client/Admin.disableTableAsync:(Lorg/apache/hadoop/hbase/TableName;)V
ChangeResult반환 값 타입이 void에서 java.util.concurrent.Future<java.lang.Void>로 변경되었어요.이 메서드는 반환 타입이 메서드 시그니처의 일부이기 때문에 제거되었어요.클라이언트 프로그램이 NoSuchMethodError 예외로 중단될 수 있어요.
Admin.enableTableAsync ( TableName p1 ) [abstract] : void
org/apache/hadoop/hbase/client/Admin.enableTableAsync:(Lorg/apache/hadoop/hbase/TableName;)V
ChangeResult반환 값 타입이 void에서 java.util.concurrent.Future<java.lang.Void>로 변경되었어요.이 메서드는 반환 타입이 메서드 시그니처의 일부이기 때문에 제거되었어요.클라이언트 프로그램이 NoSuchMethodError 예외로 중단될 수 있어요.
Admin.getCompactionState ( TableName p1 ) [abstract] : AdminProtos.GetRegionInfoResponse.CompactionState 1
org/apache/hadoop/hbase/client/Admin.getCompactionState:(Lorg/apache/hadoop/hbase/TableName;)Lorg/apache/hadoop/hbase/protobuf/generated/AdminProtos$GetRegionInfoResponse$CompactionState;
ChangeResult반환 값 타입이 org.apache.hadoop.hbase.protobuf.generated.AdminProtos.GetRegionInfoResponse.CompactionState에서 CompactionState로 변경되었어요.이 메서드는 반환 타입이 메서드 시그니처의 일부이기 때문에 제거되었어요.클라이언트 프로그램이 NoSuchMethodError 예외로 중단될 수 있어요.
Admin.getCompactionStateForRegion ( byte[ ] p1 ) [abstract] : AdminProtos.GetRegionInfoResponse.CompactionState 1
org/apache/hadoop/hbase/client/Admin.getCompactionStateForRegion:([B)Lorg/apache/hadoop/hbase/protobuf/generated/AdminProtos$GetRegionInfoResponse$CompactionState;
ChangeResult반환 값 타입이 org.apache.hadoop.hbase.protobuf.generated.AdminProtos.GetRegionInfoResponse.CompactionState에서 CompactionState로 변경되었어요.이 메서드는 반환 타입이 메서드 시그니처의 일부이기 때문에 제거되었어요.클라이언트 프로그램이 NoSuchMethodError 예외로 중단될 수 있어요.
HTableDescriptor와 HColumnDescriptor 변경 (HTableDescriptor and HColumnDescriptor changes)
HTableDescriptor와 HColumnDescriptor는 인터페이스가 되었고 Builders를 통해 만들 수 있어요. HCD는 CFD가 되었어요. 더 이상 writable 인터페이스를 구현하지 않아요. 패키지 org.apache.hadoop.hbase
HColumnDescriptor 클래스 (class HColumnDescriptor)
ChangeResult슈퍼 인터페이스 org.apache.hadoop.io.WritableComparable
HColumnDescriptor in 1.0.0
@InterfaceAudience.Public
@InterfaceStability.Evolving
public class HColumnDescriptor implements WritableComparable<HColumnDescriptor> {
HColumnDescriptor in 2.0
@InterfaceAudience.Public
@Deprecated // remove it in 3.0
public class HColumnDescriptor implements ColumnFamilyDescriptor, Comparable<HColumnDescriptor> {
META_TABLEDESC의 경우, maker 메서드는 1.0.0에서 이미 HTD에서 deprecated되었어요. OWNER_KEY는 여전히 HTD에 있어요.
HTableDescriptor 클래스 (class HTableDescriptor)
ChangeResult슈퍼 인터페이스 org.apache.hadoop.io.WritableComparable
hbase-client-1.0.0.jar, HTableDescriptor.class 패키지 org.apache.hadoop.hbase
HTableDescriptor.getColumnFamilies ( ) : HColumnDescriptor[ ]
org/apache/hadoop/hbase/HTableDescriptor.getColumnFamilies:()[Lorg/apache/hadoop/hbase/HColumnDescriptor;
HColumnDescriptor 클래스
ChangeResult반환 값 타입이 HColumnDescriptor[]에서 client.ColumnFamilyDescriptor[]로 변경되었어요.이 메서드는 반환 타입이 메서드 시그니처의 일부이기 때문에 제거되었어요.클라이언트 프로그램이 NoSuchMethodError 예외로 중단될 수 있어요.
HTableDescriptor.getCoprocessors ( ) : List
org/apache/hadoop/hbase/HTableDescriptor.getCoprocessors:()Ljava/util/List;
ChangeResult반환 값 타입이 java.util.List<java.lang.String>에서 java.util.Collection으로 변경되었어요.이 메서드는 반환 타입이 메서드 시그니처의 일부이기 때문에 제거되었어요.클라이언트 프로그램이 NoSuchMethodError 예외로 중단될 수 있어요.
- HBASE-12990 MetaScanner는 제거되고 MetaTableAccessor로 대체되었어요.
HTableWrapper 변경 (HTableWrapper changes):
hbase-server-1.0.0.jar, HTableWrapper.class 패키지 org.apache.hadoop.hbase.client
HTableWrapper.createWrapper ( List
org/apache/hadoop/hbase/client/HTableWrapper.createWrapper:(Ljava/util/List;Lorg/apache/hadoop/hbase/TableName;Lorg/apache/hadoop/hbase/coprocessor/CoprocessorHost$Environment;Ljava/util/concurrent/ExecutorService;)Lorg/apache/hadoop/hbase/client/HTableInterface;
ChangeResult반환 값 타입이 HTableInterface에서 Table로 변경되었어요.이 메서드는 반환 타입이 메서드 시그니처의 일부이기 때문에 제거되었어요.클라이언트 프로그램이 NoSuchMethodError 예외로 중단될 수 있어요.
- HBASE-12586: 모든 공개 HTable 생성자를 삭제하고 ConnectionManager#{delete,get}Connection을 삭제해요.
- HBASE-9117: HTablePool과 모든 HConnection 풀링 관련 API를 제거해요.
- HBASE-13214: HTable 클래스의 deprecated되고 사용되지 않는 메서드를 제거해요. 다음은 Table 인터페이스의 변경 사항이에요:
Table 인터페이스
ChangeResult추상 메서드 batch ( List> )이 이 인터페이스에서 제거되었어요.클라이언트 프로그램이 NoSuchMethodError 예외로 중단될 수 있어요.추상 메서드 batchCallback ( List>, Batch.Callback
Table의 deprecated 버퍼 메서드 (1.0.1에서 deprecated, 2.0.0에서 제거)
- HBASE-13298- Table.{set|get}WriteBufferSize()가 deprecated인지 아닌지 명확히 해요.
- LockTimeoutException과 OperationConflictException 클래스가 제거되었어요.
OperationConflictException 클래스 (class OperationConflictException)
ChangeResult이 클래스가 제거되었어요.클라이언트 프로그램이 NoClassDefFoundError 예외로 중단될 수 있어요.
LockTimeoutException 클래스 (class LockTimeoutException)
ChangeResult이 클래스가 제거되었어요.클라이언트 프로그램이 NoClassDefFoundError 예외로 중단될 수 있어요.
Filter API 변경 (Filter API changes):
다음 메서드들이 제거되었어요: 패키지 org.apache.hadoop.hbase.filter
Filter 클래스 (class Filter)
ChangeResult추상 메서드 getNextKeyHint ( KeyValue )이 이 클래스에서 제거되었어요.클라이언트 프로그램이 NoSuchMethodError 예외로 중단될 수 있어요.추상 메서드 transform ( KeyValue )이 이 클래스에서 제거되었어요.클라이언트 프로그램이 NoSuchMethodError 예외로 중단될 수 있어요.
- HBASE-12296 Filter는 ByteBufferedCell과 함께 작동해야 해요.
- HConnection은 HBase 2.0에서 제거되었어요.
- RegionLoad와 ServerLoad는 내부적으로 shaded PB로 이동했어요.
RegionLoad 클래스 (class RegionLoad)
ChangeResult필드 regionLoadPB의 타입이 protobuf.generated.ClusterStatusProtos.RegionLoad에서 shaded.protobuf.generated.ClusterStatusProtos.RegionLoad로 변경되었어요.클라이언트 프로그램이 NoSuchFieldError 예외로 중단될 수 있어요.
- HBASE-15783: AccessControlConstants#OP_ATTRIBUTE_ACL_STRATEGY_CELL_FIRST가 더 이상 사용되지 않아요. 패키지 org.apache.hadoop.hbase.security.access
AccessControlConstants 인터페이스 (interface AccessControlConstants)
ChangeResult필드 OP_ATTRIBUTE_ACL_STRATEGY(타입 java.lang.String)이 이 인터페이스에서 제거되었어요.클라이언트 프로그램이 NoSuchFieldError 예외로 중단될 수 있어요.필드 OP_ATTRIBUTE_ACL_STRATEGY_CELL_FIRST(타입 byte[])이 이 인터페이스에서 제거되었어요.클라이언트 프로그램이 NoSuchFieldError 예외로 중단될 수 있어요.필드 OP_ATTRIBUTE_ACL_STRATEGY_DEFAULT(타입 byte[])이 이 인터페이스에서 제거되었어요.클라이언트 프로그램이 NoSuchFieldError 예외로 중단될 수 있어요.
ServerLoad가 int 대신 long을 반환 (ServerLoad returns long instead of int)
hbase-client-1.0.0.jar, ServerLoad.class 패키지 org.apache.hadoop.hbase
ServerLoad.getNumberOfRequests ( ) : int 1
org/apache/hadoop/hbase/ServerLoad.getNumberOfRequests:()I
ChangeResult반환 값 타입이 int에서 long으로 변경되었어요.이 메서드는 반환 타입이 메서드 시그니처의 일부이기 때문에 제거되었어요.클라이언트 프로그램이 NoSuchMethodError 예외로 중단될 수 있어요.
ServerLoad.getReadRequestsCount ( ) : int 1
org/apache/hadoop/hbase/ServerLoad.getReadRequestsCount:()I
ChangeResult반환 값 타입이 int에서 long으로 변경되었어요.이 메서드는 반환 타입이 메서드 시그니처의 일부이기 때문에 제거되었어요.클라이언트 프로그램이 NoSuchMethodError 예외로 중단될 수 있어요.
ServerLoad.getTotalNumberOfRequests ( ) : int 1
org/apache/hadoop/hbase/ServerLoad.getTotalNumberOfRequests:()I
ChangeResult반환 값 타입이 int에서 long으로 변경되었어요.이 메서드는 반환 타입이 메서드 시그니처의 일부이기 때문에 제거되었어요.클라이언트 프로그램이 NoSuchMethodError 예외로 중단될 수 있어요.
ServerLoad.getWriteRequestsCount ( ) : int 1
org/apache/hadoop/hbase/ServerLoad.getWriteRequestsCount:()I
ChangeResult반환 값 타입이 int에서 long으로 변경되었어요.이 메서드는 반환 타입이 메서드 시그니처의 일부이기 때문에 제거되었어요.클라이언트 프로그램이 NoSuchMethodError 예외로 중단될 수 있어요.
- HBASE-13636 HBASE-4072(zoo.cfg 읽기)에 대한 deprecated 처리를 제거해요.
- HConstants가 제거되었어요. HBASE-16040 설정 "hbase.replication" 제거
HConstants 클래스 (class HConstants)
ChangeResult필드 DEFAULT_HBASE_CONFIG_READ_ZOOKEEPER_CONFIG(타입 boolean)이 이 클래스에서 제거되었어요.클라이언트 프로그램이 NoSuchFieldError 예외로 중단될 수 있어요.필드 HBASE_CONFIG_READ_ZOOKEEPER_CONFIG(타입 java.lang.String)이 이 클래스에서 제거되었어요.클라이언트 프로그램이 NoSuchFieldError 예외로 중단될 수 있어요.필드 REPLICATION_ENABLE_DEFAULT(타입 boolean)이 이 클래스에서 제거되었어요.클라이언트 프로그램이 NoSuchFieldError 예외로 중단될 수 있어요.필드 REPLICATION_ENABLE_KEY(타입 java.lang.String)이 이 클래스에서 제거되었어요.클라이언트 프로그램이 NoSuchFieldError 예외로 중단될 수 있어요.필드 ZOOKEEPER_CONFIG_NAME(타입 java.lang.String)이 이 클래스에서 제거되었어요.클라이언트 프로그램이 NoSuchFieldError 예외로 중단될 수 있어요.필드 ZOOKEEPER_USEMULTI(타입 java.lang.String)이 이 클래스에서 제거되었어요.클라이언트 프로그램이 NoSuchFieldError 예외로 중단될 수 있어요.
- HBASE-18732: [compat 1-2] HBASE-14047이 deprecated 주기 없이 Cell 메서드를 제거했어요.
Cell 인터페이스 5 (interface Cell)
ChangeResult추상 메서드 getFamily ( )이 이 인터페이스에서 제거되었어요.클라이언트 프로그램이 NoSuchMethodError 예외로 중단될 수 있어요.추상 메서드 getMvccVersion ( )이 이 인터페이스에서 제거되었어요.클라이언트 프로그램이 NoSuchMethodError 예외로 중단될 수 있어요.추상 메서드 getQualifier ( )이 이 인터페이스에서 제거되었어요.클라이언트 프로그램이 NoSuchMethodError 예외로 중단될 수 있어요.추상 메서드 getRow ( )이 이 인터페이스에서 제거되었어요.클라이언트 프로그램이 NoSuchMethodError 예외로 중단될 수 있어요.추상 메서드 getValue ( )이 이 인터페이스에서 제거되었어요.클라이언트 프로그램이 NoSuchMethodError 예외로 중단될 수 있어요.
- HBASE-18795: 테스트 전용으로 KeyValue.getBuffer()를 노출해요. 이전에 deprecated되었던 KV#getBuffer를 테스트에서만 허용해요.
Region 스캐너 변경 (Region scanner changes):
RegionScanner 인터페이스 (interface RegionScanner)
ChangeResult추상 메서드 boolean nextRaw ( List
StoreFile 변경 (StoreFile changes):
StoreFile 클래스 (class StoreFile)
ChangeResult이 클래스가 인터페이스가 되었어요.이 클래스의 사용 방식에 따라 클라이언트 프로그램이 IncompatibleClassChangeError 또는 InstantiationError 예외로 중단될 수 있어요.
Mapreduce 변경 (Mapreduce changes):
HFile*Format이 HBase 2.0에서 제거되었어요.
ClusterStatus 변경 (ClusterStatus changes):
HBASE-15843: RegionState.getRegionInTransition() Map을 Set으로 대체 hbase-client-1.0.0.jar, ClusterStatus.class 패키지 org.apache.hadoop.hbase
ClusterStatus.getRegionsInTransition ( ) : Map<String,RegionState> 1
org/apache/hadoop/hbase/ClusterStatus.getRegionsInTransition:()Ljava/util/Map;
ChangeResult반환 값 타입이 java.util.Map<java.lang.String,master.RegionState>에서 java.util.List<master.RegionState>로 변경되었어요.이 메서드는 반환 타입이 메서드 시그니처의 일부이기 때문에 제거되었어요.클라이언트 프로그램이 NoSuchMethodError 예외로 중단될 수 있어요.
ClusterStatus의 다른 변경 사항은 API에서 PB를 제거한 후 더 이상 필요 없어진 convert 메서드의 제거를 포함해요.
API에서 PB 제거 (Purge of PBs from API)
HBase 2.0에서 API의 PB가 deprecated되었어요.
HBaseSnapshotException.getSnapshotDescription ( ) : HBaseProtos.SnapshotDescription 1
org/apache/hadoop/hbase/snapshot/HBaseSnapshotException.getSnapshotDescription:()Lorg/apache/hadoop/hbase/protobuf/generated/HBaseProtos$SnapshotDescription;
ChangeResult반환 값 타입이 org.apache.hadoop.hbase.protobuf.generated.HBaseProtos.SnapshotDescription에서 org.apache.hadoop.hbase.client.SnapshotDescription로 변경되었어요.이 메서드는 반환 타입이 메서드 시그니처의 일부이기 때문에 제거되었어요.클라이언트 프로그램이 NoSuchMethodError 예외로 중단될 수 있어요.
- HBASE-15609: 2.0에서 Result, DoubleColumnInterpreter 및 그런 공개 지향 클래스에서 PB 참조를 제거해요. hbase-client-1.0.0.jar, Result.class 패키지 org.apache.hadoop.hbase.client
Result.getStats ( ) : ClientProtos.RegionLoadStats 1
org/apache/hadoop/hbase/client/Result.getStats:()Lorg/apache/hadoop/hbase/protobuf/generated/ClientProtos$RegionLoadStats;
ChangeResult반환 값 타입이 org.apache.hadoop.hbase.protobuf.generated.ClientProtos.RegionLoadStats에서 RegionLoadStats로 변경되었어요.이 메서드는 반환 타입이 메서드 시그니처의 일부이기 때문에 제거되었어요.클라이언트 프로그램이 NoSuchMethodError 예외로 중단될 수 있어요.
REST 변경 (REST changes):
hbase-rest-1.0.0.jar, Client.class 패키지 org.apache.hadoop.hbase.rest.client
Client.getHttpClient ( ) : HttpClient 1
org/apache/hadoop/hbase/rest/client/Client.getHttpClient:()Lorg/apache/commons/httpclient/HttpClient;
ChangeResult반환 값 타입이 org.apache.commons.httpclient.HttpClient에서 org.apache.http.client.HttpClient로 변경되었어요.이 메서드는 반환 타입이 메서드 시그니처의 일부이기 때문에 제거되었어요.클라이언트 프로그램이 NoSuchMethodError 예외로 중단될 수 있어요.
hbase-rest-1.0.0.jar, Response.class 패키지 org.apache.hadoop.hbase.rest.client
Response.getHeaders ( ) : Header[ ] 1
org/apache/hadoop/hbase/rest/client/Response.getHeaders:()[Lorg/apache/commons/httpclient/Header;
ChangeResult반환 값 타입이 org.apache.commons.httpclient.Header[]에서 org.apache.http.Header[]로 변경되었어요.이 메서드는 반환 타입이 메서드 시그니처의 일부이기 때문에 제거되었어요.클라이언트 프로그램이 NoSuchMethodError 예외로 중단될 수 있어요.
PrettyPrinter 변경 (PrettyPrinter changes):
hbase-server-1.0.0.jar, HFilePrettyPrinter.class 패키지 org.apache.hadoop.hbase.io.hfile
HFilePrettyPrinter.processFile ( Path file ) : void 1
org/apache/hadoop/hbase/io/hfile/HFilePrettyPrinter.processFile:(Lorg/apache/hadoop/fs/Path;)V
ChangeResult반환 값 타입이 void에서 int로 변경되었어요.이 메서드는 반환 타입이 메서드 시그니처의 일부이기 때문에 제거되었어요.클라이언트 프로그램이 NoSuchMethodError 예외로 중단될 수 있어요.
AccessControlClient 변경 (AccessControlClient changes):
HBASE-13171 AccessControlClient 메서드를 connection 객체를 받도록 변경해서 설정 시간을 줄였어요. 다음 메서드에서 파라미터가 변경되었어요:
hbase-client-1.2.7-SNAPSHOT.jar, AccessControlClient.class 패키지 org.apache.hadoop.hbase.security.access
AccessControlClient.getUserPermissions ( Configuration conf, String tableRegex ) [static] : List<UserPermission> **DEPRECATED**
org/apache/hadoop/hbase/security/access/AccessControlClient.getUserPermissions:(Lorg/apache/hadoop/conf/Configuration;Ljava/lang/String;)Ljava/util/List;
AccessControlClient.grant ( Configuration conf, String namespace, String userName, Permission.Action... actions )[static] : void **DEPRECATED**
org/apache/hadoop/hbase/security/access/AccessControlClient.grant:(Lorg/apache/hadoop/conf/Configuration;Ljava/lang/String;Ljava/lang/String;[Lorg/apache/hadoop/hbase/security/access/Permission$Action;)V
AccessControlClient.grant ( Configuration conf, String userName, Permission.Action... actions ) [static] : void **DEPRECATED**
org/apache/hadoop/hbase/security/access/AccessControlClient.grant:(Lorg/apache/hadoop/conf/Configuration;Ljava/lang/String;[Lorg/apache/hadoop/hbase/security/access/Permission$Action;)V
AccessControlClient.grant ( Configuration conf, TableName tableName, String userName, byte[ ] family, byte[ ] qual, Permission.Action... actions ) [static] : void **DEPRECATED**
org/apache/hadoop/hbase/security/access/AccessControlClient.grant:(Lorg/apache/hadoop/conf/Configuration;Lorg/apache/hadoop/hbase/TableName;Ljava/lang/String;[B[B[Lorg/apache/hadoop/hbase/security/access/Permission$Action;)V
AccessControlClient.isAccessControllerRunning ( Configuration conf ) [static] : boolean **DEPRECATED**
org/apache/hadoop/hbase/security/access/AccessControlClient.isAccessControllerRunning:(Lorg/apache/hadoop/conf/Configuration;)Z
AccessControlClient.revoke ( Configuration conf, String namespace, String userName, Permission.Action... actions )[static] : void **DEPRECATED**
org/apache/hadoop/hbase/security/access/AccessControlClient.revoke:(Lorg/apache/hadoop/conf/Configuration;Ljava/lang/String;Ljava/lang/String;[Lorg/apache/hadoop/hbase/security/access/Permission$Action;)V
AccessControlClient.revoke ( Configuration conf, String userName, Permission.Action... actions ) [static] : void **DEPRECATED**
org/apache/hadoop/hbase/security/access/AccessControlClient.revoke:(Lorg/apache/hadoop/conf/Configuration;Ljava/lang/String;[Lorg/apache/hadoop/hbase/security/access/Permission$Action;)V
AccessControlClient.revoke ( Configuration conf, TableName tableName, String username, byte[ ] family, byte[ ] qualifier, Permission.Action... actions ) [static] : void **DEPRECATED**
org/apache/hadoop/hbase/security/access/AccessControlClient.revoke:(Lorg/apache/hadoop/conf/Configuration;Lorg/apache/hadoop/hbase/TableName;Ljava/lang/String;[B[B[Lorg/apache/hadoop/hbase/security/access/Permission$Action;)V
HBASE-18731: [compat 1-2] Protobuf 내부를 건드리는 QuotaSettings의 protected 메서드를 IA.Private로 표시해요.