S-JIS[2010-07-04/2010-08-15] 変更履歴

HBase変更点

自分が把握しているHBaseのバージョンアップによる変更点。


HBaseのバージョンについて

HBaseHadoopのサブプロジェクトだったが、2010-05-10(HBase0.20.4とHBase0.20.5の間)にApacheのトップレベルプロジェクトに昇格した。
それに伴って、ホームページのURLがhttp://hadoop.apache.org/hbase/からhttp://hbase.apache.org/に変更になった。
プロジェクト名は「Hadoop HBase」から「Apache HBase」になったのではないかと思うが、元々「HBase」としか名乗っていなかったようなので、特に変わっていない感じがする。
(Javaソース(クラス)のパッケージ名は変わっていない…変わったらかなり大変だ(笑))

HBaseでは、Hadoopに合わせてバージョン番号が付いていた。HBase0.18はHadoop0.18対応、HBase0.20はHadoop0.20。
しかしHadoopのバージョンアップ(リリース)が遅くなってきたので、番号を連動するのはやめたらしい。
HBase0.21として予定されていたものは、HBase0.90となる。(0.20と0.90の間に、0.89が出る)
その後、HBase1.0が出る予定だそうだ。


0.20.5

HBase0.20.5(2010-06-24)の変更点。

変更対象 変更内容
docs ドキュメント内のURLがhttp://hbase.apache.org/に変更になった。
ImmutableBytesWritableクラス get()・getSize()・getLength()のJavadocコメントが変更されている。(仕様変更?)
hashCode()・compareTo()・toString()の実装が変更になった。
mapreduce/HFileOutputFormatクラス 現在時刻が更新日時にセットされるようになった。
util/Bytesクラス toStringBinary()の実装が変更になった。
(たいていの記号がそのまま出力されるようになった)

0.20.6

HBase0.20.6(2010-07-31)は、プログラマーのコーディング方法に関わるような変更は無さそう。[2010-08-07]


0.89.20100621

HBase0.20.5とHBase0.89.20100621の違い。

変更対象 変更内容
bin/start-hbase.sh
bin/stop-hbase.sh
完全分散環境でない場合(つまり単独環境・擬似分散環境)の起動方法が変わった。
(ZooKeeperとRegionServerが起動されなくなった)
bin/hbase RESTサーバーが消えて、Avroサーバーが加わった。
また、Mavenに対応した模様。
HBase Shellも機能が増えている。[2010-07-07]
bin/hirb.rb
bin/HBase.rb
bin/Formatter.rb
HBase.rb・Formatter.rbが無くなった。
hirb.rbの中身もだいぶ変わっている。(減っている)
conf/hbase-default.xml プロパティーの増減の他、設定値の範囲が変更になっているプロパティーもあるようだ。
conf/hbase-env.sh 環境変数HBASE_OPTSが(追加でなく)上書きされるようになっている。
contrib contribが無くなっている。
たつやさんによると、今後はcontribという形では提供されず、個別にダウンロードする必要があるそうです。[2010-07-07]
HBase関連プロジェクトのページ
hbase-webapps 「webapps」が「hbase-webapps」になった模様。
そしてrestが無くなっている。
src/examples SampleUploaderがHadoopのmapredからmapreduce(新API)を使う例に変更になった。
IndexBuilderが追加になった。索引テーブルをHadoopを使って作成する例らしい。
src/main/java/〜 色々とクラス・メソッドが減ったり増えたりしている。
パッケージ単位では、restが無くなってavroが増えている。

HBase0.20で作ったテーブル・データはそのまま0.89で読めるっぽい。[2010-07-08]
(0.20のconfの定義(データファイルの場所)をそのまま0.89で使用できる)
ただし、そうしてデータファイルを使用したら、0.20で再度使うことは出来ないっぽい。(Windows上の擬似環境で試したら、クライアントからの接続が固まった(例外もタイムアウトも発生しない))


クラス・メソッドの主な変更点

自分が興味あるところ(クライアントからのメソッドの呼び出し方)に関する変更点を調べてみた。

全般的に重要だと思う変更点

クラス名(およびパッケージ名の一部) 変更箇所(メソッド名) 変更内容






hbase HBaseConfiguration コンストラクター
create()
create(conf)
コンストラクターは非推奨になった。
今後は自分でnewせず、HBaseConfiguration#create()を使用する。
addHbaseResources() public staticメソッドになった。
(デフォルトの設定ファイルを追加するメソッド)
client HBaseAdmin createTable() …オーバーロード メソッド追加(オーバーロードが増えた)
createTableAsync(HTableDescriptor desc, byte [][] splitKeys) 引数splitKeysが増えた。
今までと同様の使い方をするには、たぶんnullを指定する。
client HTable クラス定義 HTableInterfaceをimplementsするようになった。
prewarmRegionCache()
serializeRegionInfo()
deserializeRegionInfo()
setRegionCachePrefetch()
getRegionCachePrefetch()
メソッド追加
getClosestRowBefore() メソッド廃止
delete(final List<Delete> deletes) 引数listの型がArrayListからListになった。
delete()
put()
checkAndPut()
synchronized宣言が無くなった。
checkAndDelete() メソッド追加
Cellを返すget()
RowResultを返すgetRow()
引数がScan以外のgetScanner()
deleteAll()やdeleteFamily()系
引数がGet以外のexists()
引数にBatchUpdateを使用するcommit()やcheckAndSave()
メソッド廃止(deprecatedになっていたメソッド)
client HTablePool コンストラクター HTableInterfaceFactoryを引数にとるオーバーロードが増えた。[2010-07-07]
getTable()
putTable()
扱う対象がHTableからHTableInterfaceへ変更された。[2010-07-07]
closeTablePool() メソッド追加[2010-07-07]
newHTable() メソッド廃止[2010-07-07]
0.89ではHTablePool内部にHTableInterfaceFactoryを保持しているので、インスタンスはそれを使って生成する。
io BatchOperation
BatchUpdate
Cell
RowResult
  クラス廃止
