#hadoopAC12jp Hadoop アドベントカレンダー 2012 5日目 HBase の便利ツール(1) HFile
Hadoop アドベントカレンダー 2012 空いているところ担当の shiumachi です。
今日は HFile という、HBase の中でもかなりマイナーなツールを紹介します。
概要
HBase のデータは HDFS 上に保存されています。
この HDFS 上のデータの基本単位は org.apache.hadoop.hbase.io.hfile.HFile クラスによって管理されます。
HFile クラス、実は実行可能です。
このクラスを使うことで、 HBase のストレージファイルに対する様々な調査を行うことができます。
聞いたことないという方が多いでしょうが、世の中の HBase ユーザの 99% は使わないツールですのでご安心ください。
ていうか多分私のようなサポート専用と言っていいです。
使い方
オプションなしで実行すると、以下のヘルプが表示されます。
usage: HFile [-a] [-b] [-e] [-f
] [-k] [-m] [-p] [-r ] [-s] [-v]
-a,--checkfamily Enable family check
-b,--printblocks Print block index meta data
-e,--printkey Print keys
-f,--fileFile to scan. Pass full-path; e.g.
hdfs://a:9000/hbase/.META./12/34
-k,--checkrow Enable row order check; looks for out-of-order keys
-m,--printmeta Print meta data of file
-p,--printkv Print key/value pairs
-r,--regionRegion to scan. Pass region name; e.g. '.META.,,1'
-s,--stats Print statistics
-v,--verbose Verbose output; emits file and meta data delimiters
以下に一覧を示します。
-f,--file |
HFile を指定する。 hdfs:// |
-p,--printkv | key/value のペアを出力する |
-e,--printkey | key を出力する。 -k でないことに注意 |
-s,--stats | 統計データを出力する |
-b,--printblocks | ブロックインデックスメタデータを出力する |
-k,--checkrow | 行の順番をチェックし、おかしな順番になっていないか確認 |
-m,--printmeta | メタデータを出力する |
-v,--verbose | 冗長出力。だけどあまり有用な情報を見たことがない |
-a,--checkfamily | よくわからん |
-r,--region |
よくわからん |
-p の出力例
$ hbase org.apache.hadoop.hbase.io.hfile.HFile -p -f /hbase/t1/03932f5c9d154176eef820f5e66078ea/cf1/8568e60d7ff9430883bb7d569d48b990
K: r1/cf1:c1/1354710249455/Put/vlen=2 V: 10
K: r1/cf1:c1/1354710244887/Put/vlen=1 V: 9
K: r1/cf1:c1/1354710240363/Put/vlen=1 V: 8
K: r1/cf1:c2/1354710307220/Put/vlen=2 V: 10
K: r1/cf1:c2/1354710302654/Put/vlen=1 V: 9
K: r1/cf1:c2/1354710297945/Put/vlen=1 V: 8
K: r10/cf1:c2/1354710424806/Put/vlen=2 V: 10
K: r10/cf1:c2/1354710415263/Put/vlen=1 V: 9
K: r10/cf1:c2/1354710410732/Put/vlen=1 V: 8
K: r10/cf1:c3/1354710508745/Put/vlen=2 V: 10
K: r10/cf1:c3/1354710504211/Put/vlen=1 V: 9
K: r10/cf1:c3/1354710494517/Put/vlen=1 V: 8
K: r4/cf1:c2/1354710341802/Put/vlen=1 V: 5
K: r8/cf1:c3/1354710366975/Put/vlen=1 V: 6
K: r9/cf1:c3/1354710374004/Put/vlen=1 V: 3
Scanned kv count -> 15
-e の出力例
$ hbase org.apache.hadoop.hbase.io.hfile.HFile -e -f /hbase/t1/03932f5c9d154176eef820f5e66078ea/cf1/8568e60d7ff9430883bb7d569d48b990
K: r1/cf1:c1/1354710249455/Put/vlen=2
K: r1/cf1:c1/1354710244887/Put/vlen=1
K: r1/cf1:c1/1354710240363/Put/vlen=1
K: r1/cf1:c2/1354710307220/Put/vlen=2
K: r1/cf1:c2/1354710302654/Put/vlen=1
K: r1/cf1:c2/1354710297945/Put/vlen=1
K: r10/cf1:c2/1354710424806/Put/vlen=2
K: r10/cf1:c2/1354710415263/Put/vlen=1
K: r10/cf1:c2/1354710410732/Put/vlen=1
K: r10/cf1:c3/1354710508745/Put/vlen=2
K: r10/cf1:c3/1354710504211/Put/vlen=1
K: r10/cf1:c3/1354710494517/Put/vlen=1
K: r4/cf1:c2/1354710341802/Put/vlen=1
K: r8/cf1:c3/1354710366975/Put/vlen=1
K: r9/cf1:c3/1354710374004/Put/vlen=1
Scanned kv count -> 15
-s の出力例
$ hbase org.apache.hadoop.hbase.io.hfile.HFile -s -f /hbase/t1/03932f5c9d154176eef820f5e66078ea/cf1/8568e60d7ff9430883bb7d569d48b990
Stats:
Key length: count: 15 min: 19 max: 20 mean: 19.4
Val length: count: 15 min: 1 max: 2 mean: 1.2666666666666666
Row size (bytes): count: 5 min: 28 max: 176 mean: 86.0
Row size (columns): count: 5 min: 1 max: 6 mean: 3.0
Key of biggest row: r9
-b の出力例
$ hbase org.apache.hadoop.hbase.io.hfile.HFile -b -f /hbase/t1/03932f5c9d154176eef820f5e66078ea/cf1/8568e60d7ff9430883bb7d569d48b990
Block Index:
size=1
key=r1/cf1:c1/1354710249455/Put
offset=0, dataSize=469
-m の出力例
$ hbase org.apache.hadoop.hbase.io.hfile.HFile -m -f /hbase/t1/03932f5c9d154176eef820f5e66078ea/cf1/8568e60d7ff9430883bb7d569d48b990
Block index size as per heapsize: 408
reader=/hbase/t1/03932f5c9d154176eef820f5e66078ea/cf1/8568e60d7ff9430883bb7d569d48b990,
compression=none,
cacheConf=CacheConfig:enabled [cacheDataOnRead=true] [cacheDataOnWrite=false] [cacheIndexesOnWrite=false] [cacheBloomsOnWrite=false] [cacheEvictOnClose=false] [cacheCompressed=false],
firstKey=r1/cf1:c1/1354710249455/Put,
lastKey=r9/cf1:c3/1354710374004/Put,
avgKeyLen=19,
avgValueLen=1,
entries=15,
length=1021
Trailer:
fileinfoOffset=549,
loadOnOpenDataOffset=469,
dataIndexCount=1,
metaIndexCount=0,
totalUncomressedBytes=965,
entryCount=15,
compressionCodec=NONE,
uncompressedDataIndexSize=32,
numDataIndexLevels=1,
firstDataBlockOffset=0,
lastDataBlockOffset=0,
comparatorClassName=org.apache.hadoop.hbase.KeyValue$KeyComparator,
version=2
Fileinfo:
KEY_VALUE_VERSION = \x00\x00\x00\x01
MAJOR_COMPACTION_KEY = \x00
MAX_MEMSTORE_TS_KEY = \x00\x00\x00\x00\x00\x00\x00\x00
MAX_SEQ_ID_KEY = 57
TIMERANGE = 1354710192056....1354710508745
hfile.AVG_KEY_LEN = 19
hfile.AVG_VALUE_LEN = 1
hfile.LASTKEY = \x00\x02r9\x03cf1c3\x00\x00\x01;k\x07\xD6t\x04
Mid-key: \x00\x02r1\x03cf1c1\x00\x00\x01;k\x05\xEF\xEF\x04
Bloom filter:
Not present
参考情報
馬本 p.353、「8.2.4 HFile のフォーマット」