Uploaded on

 

More in: Business
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Be the first to comment
    Be the first to like this
No Downloads

Views

Total Views
611
On Slideshare
0
From Embeds
0
Number of Embeds
0

Actions

Shares
Downloads
4
Comments
0
Likes
0

Embeds 0

No embeds

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
    No notes for slide

Transcript

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