hbase整理

7907 ワード

what's
中国語のドキュメントはBigTableから来ています.HBAseはgoogleのbigtableを参考にしたオープンソース製品で、hdfsの上に構築された高信頼性、高性能、カラムストレージ、伸縮性、リアルタイム読み書きを提供するデータベースシステムです.nosqlとRDBMsの間にあるデータベースシステムで、rowkeyとrangeによるデータの検索のみをサポートし、主に非構造化データと半構造化データを格納する.
HBAseはHadoopと同様に,横方向に拡張し,通常のマシンを追加することでストレージ性能と計算性能を向上させることを目標としている.HBAseの特徴:大きい(1つのテーブルに億行以上、百万級のローがある)、行向けストレージ、疎(nullがストレージスペースを占有しないため、すべてのテーブルの結果は非常に疎に設計できます).
スキーマ#スキーマ#
HBAseはZookeeperを用いてクラスタノード管理を行い,もちろんHBAse自体はZKシステムを統合しているが,一般的には実際の生産環境では使用されない.HBAseは、masterとregionserverの2つのノード(HBAseが所有するzkサービスを使用する場合、HQuorumPeerプロセスもあります).Hbaseはbackup masterによるmasterバックアップをサポートします.ここでmasterノードはzkとの通信およびregionserverに関する位置情報の格納を担当し、regionserverノードは具体的なデータに対する操作を実現し、最終的なデータはhdfsに格納される.
物理ストレージ:hbaseの永続化データはhdfsに格納されたストレージ管理です.1つのテーブルは多くのregionに分割され、これらのregionは多くのregionserverに分散的に格納されます(1台のマシンは1つのregionServerに対応します).region内部はstoreに分けることもでき、store内部にはmemstoreとstorefileがあります
バージョン管理:hbaseでのデータ更新は本質的に新しいバージョンを絶えず追加し、compact操作でバージョン間のファイルマージregionのsplitを行う
クラスタ管理:zookeeper+hmaster+hregionserver
Web管理インタフェース:http://host:60010/
hbaseデータ
HBAse論理ストレージ構造
row keyは、テーブル内のカラムデータの一意の識別です.タイムスタンプ、データの更新、バージョンを記録します.column familyはカラムクラスタ(複数可)であり、cfは1つ以上の関連カラムcolumn 01、column 02、....
HBAse物理ストレージ構造
Hbase Shell操作$ bin/hbase shellはhbaseのshellクライアントに入り、データに対する操作は主にDDLとDMLの2つの種類に分けられる.いいえshift+deleteは前に削除できます.
ネーミングスペース
類似関係型データベースのdatabaseは、hbaseのテーブルをビジネスの役割に従って分割し、メンテナンスに役立ちます.Hbaseのデフォルトにはhbaseとdefaultの2つのネーミングスペースがあります.hbaseネーミングスペースにはhbase自体のテーブル情報が格納され、defaultにはユーザーが作成したテーブルが格納されます.create_namespaceネーミングスペースを作成し、alter_namespaceネーミングスペース describe_を変更します.namespace drop_namespace`ネーミングスペースを削除します.削除したネーミングスペースにtableが存在しないことに注意してください.つまり、空のnamespaceしか削除できません.list_namespaceはすべてのネーミングスペースを表示し、list_namespace_tablesはネーミングスペース内のtable名に対してパラメータが正規形式であることを表示します.後のパラメータは引用符で囲みます.
list
役割:mysqlのshow tablesのようなhbaseテーブル名を表示します.ネーミングスペースを指定することで、対応するネーミングスペース内のテーブルを表示できます.デフォルトでは、すべてのユーザーテーブルが表示され、ファジイマッチングもサポートされます.類似コマンドlist_namespace_tablesは、対応するネーミングスペース内にテーブルがあることを表示します.
create > help "create"で使用方法を確認できます.ネーミングスペース、テーブル名hbase> create 'ns1:t1'を指定するテーブルを作成すると、テーブルに少なくとも1つのカラムクラスタが必要であることが示されます.hbase> create 'ns1:table1', {NAME => 'f1', VERSIONS => 5}ここでは、カラムクラスタf 1が指定され、バージョン情報が追加される.さらに詳細情報hbase> create 't1', {NAME => 'f1', VERSIONS => 1, TTL => 2592000, BLOCKCACHE => true} hbase> create 't1', {NAME => 'f1', CONFIGURATION => {'hbase.hstore.blockingStoreFiles' => '10'}}を追加することもできます.
表に配置情報 hbase> create 't1', {NAME => 'f1', VERSIONS => 5}, METADATA => { 'mykey' => 'myvalue' }hbase> create 'ns1:t1', 'f1', SPLITS => ['10', '20', '30', '40']hbase> create 't1', 'f1', SPLITS_FILE => 'splits.txt', OWNER => 'johndoe'hbase> create 'ns1:table2', {NAME => 'f1'}, {NAME => 'f2'}, {NAME => 'f3'}を付加することもできるhbase> create 't1', 'f1', 'f2', 'f3'は、複数のカラムクラスタを指定します.略記:>describe 'table1'create 'table_logs', 'info', SPLITS => ['20151001000000000', '20151011000000000', '20151021000000000']表の説明を表示
プリディビジョンテーブルの作成
デフォルトでは、HBAseテーブルを作成し、テーブルにRegionを自動的に割り当てます.> disable '[namespace_name:]table_name' 3+1個region
drop
ユーザー・テーブルを削除する前に、テーブルをdisableに設定してから削除する必要があります.実はhbaseで既存のテーブルをddl操作する必要がある場合は、disableを必要とし、ddl操作が完了した後、enable操作を行えばよい.> drop '[namespace_name:]table_name' > put '[namespace_name:]table_name', 'rowkey', 'family:[column]', 'value' [, timestamp] [, {ATTRIBUTES=>{'mykey'=>'myvalue'}, VISIBILITY=>'PRIVATE|SECRET'}]
put
putコマンドは、データの追加を行うコマンドです.> put 'users','row1','f1:id','1'例:>put 'user', '10001', 'info:name', 'zhangsan' > t=get_table 'cyan:table2'それぞれテーブル名(ネーミングスペースなし)、列クラスタ名、列名(列クラスタを指定)、値、デフォルトタイムスタンプ
gives you a reference to the table named 't1', on which you can then call methods. t.put 'r3', 'f1:id', '9'が参照を得た後の> t.get 'r3' hbase> t1 = create 't1', 'f1'も、このようにしてテーブル> delete '[namespace:]table_name', 'rowkey', 'family:column'を作成することができる.
delete
カラムcolumnデータを削除し、> delete 'user', '10001', 'info:age' > deleteall 'user', '10001'当然rowkeyのすべてのカラムデータを削除する必要がある場合はdeleteallコマンドを使用します.> truncate '[namespace_name:]table_name' 10001は全部なくなりました
truncate
データベースを空にします.データベースのデータが多い場合は、このコマンドを選択してデータベースを空にします.> get '[namespace_name:]table_name', 'rowkey'
データの問合せ
HBAseデータクエリには、次の3つの方法があります.
get
rowkeyクエリーに基づいて、一番速いです.対応テーブルのrowkeyに対応するデータを取得します.デフォルトでは、最新バージョンのすべてのカラムデータが取得され、タイムスタンプでバージョン情報を指定したり、取得したカラムを指定したりできます.> get 'users','row1'例:>get 'user', '10001', 'info:name' >get 'user', '10001', 'info:name', 'info:age' rowのname値> scan 'users', {COLUMN=>['f1:id']} rowのname値とage値を得る
scan range
columnやfilterなどの関連情報を指定することでデータのフィルタリングを行う.範囲クエリーはすべて「{}」に書かれています.最も多く使われています.> scan 'users', {COLUMN=>['f1:id','f2:name']}は、列クラスタf 1があり、列名idのrowの数と、その列の値を返します.> scan 'users', {STARTROW=>'row1',ENDROW=>'row2'}は、列クラスタf 1が返され、列名がidであるか、列クラスタf 2が返され、列名がnameであるrowのエントリ数と、その列の値を返します.> scan 'users', {LIMIT=>1}スキャンを開始するrowkey、スキャンを終了するrowkey、行数などの情報を取得する.包頭不包尾!> scan 'users',{FILTER=>"SingleColumnValueFilter('f','id',=,'binary:1)"}は前のrowを返します.
一般的なfilterコマンドには、ColumnPrefixFilter、M u l t i p leColumnPrefixFilter、RowFilter、SingleColumnValue Filter、SingleColumnValue ExcludeFilterなどがあります.指定したvalueの前に「binary:」!最後にバイナリの文字列配列に変わります.> scan 'users', {FILTER=>"RowFilter(>=,'binary:row8')"}は、f列クラスタの下にidという名前を指定し、値は1 > scan 'users', {FILTER=>"SingleColumnValueFilter('f','id',=,'binary:2')"}`>scan'users'、{FILTER=>"SingleColumnValueFilter('f','id','binary:row 7')}> scan 'users', {FILTER=>"ColumnPrefixFilter('id')"} > scan 'users', {FILTER=>"MultipleColumnPrefixFilter('id', 'name')"}
様々な条件を「{}」に書き、交差をカンマで区切ることができます.
scan
全表スキャン.> scan '[namespace_name:]table_name'例:> scan 'users'count
hbaseテーブルの行数を統計するコマンドで、組み込まれたmapreduceプログラムに相当するため、データ量が比較的大きい場合はコプロセッサ方式で行数を計算することができます.> count '[namespace:]table_name' [INTERVAL => 1000,] [CACHE => 10]デフォルトではINTERVALは1000(間隔数)、CACHEは10です.
status
役割:hbaseクラスタのステータス情報を表示します.
パラメータ:simple,summary,detailed;デフォルトはsummaryです.
Hbase java api
http://hbase.apache.org/apidocs/
HBase MapReduce
http://www.kuqin.com/database...