Lao Liuは本日HBaseの知識を確認し、多くの資料で概念が明確になっておらず、説明のない専門用語が多数あることを発見しました。たとえば、このフレームワークは高性能で高可用性ですが、高性能と高可用性とは何ですか?高性能と高可用性を実現するにはどうすればよいですか?全く言わなかった!
インタビュアーがあなたの言ったことを聞いた場合、どのように反応しますか?私の気持ちは、あなたが話しているのは、あなた自身の理解がなくても、他人のものだということです。だからこそ、ラオ・リウはビッグデータについてのシリーズを大きな言葉で書き、物事を明確にしようとしているのです!Lao Liuが上手く書いたと思うなら、Lao Liuに親指を立ててください!
01HBaseナレッジポイント
ポイント1:HBaseの定義
公式ウェブサイトの赤いボックスは、HBaseが分散型でスケーラブルなビッグデータストレージHadoopデータベースであることを直接示しています。あなたがインタビュアーであり、他の人がこのように答えると想像してみてください。あなたは満足しますか?Lao Liuは、真に習得するには、学んだことを自分の言葉で話さなければならないと感じました。
Lao Liuの見解では、HBase、つまりHadoopデータベースはHadoopデータベースです。
そのデータは通常HDFSに保存されます。HDFSはHBaseに信頼性の高い基盤となるストレージサポートを提供します。HadoopMapReduceを使用してHBaseで大量のデータを処理し、HBaseに高性能コンピューティング機能を提供します。ZooKeeperを使用してHBaseStableサービスを提供します。
上記に基づいて、HBaseはHDFS上に構築された分散データベースであり、高い信頼性、高いパフォーマンス、スケーラビリティ、および大規模なデータストレージのサポートを備えていると結論付けることができます。
一般に、HBaseデータベースは、格納されているデータが比較的大きく、読み取りと書き込みのパフォーマンス要件が比較的高い場合に使用されます。
読み取りと書き込みのパフォーマンスが高いことを知っていますか?つまり、読み取りと書き込みが速いほど、読み取りと書き込みのパフォーマンスが高くなります。
ポイント2:HBaseの機能
1)拡張が非常に簡単
HBaseの最下層はHDFSに依存しています。ディスク容量が不足している場合は、DataNodeノードを動的に増やすだけで済みます。もちろん、サーバーを追加することでクラスターのストレージを拡張することもできます。
2)大容量記憶装置
大量のデータを保存できます。大量のデータを保存することを前提として、データは数十から数百ミリ秒以内に返される可能性があります。これは、HBaseの非常に簡単なスケーラビリティと非常に関連しています。HBaseの優れたスケーラビリティが、大量のデータのストレージに便利な理由です。
3)列型ストレージ(ここでは、列型ストレージと行ストレージの違いを理解する必要があります)
ここでの列ストレージは実際には列ファミリーストレージを指し、HBaseは列ファミリーに従ってデータを格納します。列ファミリーの下には多くの列が存在する可能性があり、テーブルを作成するときに列ファミリーを指定する必要があります。
4)スパース
スパースネスは、主にHBase列の柔軟性のためです。列ファミリーでは、任意の数の列を指定できます。列データが空の場合、ストレージスペースを占有しません。
5)単一のデータ型
そのすべてのデータはバイト配列に格納されます。
ポイント3:HBaseテーブルのデータモデル
まず、この表に従ってHBase設計表を作成し、表の構造を紹介します。
行キー
1)テーブルの主キーです。テーブル内のレコードは、行キーの辞書式順序に従って並べ替えられます。辞書式順序とは何ですか。
多くの組織からの情報は1回のパスであり、一切の責任を負わないため、人々は非常に不快に感じます。Lao Liuは、辞書式順序付けの関連知識を検索する必要がありました。
素人の用語では、辞書式順序付けは、最初の文字から始まる約2つの比較であり、ASCIIコード表に従ってサイズを比較します。小さい方が最初に配置され、最初の文字が同じで、次の文字が比較されます。両方とも同じで1つです。比較されますそれが終わったとき、短いものが最初に来ます。
一般的なASCIIコードサイズの規則:0 9 <A Z <a〜z
2)行キー行キー。任意の文字列を使用できます。最大長は64KBで、実際のアプリケーションでの長さは通常10〜100バイトです。
列ファミリー列族
1)HBaseテーブルの各列は、特定の列ファミリーに属しています。
2)列ファミリーはテーブルのスキーマの一部です(列はそうではありません)。つまり、テーブルの作成時に少なくとも1つの列ファミリーが指定されます。
3)たとえば、2つの列ファミリーinfoとdataを含むuserテーブルを作成する場合、コードはcreate'user '、' info '、' data 'です。
カラム
列は、テーブルの特定の列ファミリーの下にある列である必要があります。これは、列ファミリー名(列名)で表されます。たとえばinfo
、name
列ファミリーの下の列は、として表されinfo:name
ます。
細胞
上の図に示すように、行キーの行キー、列ファミリー、および列を指定することにより、セルセルを決定できます。セル内のデータにはタイプがなく、すべてバイト配列の形式で格納されます。
タイムスタンプ
これは、テーブル内のセルに複数の割り当てを行うことができ、各割り当て操作のタイムスタンプをセル値のバージョン番号と見なすことができることを意味します。
つまり、セルには複数のバージョンの値を含めることができます。
ポイント4:HBaseアーキテクチャ
図からわかるように、これは非常に典型的なマスタースレーブアーキテクチャです。
以下で、各コンポーネントについて詳しく説明します。
クライアント
クライアントは、HBaseクラスターの操作への入り口です。クライアントを使用すると、RPCを介してHMasterと通信し、テーブルの追加、削除、および変更の操作を完了することができます。また、RPCを介してRegionServerと通信し、テーブルデータの読み取りと書き込みの操作を完了することもできます。通常、HBaseシェルまたはJava APIを使用して、上記のテーブルの操作を完了するようにプログラムできます。
ZooKeeperクラスター
ZooKeeperとは何ですか?また、その用途は何ですか?Old Liuは、ZooKeeperフレームワークに関する記事ですでに詳細に説明しています。チェックしてください。そうすれば、HBaseクラスターでのその役割は非常に明白です。①HMasterの高可用性を実現し、マスターとスレーブの選出が複数のHMaster間で実行されます。②HBaseメタデータ情報のメタテーブルが保存されます。③HMasterとHRegionServerの各ノードを監視します。
Hマスター
HBaseクラスターはマスタースレーブアーキテクチャでもあります。HMasterはマスターの役割であり、クラスターのリーダーであり、主にテーブルとリージョンの管理を担当します。テーブルとリージョンを管理するために何をしますか?
1)テーブルの追加、削除、変更を行うクライアントの一部の操作を管理します。
2)リージョンの管理操作は、クライアントの管理操作よりも少し多くなります。リージョンが分割されると、指定されたHRegionServerへの新しいリージョンの割り当てを担当します。HRegionServerがダウンすると、リージョンの移行を担当し、HRegionServer間の負荷分散を管理します。
負荷分散と負荷分散とは何かを理解していますか?
たとえば、Webサイトを最初に確立したときは、トラフィック量は比較的少ないですが、トラフィックが極端に大きくなると、同時量が非常に大きくなり、Webサイトにアクセス遅延の現象が発生します。このとき、負荷分散が必要です。このWebサイトは、以前は単一のサーバーでしたが、アクセストラフィックをクラスター内の異なるサーバーに分散できるように、複数のサーバークラスターを構成できるようになりました。これにより、単一のサーバーへの負荷が大幅に軽減されます。つまり、負荷分散で処理が必要になります。 。
HRegionServer
これは、HBaseクラスターのスレーブの役割であり、クラスターの弟です。主に、データの読み取りと書き込みに関するクライアントの要求への応答、および一連のリージョンの管理を担当します。
領域
これは、HBaseクラスター内の分散ストレージの最小単位です。リージョンは、テーブル内のデータの一部に対応します。簡単に理解すると、テーブルはHBaseに格納され、すべてリージョンに格納されます。
ポイント5:HBaseシェルコマンド
いくつかの一般的な基本操作コマンドについて説明します。
创建user表,包含info、data两个列族
create 'user', 'info', 'data'
使用put命令向user表中插入信息,row key为rk0001,列族info中添加名为name的列,值为zhangsan
put 'user', 'rk0001', 'info:name', 'zhangsan'
获取user表中row key为rk0001的所有信息(即所有cell的数据)
get 'user', 'rk0001'
获取user表中row key为rk0001,info列族的所有信息
get 'user', 'rk0001', 'info'
更新数据操作 将user表的f1列族版本数改为5
alter 'user', NAME => 'info', VERSIONS => 5
删除数据以及删除表操作
删除user表row key为rk0001,列标示符为info:name的数据
delete 'user', 'rk0001', 'info:name'
清空表数据
truncate 'user'
删除表
首先需要先让该表为disable状态,使用命令:
disable 'user'
然后使用drop命令删除这个表
drop 'user'
注意:如果直接drop表,会报错:Drop the named table. Table must first be disabled
HBaseの高度な操作コマンドについて話しましょう。
显示服务器状态
status 'node01'
显示HBase当前用户
whoami
显示当前所有的表
list
统计指定表的记录数
count 'user'
检查表是否存在,适用于表量特别多的情况
exists 'user'
检查表是否启用或禁用
is_enabled 'user'
is_disabled 'user'
禁用一张表/启用一张表
disable 'user'
enable 'user'
删除一张表,记得在删除表之前必须先禁用
drop
上記はHBaseシェルコマンドの内容とJAVAAPIを使用したテーブル操作の内容ですが、LaoLiuではこの部分については説明していません。必要に応じてLaoLiuに連絡してください。
02HBaseの概要
今日はHBaseナレッジポイントの最初の部分です。LaoLiuは、これらのナレッジポイントを説明するために平易な言葉を使用しようとしました。ご不明な点がございましたら、公開アカウントであるLaoLiuにお問い合わせください。
最後になりましたが、本日お話ししたことがビッグデータに興味のある学生の皆様のお役に立てば幸いです。また、皆様のご批判やご指導を賜りますようお願い申し上げます。