Hbaseカラムナーストレージ入門チュートリアル
HBaseは、大規模なデータ保存をサポートする分散型、スケーラブル、NoSQLデータベースです。HBaseはHDFSを使用してデータを下部に保存するため分散型であり、HDFSの水平方向の拡張性によりスケーラブルである。ビッグデータ用のストレージとして、確かに大量データの保存をサポートしており、NoSQLの非リレーショナルデータベースのテーブル構造は、リレーショナルデータベース(Mysqlなど)の論理的・物理的構造とは大きく異なり、機能の性質や適用シーンが異なる。
1. 論理構造
1)名前空間
HBaseにはhbaseとdefaultという2つの自己完結した名前空間があり、hbaseはHBaseの組み込みテーブルを保持し、defaultはユーザーがデフォルトで使用する名前空間である。
2) 地域
リレーショナル・データベースにおけるテーブルの概念に似ている。違いは、HBaseはテーブルを定義する際に、特定のカラムではなく、カラムファミリーを宣言すればよいことである。つまり、HBaseにデータを書き込む際に、フィールドを動的かつオンデマンドに指定することができる。その結果、HBaseはリレーショナルデータベースと比較して、フィールドの変更シナリオを容易に扱うことができる。
3) 行
HBaseテーブルの各データ行は RowKey と複数の 列 (カラム)の辞書順に格納され、クエリ時にはRowKeyを元にしかデータを取得できないため、RowKeyの設計は非常に重要である。
4) カラム
HBaseの各カラムは、info:nameやinfo:ageのようにカラムファミリとカラムクオリファイアで修飾される。テーブルを構築する際には、カラムファミリを指定するだけでよく、カラムクオリファイアは事前に定義する必要はない。
5) タイムスタンプ
このフィールドは、データの異なるバージョンを識別するために使用されます。各データが書き込まれたとき、タイムスタンプが指定されていなければ、自動的にこのフィールドに追加され、その値はHBaseに書き込まれた時刻となる。
6) セル
rowkey, column Family: column Qualifier, time Stamp}で一意に識別されるセル。セルは型付けされておらず、すべてのデータはバイトコード形式で保存される。
2. 物理構造
1) リージョンサーバー
Region Server は Region の管理者であり、その実装クラスは HRegionServer で、主な役割は以下の通りです。
2) マスター
マスターはすべてのリージョンサーバの管理者であり、その実装クラスは HMaster で、以下の主な役割を持ちます: テーブル操作:作成、削除、変更 リージョンサーバ操作:各リージョンサーバへのリージョン割り当て、各ステータスの監視 HMaster の主な役割: テーブル操作:作成、削除、変更
3) Zookeeper
HBaseはZookeeperを使って、Masterの高可用性、RegionServerの監視、メタデータの入力、クラスタ構成のメンテナンスなどを行う。
4) HDFS
HDFSは、HBaseの高可用性をサポートしながら、HBaseの究極の基盤となるデータストレージサービスを提供します。
3. 追加・削除・確認
HBaseの操作の初心者やテスト段階は
HBase shell
. 追加、削除、変更などの基本的なコマンドは以下の通りである。
(1) テーブルを作成する
create 'test','cf'
testはテーブル名、cfはカラムのファミリー名です。HBaseのテーブルには、作成時にカラムを定義する場所がないことにお気づきでしょうか(リレーショナルデータベースとは大きく異なりますね)。これは、HBaseのカラムはすべて柔軟で、自由に定義できるためです。カラムが生成されるのは、最初のデータを挿入するときだけです。では、テーブルの属性はどこで定義されるのでしょうか?実は、HBaseのデータ属性はすべてカラムファミリに定義されているのです。
(2) テーブルのプロパティを表示する
describe 'test'
出力します。
hbase(main):002:0> desc 'test'.
テーブルテストはENABLED
test, {TABLE_ATTRIBUTES => {DURABILITY => 'USE_DEFAULT', METADATA => {'IS_ROOT'
=> 'false', 'LINDORM_TABLE_ATTRS' => '\x00x08x00x00x00x00x16WAL_EDIT_WITH_FULL
_ROW\x05false\x00\x00\x00\x00\x00\x0BCONSISTENCY\x08eventual\x00\x00\x00\x00\x00\x16LEADER_BALAN
CE_ENABLED\x01\xFF\x00\x00\x00\x00\x1FFULL_ROW_EDIT_CARRY_LATEST_DATA\x04true\x00\x0
0\x00\x0FDYNAMIC_COLUMNS\x04true\x00\x00\x00\x00\x0FALLOW_FILTERING\x01\x00\x00\x00\x00\x00\
x00\x13LEADER_BALANCE_TYPE\x06single\x00\x00\x00\x00\x12DEFERRED_LOG_FLUSH\x05false'
, 'TABLEMETAVERSION' => '\xE4nx0F'}}.
カラムファミリーの説明
{NAME => 'cf', VERSIONS => '1', EVICT_BLOCKS_ON_CLOSE => 'false', NEW_VERSION_BE
HAVIOR => 'false', KEEP_DELETED_CELLS => 'FALSE', CACHE_DATA_ON_WRITE => 'false'
DATA_BLOCK_ENCODING => 'DIFF', TTL => 'FOREVER', MIN_VERSIONS => '0', REPLICAT
ION_SCOPE => '0', BLOOMFILTER => 'ROW', CACHE_INDEX_ON_WRITE => 'false', IN_MEMO
RY => 'false', CACHE_BLOOMS_ON_WRITE => 'false', PREFETCH_BLOCKS_ON_OPEN => 'fal'です。
se', COMPRESSION => 'ZSTD', BLOCKCACHE => 'true', BLOCKSIZE => '65536', METADATA
=> {'STORAGE_POLICY' => 'DEFAULT', 'COMPRESS_TAGS' => 'true', 'DFS_REPLICATION'
=> '2', 'CHS_PROMOTE_ON_MAJOR' => 'true'}}。
1行
0.2150秒
テーブルの記述はあまりなく、カラムファミリーの記述が多いことがわかります。これは従来のリレーショナルデータベースにおけるテーブルに近いもので、テーブル自体はカラムファミリーを保持する単なる空のシェルとなります。
(3) テーブルを見る
<ブロッククオートリスト
出力します。
hbase(main):001:0>リスト
テーブル
テスト
テスト1
テスト2
test_ls
4行
0.6370秒
=> ["test", "test1", "test2", "test_ls"] となります。
(4) データを挿入する
put 'test','row1','cf:name','jack'
この文の意味は テストテーブルにセルを挿入します。このセルのrowkeyはrow1なので、row1の行にある列ということになります。セルのカラムファミリはcf、セルのカラム名はname、データ値はjackである。データが挿入されるとカラムが作成されることがわかる。テーブル構造の行にカラムが存在しなくても、データがNULLに置換されることはないが、セルが全く押されないことはない。このようにスパースなk-v方式でデータを格納することで、データの格納容量を大幅に圧縮することができる。
(5) スキャンデータ
scan 'test'
出力します。
hbase(main):011:0> scan 'test'.
行 列+セル
row1 column=cf:name, timestamp=1625911358767, value=jack。
1行
0.5670秒かかった
scanコマンドは
select * from test
.
(6) データを見る
scanコマンドはデータを一括して読み込むコマンドで、getコマンドはセルのデータを問い合わせることができます
get 'test','row1','cf:name'
HBaseはキー・バリュー・ペアを用いてデータを下部に保存するため、セルのデータに対するクエリーが非常に速く、これもMysqlとは全く異なる点です。
(7) データを削除する
delete 'test','row1','cf:name'
HBaseは実際にデータを削除するのではなく、このバージョンと以前のバージョンを不可視とする墓標を置くことによってレコードを削除します。
(8)テーブルの非活性化
disable 'test'
テーブルが削除される前に無効化する
(9) テーブルを削除する
drop 'test'
4. アプリケーションシナリオ
HBaseはKey/Valueストレージを採用しているため、データ量が増えてもクエリーの性能低下が少ないのが特徴です。何事も弱点がなければ長所にはなり得ない。データ分析はHBaseの弱点です。なぜなら、HBaseとNoSQLエコシステム全体では、テーブルの相関関係がほとんどサポートされていないからです。
うまくいかないシーン レポート作成など、データ分析が主な要件。1つのテーブルのデータ量が1,000万を超えない。MySQLまたはOracleデータベースを推奨します。
適したシナリオ 単一テーブルのデータ量が1000万を超え、なおかつ並行性がかなり高い。データ分析のニーズが弱い、またはそれほど柔軟性やリアルタイム性を必要としない。
5. 参考文献
Bサイトビデオ ShangSilicon HBase Tutorial (hbase framework quick start)
Hbaseカラムナストレージを始めるにあたって、この記事は以上です。Hbase columnar storageの詳細については、Script Houseの過去記事を検索するか、以下の記事を引き続きご覧ください。
関連
-
SQL修正構文文の概要
-
DataGripでクリックハウスの時間フィールドが正しく表示されない
-
Linuxシステム用Navicatアクティベーションチュートリアル
-
DeepinV20 Mariadbのクイックインストールを詳しくご紹介します。
-
Navicat sqlファイルのインポートとエクスポートを素早く行う方法
-
SQLyogダウンロード、インストール超詳細チュートリアル(プロテスト永久保存版)
-
Dbeaverを使ったHiveへのリモート接続の詳細方法
-
Navicat Premium 15データベース接続フラッシュバックの問題を解決する
-
Navicat Premiumを使用して、データベースのテーブル構造情報をExcelにエクスポートする方法
-
SQLインジェクションの例とその解決方法
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
ツリー構造データベースのテーブルのスキーマ設計のための2つのオプション
-
JetBrains DataGripのインストールと使用に関する詳細なチュートリアル
-
データベースシステムの構造詳細説明 3レベルのスキーマ構造
-
Navicat for SQLite インストールチュートリアル(インストールキット付き
-
JMeterデータベースクエリ操作手順詳細説明
-
SQL実行エンジンを自作する方法
-
Navicat for Mac システムチュートリアルのインストールと使用方法
-
どのようなデータベースのサブベースのサブテーブルは、どのような状況でサブベースのサブテーブルを使用する必要があります。
-
外部キーの関連付けを行う SQL 文の完全な例
-
タイプインジェクションとコミットインジェクションのSQLインジェクションチュートリアル