Weitere ähnliche Inhalte
Ähnlich wie H base chapter_5 (10)
H base chapter_5
- 1. HBase
The Definitive Guide
5.Client API : Administrative Features
- 3. Schema Definition : Tables
HBaseのデータは全てテーブルに格納
テーブルはHTableDescriptorクラスを用いて操作
テーブルにはカラムファミリを定義
この章で説明する大半のクラス(APIを提供する)には、パラメータなしのコンストラクタ
が存在する。
これは、HadoopのWritableインターフェースを実装する事に起因する。
リモート間の通信を行うRPCフレームワークはWritableインターフェースを利用してお
り、write, readFieldsメソッドを実装している。
カスタムのHBaseのExtensionを作成する場合は、以下のルールを守る
● 送信/受信双方のRPC通信チャネルを利用可能にする。
● Writableインターフェースのwrite(), readFields()を実装する。
● パラメータのないコンストラクタを持つ。
- 4. Schema Definition : Tables
HTableDescriptor
HtableDescriptorインスタンスかテーブル名から、テーブルを作
成
パラメータなしのコンストラクタは、デシリアライズ用なので直接利
用するべきではない
テーブル名はファイルパスで利用される為、ファイルパスに利用
できる文字でのみ指定可能
カラム志向のHBaseでは、RDBMSのように多くのテーブルに分け
ず、1つのテーブルにたくさんの詳細情報を詰める
RDBMSの正規化はHBaseには当てはまらない
- 5. Schema Definition : Table Properties
Name
テーブル名の取得・設定
※テーブル名は[a-zA-Z_0-9-.]が利用可能だが、[.-]を最初にはできない。
Column families
カラムファミリの追加・存在確認・取得・削除
カラムファミリはHColumnDescriptorを使って扱う
HColumnDescriptorに関しては後述(本ではP.212)
- 6. Schema Definition : Table Properties
Maximum file size
リージョンの最大ファイルサイズを取得・設定(バイト単位)
※「Maxmum file size」とあるが、実際には、カラムファミリ毎作成されるファイルサイ
ズではなく、ストアのサイズを指定するので「maxStoreSize」の方が相応しい。
設定したサイズを超えるとリージョンのスピリットが発生
デフォルトは256MBになっているが、システム毎に適切なサイズ
を検討する事が必要
Read-only
テーブルの読込専用を設定・状態確認
デフォルトはfalse
- 7. Schema Definition : Table Properties
Memstore flush size
データ書込時にディスクに描き込まず、メモリで処理するデータサ
イズの取得・設定
デフォルトは64MB
容量を大きくすれば、パフォーマンスは良くなるが、 障害時にフ
ラッシュされていないデータをWALから復旧する作業に時間がかか
る。
Deferred log flush
WALの遅延書き込みを利用するかの設定
デフォルトはfalse
- 8. Schema Definition : Table Properties
Miscellaneous option
その他設定の取得・設定・削除
ByteかStringでデータは設定するが、内部的には
ImmutableBytesWritableで保持
例えば、Coprocessorの読み込み設定などに利用
- 9. Schema Definition : Column Families
HColumnDescriptorを使って、カラムファミリに対しての設定を行う
※カラムファミリのパラメータを定義している為、HColumnDescriptorというよりは、
HColumnFamilyDescriptorの方が相応しい。
カラムファミリーへの設定は、それに含まれる全てのカラムに適用さ
れる。
カラムは任意の数作成でき、以下のように「:」区切りでカラムファミ
リとカラムクオリファイアを分割して表現する。
family:qualifier
- 10. Schema Definition : Column Families
カラムファミリは、ディレクトリパスに利用される為、表示可能な文字
列で指定しなければならない。
※クオリファイアは省略して、カラムファミリだけで扱う事も可能です。
他のカラムと同様に読み書きが可能であるが、他と区別する為にそれ以外のカラム
にはクオリファイア名を付ける必要がある。
HColumnDescriptorのインスタンスは、引数なし、カラムファミリ名、
カラムファミリの設定から作成する。
- 11. Schema Definition : Column Families
Name
カラムファミリ名の取得
※カラムファミリ名の変更はできない。
カラムファミリを変更したい場合は、カラムファミリを新規で追加し、データのコピー
を行うのが一般的である。
※カラムファミリ名には、[:/u0000-u001Fu007F-u009F]とISOに制御文字は利
用できず、[.-]を最初にはできない。
Maximum versions
データを保持する世代数の取得・設定
デフォルト3で最小は1
- 12. Schema Definition : Column Families
Compression
圧縮アルゴリズムの設定・確認
圧縮アルゴリズムは、[NONE][GZ][LZO][SNAPPY]の4種類が設
定でき、デフォルトは[NONE]、[NONE]だと圧縮なし、それ以外は、
記載されている圧縮アルゴリズムが利用される。
圧縮の詳細は本のP.424参照
- 13. Schema Definition : Column Families
Block size
ブロックサイズの取得・設定
HBaseの保存ファイルは、RDBMSのページ同様に細かいブロッ
クに分割されて管理
デフォルトは64KBで、バイト単位で設定
※HFileとHDFSのブロックサイズには重要な違いがある。
MapReduceは分散・並列処理の為に大きなサイズ(デフォルト64MB)を指定してい
るが、HBaseのストレージファイルは効率的にロードし、ブロック操作のデータをキャッ
シュする為に、細かいサイズ(デフォルト64KB)を指定する。
- 14. Schema Definition : Column Families
Block cache
HBaseのブロックキャッシュを有効を取得・設定
HBaseは効率的なI/Oを行う為、一度読み込んだブロックを
キャッシュとしてメモリに保持し、再度読みこむ際はキャッシュを利
用
デフォルトはtrueになっているが、特定のカラムファミリに対して、
シーケンシャルリードを行う場合には、設定をfalseにした方がよい。
- 15. Schema Definition : Column Families
Time-to-live
データの生存期間の取得・設定
指定された時間経過し、メジャーコンパクションが発生した際に
データを削除
デフォルト値は、Ingteger.MAX_VALUEになっており、この設定の
際は、メジャーコンパクションが発生してもデータは削除されない
- 16. Schema Definition : Column Families
In-memory
ブロックキャッシュのメモリロードの取得・設定
デフォルトはFalseで、Trueに設定された場合、カラムファミリの全
てのブロックがメモリにロードされるかどうかは保証されない
この設定はユーザテーブルのパスワードなど小さいカラムファイ
ミリには適する
Bloom filter
Bloom filterの取得・設定
デフォルトは[NONE]、[NONE][ROW][ROWCOL]が設定可能
特定のアクセスパターンにおいて、データ参照時間が向上
詳細は本のP.377を参照
- 17. Schema Definition : Column Families
Replication scope
レプリケーションの有効化の取得・設定
デフォルトは0で、レプリケーションしない
レプリケーションの詳細は本のP.462参照
isLegalFamilyName
カラムファミリ名のチェック
ユーザがカラムファミリを入力するシステムの場合に、名前の正
当性を確認するのに利用
- 19. HBaseAdmin : Basic Operations
クライアントAPIを利用するには、HBaseAdminクラスのインスタンス
を生成する必要がある
※このセクションのほとんどのメソッドはIOException(それと継承したExceptionを含
め)かInterruptedExceptionをThrowしますが、それは省略している。
既存のCofigurationインスタンスとAPIを用いれば、クライアントAPI
同様、クラスタの利用しているZookeeperの定数が分かる
HBaseAdminのインスタンスは不要になった場合、削除が必要
- 20. HBaseAdmin : Basic Operations
Abort
強制中止の実行
Frameworkから自動で呼ばれる為、ユーザが直接呼ぶべきでは
ない
getMaster
マスタサーバに直接通信するRPCプロキシのインスタンスである
HMasterInterfaceを返却
HBaseAdminクラスは、HMasterInterfaceのラッパーで提供する
機能は全て利用可能
※getMasterから返るHMasterInterfaceは直接利用せず、HbaseAdminクラスを利用
する。
- 21. HBaseAdmin : Basic Operations
isMasterRunning
マスタサーバの稼働確認
getConnection
本のP203にある、HConnectionインスタンスを返却
getConfiguration
HBaseAdminインスタンスを生成する為のConfigurationインスタ
ンスを返却
close
HBaseAdminのリソース解放とマスタサーバとの接続断
- 22. HBaseAdmin : Table Operations
CreateTable
HTableDescriptorを用いて、テーブルを作成
例にあるように、StartKey, EndKey, リージョン数を指定して
CreateTableを実行する事も可能
StartKey, EndKeyは数値として解釈され、EndKeyはStartKeyよ
り大きい値を設定
リージョン数は3以上を設定
同様にSplitKeyを指定して、テーブルを作成する事も可能
SplitKeyはByte列の配列で指定
- 23. HBaseAdmin : Table Operations
CreateTableAsync
HTableDescriptorを用いて、非同期にテーブルを作成
※大半のテーブル関連の管理APIは非同期に実行される。
同期メソッドも実際には、非同期のメソッドのラッパーで非同期メソッドの結果を
ループで待ち続けているだけである。
- 24. HBaseAdmin : Table Operations
TableExists
listTables
テーブルの存在確認・一覧取得
deleteTable
テーブルの削除
- 25. HBaseAdmin : Table Operations
disableTable
テーブルを利用不可に設定
テーブルの削除を行う前にこの操作を行う事が必要
enableTable
利用不可にしたテーブルを再度利用可能に設定
- 26. HBaseAdmin : Table Operations
isTableEnabled
isTableDisabled
isTableAvailabled
テーブルの利用可否や有効かどうかの確認
EnableとAvailableの違いは、disable状態でも物理的に存在して
いて、ステータスに問題がなければavailable
- 27. HBaseAdmin : Table Operations
modifyTable
テーブルの設定を変更
HTableDescriptorを取得し、その設定を変更し、modifyTableに
てテーブルにHTableDescriptorを設定
※modifyTableは同期処理のメソッドはなく、必ず非同期で処理される。
変更が全てのサーバに適用されたかは、getHTableDescriptorで取得したインタン
スとの比較で判断する。
- 28. HBaseAdmin : Schema Operations
HBaseAdminには、modifyTable以外にもテーブルスキーマの設定
を変更するメソッドがある。
ただし、modifyTableと同様に、テーブルの状態がDisabledに設定さ
れている必要がある。
addColumn
deleteColumn
modifyColumn
カラムファミリの追加・削除・変更
- 29. HBaseAdmin : Cluster Operations
HBaseAdminのクラスタ関連のAPIは、ステータス確認・テーブルや
リージョンでのタスク実行
※多くの操作は、AdvancedUser向けなので利用には要注意
CheckHBaseAvailable
利用しているクライアントアプリケーションが、リモートサーバと通
信できるか確認
戻り値はvoidになっており、利用不可能な場合には、Exceptionが
Throwされ、利用可能時は正常終了
- 30. HBaseAdmin : Cluster Operations
getClusterStatus
クラスターの情報取得
クラスターの情報にアクセスする為のClusterStatusクラスに関し
ては後述
closeRegion
リージョンサーバにデプロイされているリージョンを閉じる
有効なテーブルのリージョンに対して、マスタから閲覧できない状
態にする
- 31. HBaseAdmin : Cluster Operations
flush
リージョンサーバのMemStoreに保持されてflushされていない
データをflush
compact
指定リージョン・テーブルでコンパクションを実行
コンパクションは長い時間がかかる可能性がある為、必ず非同
期に実行
テーブル名が指定された場合、該当テーブルの全リージョンでコ
ンパクションを実行
- 32. HBaseAdmin : Cluster Operations
majorCompact
指定リージョン・テーブルでメジャーコンパクションを実行
compactと同様、非同期で、テーブル名指定は、全リージョンが
対象
split
指定リージョン・テーブルでスピリットを実行
テーブル名が指定された場合、該当テーブルの全リージョンでス
ピリットを実行
splitPointにて、RowKeyを指定する事が可能だが、不正な
RowKeyが指定された場合は、Exceptionが発生
- 33. HBaseAdmin : Cluster Operations
assign
unassign
リージョンの設置・削除を実行
forceオプションを付けると、既にassign/unassignを実行していて
も、さらに同じ操作を実行
move
リージョンを指定したサーバへ移動
destServerNameにNullを設定した場合は、ランダムなサーバへ
移動
- 34. HBaseAdmin : Cluster Operations
balanceSwitch
バランサー機能のON/OFFを設定
balancer
バランサー機能がONの時に実行されると、リージョンのバランシ
ングを実行
バランシングに関しては、本のP.432を参照
shutDown
stopMaster
stopRegionServer
クラス全体・マスタ・リージョンサーバを停止
- 35. HBaseAdmin : Cluster Status Information
getClusterStatusで取得した、ClusterStatusのインスタンスを利用
する事で、マスタサーバの保持するクラスタ情報を取得可能
setから始まるsetterメソッドも存在するが、ClusterStatusのインスタ
ンスのコピーでしかない為、変更する意味は特にない
ClusterStauts, ServerName, HServerLoad, RegionLoadクラスの
各メソッドで取得可能
バージョン・ID・名称・サイズなどの各種情報を取得可能