client Put コンストラクター オーバーロードが増えた。
setTimeStamp() メソッド廃止
readFields()・write() シリアライズ時にバージョン情報が付加されるようになった。
client Delete deleteColumns(byte [] column) メソッド廃止
readFields()・write() シリアライズ時にバージョン情報が付加されるようになった。
client Get readFields()・write() シリアライズ時にバージョン情報が付加されるようになった。
client Scan setBatch()
getBatch()
メソッド追加
setOldFilter() メソッド廃止(deprecatedになっていたメソッド)
getValue()・setValue()系・remove() メソッド廃止
readFields()・write() シリアライズ時にバージョン情報が付加されるようになった。
client Scanner   クラス廃止
hbase KeyValue コンストラクター テンポラリー用のコンストラクターは廃止された。
makeColumn()
createKeyValueFromKey() …オーバーロード
hashCode()
メソッド追加
getColumn()
matchingColumn(byte[] column)
メソッド廃止
client Result Cellを返すgetCellValue()
getValue(byte[] column)
RowResultを返すgetRowResult()
メソッド廃止
readFields()・write() シリアライズ時にバージョン情報が付加されるようになった。
io ImmutableBytesWritable copyBytes() メソッド追加




filter Filter filterRow(List<KeyValue> kvs)
hasFilterRow()
メソッド追加
filter FilterBase   クラス新設
フィルター系のクラスは、Filterをimplementsするのではなく、FilterBaseをextendsするよう修正になっている。
filter CompareFilter NO_OP オペレーションにNO_OPが追加された。
filter ColumnPaginationFilter
DependentColumnFilter
SingleColumnValueExcludeFilter
  クラス新設(フィルター)
filter ColumnValueFilter
InclusiveStopRowFilter
PageRowFilter
PrefixRowFilter
RegExpRowFilter
StopRowFilter
WhileMatchRowFilter
  クラス廃止(フィルター)
filter RowFilterInterface
RowFilterSet
  クラス廃止





client HTableFactory
HTableInterface
HTableInterfaceFactory
  クラス(インターフェース)新設
hbase HTableDescriptor DEFAULT_DEFERRED_LOG_FLUSH
DEFERRED_LOG_FLUSH
DEFERRED_LOG_FLUSH_KEY
定数追加
isDeferredLogFlush()
setDeferredLogFlush()
メソッド追加
restSerialize() メソッド廃止
hbase HColumnDescriptor DEFAULT_REPLICATION_SCOPE
REPLICATION_SCOPE
定数追加
MAPFILE_INDEX_INTERVAL 定数削除
コンストラクター 引数の一部が変更
getBloomFilterType()
setBloomFilterType()
getScope()
メソッド追加
getNameWithColon()
isBloomfilter()
setBloomfilter()
restSerialize()
setMapFileIndexInterval()
メソッド廃止
H
a
d
o
o
p
mapreduce BuildTableIndex
IndexConfiguration
IndexOutputFormat
IndexRecordWriter
IndexTableReducer
LuceneDocumentWrapper
  クラス廃止
mapreduce MultiTableOutputFormat
TableRecordReader
TableRecordReaderImpl
  クラス新設
mapreduce PutSortReducer
SimpleTotalOrderPartitioner
  クラス新設(HFileOutputFormat関連)
mapreduce CopyTable
ImportTsv
  クラス新設(ツール系)
mapreduce RowCounter enum Counters private→public
mapreduce TableInputFormat SCAN_COLUMN_FAMILY プロパティー名の定数追加
mapreduce TableInputFormatBase TableRecordReader インナークラスだったが、独立したクラスになった。
mapreduce TableMapReduceUtil initTableReducerJob() …オーバーロード
addDependencyJars() …オーバーロード
メソッド追加
mapreduce TableOutputFormat QUORUM_ADDRESS
REGION_SERVER_CLASS
REGION_SERVER_IMPL
プロパティー名の定数追加
mapreduce TableSplit equals() メソッド追加
mapred     未調査(でもmapreduceと同様っぽい)







