H base chapter_5

35
HBase The Definitive Guide 5.Client API : Administrative Features

Transcript of H base chapter_5

HBaseThe Definitive Guide

5.Client API : Administrative Features

この章について

 この章では、スキーマに関する説明と、実際にスキーマやデータを操作する為の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

HBaseAdmin 管理系のタスクを実行するクライアントAPI RDBMSのDMLと類似した機能 テーブル・カラムファミリの作成・存在確認・定義変更削除などの操作が可能

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

TableExistslistTables テーブルの存在確認・一覧取得

deleteTable テーブルの削除

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 クラス全体・マスタ・リージョンサーバを停止

HBaseAdmin : Cluster Status Information

getClusterStatusで取得した、ClusterStatusのインスタンスを利用する事で、マスタサーバの保持するクラスタ情報を取得可能setから始まるsetterメソッドも存在するが、ClusterStatusのインスタンスのコピーでしかない為、変更する意味は特にない

ClusterStauts, ServerName, HServerLoad, RegionLoadクラスの各メソッドで取得可能バージョン・ID・名称・サイズなどの各種情報を取得可能