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