util Bytes toBytes(char)
toChar()・toChars()
putChar()・putChars()
toBigDecimal()
putBigDecimal()
メソッド廃止
startsWith()
iterateOnSplits()
メソッド追加
util Pair コンストラクター finalクラスでなくなり、publicなデフォルトコンストラクターが追加された。
ハッシュコードの算出式が変わった。
setFirst()
setSecond()
メソッド追加
of() メソッド廃止
util FSUtils getTableFragmentation()
getTotalTableFragmentation()
isAppendSupported()
recoverFileLease()
メソッド追加
util BloomFilter
ByteBloomFilter
DynamicByteBloomFilter
  クラス新設
util EnvironmentEdge
EnvironmentEdgeManager
DefaultEnvironmentEdge
IncrementingEnvironmentEdge
  クラス新設
util JVMClusterUtil
MD5Hash
  クラス新設
util Migrate   クラス廃止





client HConnection getRegionServerWithoutRetries() メソッド名がgetRegionServerForWithoutRetries()から変更になった。(Forが取れた)
processBatchOfDeletes(List<Delete> list, 〜) 引数listの型がArrayListからListになった。
processBatchOfPuts()
setRegionCachePrefetch()
getRegionCachePrefetch()
prewarmRegionCache()
メソッド追加
client HConnectionManager クラス定義 HConstantsをimplementsするのをやめた。
(定数をソース内に書く為にimplementsしていた模様)
clearRegionCache()
getRegionServerWithoutRetries()
メソッド追加
processBatchOfDeletes(List<Delete> list, 〜) 引数listの型がArrayListからListになった。
processBatchOfPuts()
setRegionCachePrefetch()
getRegionCachePrefetch()
prewarmRegionCache()
メソッド追加
client MultiPut
MultiPutResponse
  クラス新設
HConnectionManagerの中で使われるクラスであり、
Putの様なユーザーが使うクラスではない。[2010-07-07]

大したことじゃない変更点


0.89.20100726

HBase0.89.20100621とHBase0.89.20100726(2010-08-10)の違い。[2010-08-15]

変更対象 変更内容
bin/hbase 変数binの内容を決める際のcdに「>/dev/null」が追加された。
restとhbckが追加になった。
(restは復活したと言うべきか?それともthriftやavroと同じになるように何かが修正された?HBase-2846)
bin/hbase-config.sh
bin/hbase-daemon.sh
bin/hbase-daemons.sh
bin/regionservers.sh
bin/start-hbase.sh
bin/stop-hbase.sh
bin/zookeepers.sh
変数binの内容を決める際のcdに「>/dev/null」が追加された。(HBase-2381)
bin/local-master-backup.sh
bin/local-regionservers.sh
新規追加。
1台のマシン上で別のマスターやリージョンサーバーを稼動させるものらしい。
bin/replication/add_peer.rb 新規追加。
Peerをクラスターへ追加するスクリプトらしい。
bin/replication/copy_tables_desc.rb 新規追加。
あるクラスター内の全テーブルを別のクラスターに作り直すスクリプト。
(コピーされるのはテーブル定義だけで、データはコピーされない)
conf/hbase-site.xml.psuedo-distributed.template 新規追加。
擬似分散環境用のhbase-site.xmlのテンプレート。
lib/ slf4jのバージョンが1.4.3→1.5.8(HBase-2850)
pom.xml ライブラリーのバージョンアップに伴う修正など。
クラス名
(およびパッケージ名の一部)
変更箇所(メソッド名) 変更内容






hbase HBaseConfiguration コンストラクター HBaseConfigurationを自分でnewするとログに警告が出るのだが、そのメッセージの綴りミスが修正されたw
hbase KeyValue isDeleteColumnOrFamily() メソッド追加。
matchingFamily()
matchingQualifier()
別の引数をとるオーバーロードが追加。
matchingRow() メソッド追加。




filter Filter.ReturnCode NEXT_COL ReturnCode列挙型にNEXT_COLが追加。
複数のバージョン(履歴)のデータを取得する場合、同一カラムでも複数のKeyValueが取得される。
それらをスキップして次のカラムへ行く為の指定だろう。
TimestampsFilterがNEXT_COLを使っている。
filter TimestampsFilter   クラス新設。
指定されたタイムスタンプのデータだけを返すフィルター。







util Bytes compareTo() 引数の変数名が分かりやすくなった(笑)
util FSUtils   HDFSのappendがサポートされていない状態で動かした場合?に警告が出るようになった。
hbase HConstants REPLICATION_ENABLE_KEY REPLICATION_ENABLE_KEY = "hbase.replication"が追加。


ipc HBaseServer run() run()内のcall()で例外が発生した場合のログ出力レベルがinfo→debug
hbase HServerAddress   アドレスが正しいかどうかのチェック処理が入った。
io TimeRange compare() メソッド追加。
client HConnectionManager   ZooKeeperがらみで内部実装が何か変わっている。
executor 色々   前回までディレクトリー内が空だったが、クラスが入っている。
replication 色々   ディレクトリー(パッケージ)が増えている。


client HBaseFsck   クラス新設。
hbaseシェルのhbckコマンドで呼ばれるクラス。
rest Main   何やらUsage(使い方)が変わった?

HBaseへ戻る / 技術メモへ戻る
メールの送信先:ひしだま