Hbase-quick-guide
HBase-概要
1970年以来、RDBMSはデータストレージとメンテナンス関連の問題の解決策です。 ビッグデータの出現後、企業はビッグデータを処理する利点を認識し、Hadoopなどのソリューションを選択し始めました。
Hadoopは、ビッグデータを保存するために分散ファイルシステムを使用し、MapReduceがそれを処理します。 Hadoopは、任意、半、または非構造化など、さまざまな形式の巨大なデータの保存と処理に優れています。
Hadoopの制限
Hadoopはバッチ処理のみを実行でき、データはシーケンシャルな方法でのみアクセスされます。 つまり、最も単純なジョブでもデータセット全体を検索する必要があります。
巨大なデータセットを処理すると、別の巨大なデータセットが生成されます。これも順次処理する必要があります。 この時点で、単一の時間単位でデータの任意のポイントにアクセスするための新しいソリューションが必要です(ランダムアクセス)。
Hadoopランダムアクセスデータベース
HBase、Cassandra、couchDB、Dynamo、MongoDBなどのアプリケーションは、膨大な量のデータを保存し、ランダムな方法でデータにアクセスするデータベースの一部です。
HBaseとは何ですか?
HBaseは、Hadoopファイルシステム上に構築された分散列指向データベースです。 これはオープンソースプロジェクトであり、水平方向に拡張可能です。
HBaseは、大量の構造化データにすばやくランダムにアクセスできるように設計されたGoogleの大きなテーブルに似たデータモデルです。 Hadoop File System(HDFS)によって提供されるフォールトトレランスを活用します。
これは、Hadoopファイルシステム内のデータへのランダムなリアルタイム読み取り/書き込みアクセスを提供するHadoopエコシステムの一部です。
HDFSに直接またはHBaseを介してデータを保存できます。 データコンシューマは、HBaseを使用してHDFSのデータをランダムに読み取り/アクセスします。 HBaseはHadoopファイルシステムの上にあり、読み取りおよび書き込みアクセスを提供します。
HBaseおよびHDFS
HDFS | HBase |
---|---|
HDFS is a distributed file system suitable for storing large files. | HBase is a database built on top of the HDFS. |
HDFS does not support fast individual record lookups. | HBase provides fast lookups for larger tables. |
It provides high latency batch processing; no concept of batch processing. | It provides low latency access to single rows from billions of records (Random access). |
It provides only sequential access of data. | HBase internally uses Hash tables and provides random access, and it stores the data in indexed HDFS files for faster lookups. |
HBaseのストレージメカニズム
HBaseは*列指向データベース*であり、その中のテーブルは行でソートされます。 テーブルスキーマは、キーと値のペアである列ファミリのみを定義します。 表には複数の列ファミリーがあり、各列ファミリーには任意の数の列を含めることができます。 後続の列値は、ディスクに連続して格納されます。 テーブルの各セル値にはタイムスタンプがあります。 要するに、HBaseで:
- テーブルは行のコレクションです。
- 行は列ファミリのコレクションです。
- 列ファミリは列のコレクションです。
- 列はキーと値のペアのコレクションです。
以下に、HBaseのテーブルのスキーマの例を示します。
ROWID
列ファミリー
列ファミリー
列ファミリー
列ファミリー
col1
col2
col3
col1
col2
col3
col1
col2
col3
col1
col2
col3
1
2
3
列方向と行方向
列指向データベースは、データの行としてではなく、データの列のセクションとしてデータテーブルを格納するデータベースです。 まもなく、それらには列ファミリがあります。
Row-Oriented Database | Column-Oriented Database |
---|---|
It is suitable for Online Transaction Process (OLTP). | It is suitable for Online Analytical Processing (OLAP). |
Such databases are designed for small number of rows and columns. | Column-oriented databases are designed for huge tables. |
次の図は、列指向データベースの列ファミリを示しています。
HBaseおよびRDBMS
HBase | RDBMS |
---|---|
HBase is schema-less, it doesn’t have the concept of fixed columns schema; defines only column families. | An RDBMS is governed by its schema, which describes the whole structure of tables. |
It is built for wide tables. HBase is horizontally scalable. | It is thin and built for small tables. Hard to scale. |
No transactions are there in HBase. | RDBMS is transactional. |
It has de-normalized data. | It will have normalized data. |
It is good for semi-structured as well as structured data. | It is good for structured data. |
HBaseの機能
- HBaseは線形にスケーラブルです。
- 自動障害サポートがあります。
- 一貫した読み取りと書き込みを提供します。
- ソースおよび宛先としてHadoopと統合します。
- クライアント用の簡単なJava APIがあります。
- クラスタ全体でデータ複製を提供します。
HBaseの使用場所
- Apache HBaseは、ビッグデータへのランダムなリアルタイムの読み取り/書き込みアクセスに使用されます。
- コモディティハードウェアのクラスターの上に非常に大きなテーブルをホストします。
- Apache HBaseは、GoogleのBigtableをモデルにした非リレーショナルデータベースです。 BigtableはGoogle File System上で動作し、同様にApache HBaseはHadoopおよびHDFS上で動作します。
HBaseのアプリケーション
- 重いアプリケーションを作成する必要がある場合に使用されます。
- HBaseは、利用可能なデータへの高速ランダムアクセスを提供する必要がある場合に使用されます。
- Facebook、Twitter、Yahoo、Adobeなどの企業はHBaseを内部的に使用しています。
HBaseの歴史
Year | Event |
---|---|
Nov 2006 | Google released the paper on BigTable. |
Feb 2007 | Initial HBase prototype was created as a Hadoop contribution. |
Oct 2007 | The first usable HBase along with Hadoop 0.15.0 was released. |
Jan 2008 | HBase became the sub project of Hadoop. |
Oct 2008 | HBase 0.18.1 was released. |
Jan 2009 | HBase 0.19.0 was released. |
Sept 2009 | HBase 0.20.0 was released. |
May 2010 | HBase became Apache top-level project. |
HBase-アーキテクチャ
HBaseでは、テーブルはリージョンに分割され、リージョンサーバーによって提供されます。 リージョンは、カラムファミリごとに「ストア」に垂直に分割されます。 ストアはHDFSにファイルとして保存されます。 以下に、HBaseのアーキテクチャを示します。
注意:「ストア」という用語は、ストレージ構造を説明するためにリージョンに使用されます。
HBaseには、クライアントライブラリ、マスターサーバー、リージョンサーバーの3つの主要コンポーネントがあります。 リージョンサーバーは、要件に応じて追加または削除できます。
MasterServer
マスターサーバー-
- リージョンサーバーにリージョンを割り当て、このタスクのためにApache ZooKeeperの助けを借ります。
- リージョンサーバー間でリージョンの負荷分散を処理します。 使用中のサーバーをアンロードし、領域を占有率の低いサーバーにシフトします。
- 負荷分散をネゴシエートすることにより、クラスターの状態を維持します。
- スキーマの変更、およびテーブルや列ファミリの作成などの他のメタデータ操作を担当します。
地域
リージョンは、分割されてリージョンサーバー全体に広がるテーブルに他なりません。
地域サーバー
地域サーバーには次の地域があります-
- クライアントと通信し、データ関連の操作を処理します。
- その下のすべての領域に対する読み取りおよび書き込み要求を処理します。
- 領域サイズのしきい値に従って領域のサイズを決定します。
リージョンサーバーを詳しく見ると、以下に示すようにリージョンとストアが含まれています。
ストアには、メモリストアとHFilesが含まれます。 Memstoreはキャッシュメモリのようなものです。 HBaseに入力されたものはすべて、最初にここに保存されます。 その後、データが転送され、Hfilesにブロックとして保存され、memstoreがフラッシュされます。
飼育係
- Zookeeperは、構成情報の維持、命名、分散同期の提供などのサービスを提供するオープンソースプロジェクトです。
- Zookeeperには、異なるリージョンサーバーを表す一時ノードがあります。 マスターサーバーはこれらのノードを使用して、使用可能なサーバーを検出します。
- 可用性に加えて、ノードはサーバー障害またはネットワークパーティションの追跡にも使用されます。
- クライアントは、zookeeperを介してリージョンサーバーと通信します。
- 擬似モードおよびスタンドアロンモードでは、HBase自体が動物園飼育係を処理します。
HBase-インストール
この章では、HBaseのインストール方法と初期設定方法について説明します。 HBaseを続行するにはJavaとHadoopが必要なので、システムにjavaとHadoopをダウンロードしてインストールする必要があります。
インストール前のセットアップ
Linux環境にHadoopをインストールする前に、 ssh (Secure Shell)を使用してLinuxをセットアップする必要があります。 Linux環境を設定するには、以下の手順に従ってください。
ユーザーを作成する
まず、Hadoopの別のユーザーを作成して、HadoopファイルシステムをUnixファイルシステムから分離することをお勧めします。 以下の手順に従ってユーザーを作成します。
- コマンド「su」を使用してルートを開きます。
- コマンド「useradd username」を使用して、rootアカウントからユーザーを作成します。
- これで、コマンド「su username」を使用して既存のユーザーアカウントを開くことができます。
Linuxターミナルを開き、次のコマンドを入力してユーザーを作成します。
SSHセットアップとキー生成
開始、停止、分散デーモンシェル操作など、クラスターでさまざまな操作を実行するには、SSHセットアップが必要です。 Hadoopのさまざまなユーザーを認証するには、Hadoopユーザーに公開/秘密キーペアを提供し、それをさまざまなユーザーと共有する必要があります。
SSHを使用してキーと値のペアを生成するには、次のコマンドを使用します。 id_rsa.pubの公開鍵をauthorized_keysにコピーし、authorized_keysファイルの所有者、読み取り、書き込みの許可をそれぞれ提供します。
sshを検証する
Javaのインストール
Javaは、HadoopとHBaseの主要な前提条件です。 まず、「java -version」を使用して、システムにjavaが存在することを確認する必要があります。 java versionコマンドの構文は次のとおりです。
すべてが正常に機能する場合、次の出力が得られます。
システムにjavaがインストールされていない場合は、javaをインストールするための以下の手順に従ってください。
ステップ1
次のリンクhttp://www.oracle.com/technetwork/java/javase/downloads/jdk7-downloads-1880260l[Oracle Java]にアクセスして、java(JDK <最新バージョン>-X64.tar.gz)をダウンロードします。
その後、 jdk-7u71-linux-x64.tar.gz がシステムにダウンロードされます。
ステップ2
通常、ダウンロードしたjavaファイルは、ダウンロードフォルダーにあります。 それを確認し、次のコマンドを使用して jdk-7u71-linux-x64.gz ファイルを抽出します。
ステップ3
すべてのユーザーがJavaを使用できるようにするには、「/usr/local/」の場所に移動する必要があります。 ルートを開き、次のコマンドを入力します。
ステップ4
すべての変更を現在実行中のシステムに適用します。
ステップ5
次のコマンドを使用して、Javaの代替を構成します。
次に、上記で説明したように、ターミナルから java -version コマンドを確認します。
Hadoopをダウンロードする
Javaをインストールしたら、Hadoopをインストールする必要があります。 まず、以下に示すように、「Hadoop version」コマンドを使用してHadoopの存在を確認します。
すべてが正常に機能する場合、次の出力が得られます。
システムがHadoopを見つけられない場合は、システムにHadoopをダウンロードします。 以下のコマンドに従ってください。
次のコマンドを使用して、Apache Software Foundationからhttp://apache.bytenet.in/hadoop/common/hadoop-2.6.0/[hadoop-2.6.0]をダウンロードして抽出します。
Hadoopのインストール
必要なモードのいずれかでHadoopをインストールします。 ここでは、疑似分散モードでHBaseの機能を示しているため、Hadoopを疑似分散モードでインストールします。
ステップ1-Hadoopのセットアップ
次のコマンドを*〜/.bashrc *ファイルに追加することにより、Hadoop環境変数を設定できます。
すべての変更を現在実行中のシステムに適用します。
ステップ2-Hadoopの構成
すべてのHadoop設定ファイルは、「$ HADOOP_HOME/etc/hadoop」の場所にあります。 Hadoopインフラストラクチャに応じて、これらの構成ファイルを変更する必要があります。
JavaでHadoopプログラムを開発するには、 JAVA_HOME 値をシステム内のjavaの場所に置き換えて、 hadoop-env.sh ファイルのjava環境変数をリセットする必要があります。
Hadoopを構成するには、次のファイルを編集する必要があります。
core-site.xmlを開き、<configuration>タグと</configuration>タグの間に次のプロパティを追加します。
次のデータを想定します。
このファイルを開き、<configuration>タグと</configuration>タグの間に次のプロパティを追加します。
- 注意:*上記のファイルでは、すべてのプロパティ値はユーザー定義であり、Hadoopインフラストラクチャに応じて変更できます。
このファイルは、Hadoopに糸を設定するために使用されます。 yarn-site.xmlファイルを開き、<configuration $ gt;、</configuration $ gt;の間に次のプロパティを追加します。このファイルのタグ。
このファイルは、使用しているMapReduceフレームワークを指定するために使用されます。 デフォルトでは、Hadoopにはyarn-site.xmlのテンプレートが含まれています。 まず、次のコマンドを使用して、 mapred-site.xml.template から mapred-site.xml ファイルにファイルをコピーする必要があります。
Hadoopインストールの検証
次の手順を使用して、Hadoopのインストールを確認します。
ステップ1-ノードのセットアップに名前を付ける
次のようにコマンド「hdfs namenode -format」を使用して、namenodeをセットアップします。
期待される結果は次のとおりです。
ステップ2-Hadoop dfの検証
次のコマンドは、dfsを開始するために使用されます。 このコマンドを実行すると、Hadoopファイルシステムが起動します。
予想される出力は次のとおりです。
ステップ3-糸スクリプトの検証
次のコマンドを使用して、糸スクリプトを開始します。 このコマンドを実行すると、糸デーモンが起動します。
予想される出力は次のとおりです。
ステップ4-ブラウザーでのHadoopへのアクセス
Hadoopにアクセスするためのデフォルトのポート番号は50070です。 次のURLを使用して、ブラウザーでHadoopサービスを取得します。
ステップ5-クラスターのすべてのアプリケーションを確認する
クラスターのすべてのアプリケーションにアクセスするためのデフォルトのポート番号は8088です。 このサービスにアクセスするには、次のURLを使用してください。
HBaseのインストール
HBaseは、スタンドアロンモード、疑似分散モード、完全分散モードの3つのモードのいずれかでインストールできます。
スタンドアロンモードでのHBaseのインストール
「wget」コマンドを使用してHBaseの最新の安定バージョンをhttp://www.interior-dsgn.com/apache/hbase/stable/からダウンロードし、tar「zxvf」コマンドを使用して抽出します。 次のコマンドを参照してください。
以下に示すように、スーパーユーザーモードに移行し、HBaseフォルダーを/usr/localに移動します。
スタンドアロンモードでのHBaseの構成
HBaseに進む前に、次のファイルを編集してHBaseを構成する必要があります。
hbase-env.sh
HBaseのjavaホームを設定し、confフォルダーから hbase-env.sh ファイルを開きます。 JAVA_HOME環境変数を編集し、以下に示すように既存のパスを現在のJAVA_HOME変数に変更します。
これにより、HBaseのenv.shファイルが開きます。 次に示すように、既存の JAVA_HOME 値を現在の値に置き換えます。
hbase-site.xml
これは、HBaseのメイン構成ファイルです。/usr/local/HBaseのHBaseホームフォルダーを開いて、データディレクトリを適切な場所に設定します。 confフォルダー内には、いくつかのファイルがあり、以下に示すように hbase-site.xml ファイルを開きます。
これで、HBaseのインストールと構成の部分は正常に完了しました。 HBaseのbinフォルダーにある start-hbase.sh スクリプトを使用して、HBaseを起動できます。 そのためには、HBaseホームフォルダーを開き、以下に示すようにHBase起動スクリプトを実行します。
すべてがうまくいけば、HBase起動スクリプトを実行しようとすると、HBaseが起動したというメッセージが表示されます。
擬似分散モードでのHBaseのインストール
次に、HBaseが擬似分散モードでどのようにインストールされているかを確認しましょう。
HBaseの構成
HBaseに進む前に、ローカルシステムまたはリモートシステムでHadoopとHDFSを構成し、それらが実行されていることを確認します。 HBaseが実行中の場合は停止します。
hbase-site.xmlファイルを編集して、次のプロパティを追加します。
HBaseを実行するモードについて説明します。 ローカルファイルシステムの同じファイルで、hdfs:////URI構文を使用して、hfs.rootdir、HDFSインスタンスアドレスを変更します。 ローカルホストのポート8030でHDFSを実行しています。
HBaseを開始する
設定が完了したら、HBaseホームフォルダーを参照し、次のコマンドを使用してHBaseを起動します。
注意: HBaseを起動する前に、Hadoopが実行されていることを確認してください。
HDFSでHBaseディレクトリを確認する
HBaseは、HDFSにディレクトリを作成します。 作成されたディレクトリを表示するには、Hadoop binを参照し、次のコマンドを入力します。
すべてがうまくいけば、次の出力が得られます。
マスターの開始と停止
「local-master-backup.sh」を使用すると、最大10台のサーバーを起動できます。 HBaseのホームフォルダーを開き、マスターし、次のコマンドを実行して起動します。
バックアップマスターを強制終了するには、そのプロセスIDが必要です。このプロセスIDは、*“/tmp/hbase-USER-X-master.pid” *という名前のファイルに保存されます。次のコマンドを使用してバックアップマスターを強制終了できます。
RegionServerの起動と停止
次のコマンドを使用して、単一のシステムから複数のリージョンサーバーを実行できます。
リージョンサーバーを停止するには、次のコマンドを使用します。
HBaseShellの開始
HBaseを正常にインストールしたら、HBase Shellを起動できます。 以下に、HBaseシェルを開始するために従うべき一連のステップを示します。 ターミナルを開き、スーパーユーザーとしてログインします。
Hadoopファイルシステムを起動する
Hadoopのホームsbinフォルダーを参照し、以下に示すようにHadoopファイルシステムを起動します。
HBaseを起動します
HBaseルートディレクトリのbinフォルダーを参照して、HBaseを起動します。
HBase Master Serverを起動します
これは同じディレクトリになります。 以下に示すように起動します。
開始地域
以下に示すように、リージョンサーバーを起動します。
HBase Shellを起動します
次のコマンドを使用して、HBaseシェルを起動できます。
これにより、以下に示すようにHBase Shellプロンプトが表示されます。
HBase Webインターフェイス
HBaseのWebインターフェイスにアクセスするには、ブラウザーに次のURLを入力します。
このインターフェイスには、現在実行中のリージョンサーバー、バックアップマスター、HBaseテーブルが一覧表示されます。
HBaseリージョンサーバーとバックアップマスター
HBaseテーブル
Java環境の設定
Javaライブラリを使用してHBaseと通信することもできますが、Java APIを使用してHBaseにアクセスする前に、これらのライブラリのクラスパスを設定する必要があります。
クラスパスの設定
プログラミングを進める前に、。bashrc *ファイルでクラスパスをHBaseライブラリに設定します。 以下に示すように、いずれかのエディターで *.bashrc を開きます。
以下に示すように、HBaseライブラリ(HBaseのlibフォルダー)のクラスパスを設定します。
これは、Java APIを使用してHBaseにアクセスする際の「クラスが見つかりません」例外を防ぐためです。
HBase-シェル
この章では、HBaseに付属するHBaseインタラクティブシェルの起動方法について説明します。
HBaseシェル
HBaseには、HBaseと通信できるシェルが含まれています。 HBaseは、Hadoopファイルシステムを使用してデータを保存します。 マスターサーバーとリージョンサーバーがあります。 データストレージは、リージョン(テーブル)の形式になります。 これらのリージョンは分割され、リージョンサーバーに保存されます。
マスターサーバーはこれらのリージョンサーバーを管理し、これらのタスクはすべてHDFS上で実行されます。 HBase Shellでサポートされているコマンドの一部を以下に示します。
一般的なコマンド
- status -サーバーの数など、HBaseのステータスを提供します。
- version -使用されているHBaseのバージョンを提供します。
- table_help -テーブル参照コマンドのヘルプを提供します。
- whoami -ユーザーに関する情報を提供します。
データ定義言語
これらは、HBaseのテーブルを操作するコマンドです。
- create -テーブルを作成します。
- list -HBaseのすべてのテーブルをリストします。
- disable -テーブルを無効にします。
- is_disabled -テーブルが無効かどうかを検証します。
- enable -テーブルを有効にします。
- is_enabled -テーブルが有効かどうかを検証します。
- describe -テーブルの説明を提供します。
- alter -テーブルを変更します。
- exists -テーブルが存在するかどうかを検証します。
- drop -HBaseからテーブルを削除します。
- drop_all -コマンドで指定された「正規表現」に一致するテーブルを削除します。
- Java管理API -上記のすべてのコマンドの前に、Javaは管理APIを提供して、プログラミングによってDDL機能を実現します。 org.apache.hadoop.hbase.client パッケージの下で、HBaseAdminおよび HTableDescriptorは、DDL機能を提供するこのパッケージの2つの重要なクラスです。
データ操作言語
- put -セル値を、指定した行の指定した列に配置します 特定のテーブル。
- get -行またはセルの内容を取得します。
- delete -テーブル内のセル値を削除します。
- deleteall -指定された行のすべてのセルを削除します。
- scan -テーブルデータをスキャンして返します。
- count -テーブル内の行数をカウントして返します。
- truncate -指定したテーブルを無効化、削除、および再作成します。
- JavaクライアントAPI -上記のすべてのコマンドに先立ち、Javaは、org.apache.hadoop.hbase.clientパッケージの下で、プログラミングを通じてDML機能、 CRUD (Create Retrieve Update Delete)操作などを実現するクライアントAPIを提供します。 HTable Put および Get は、このパッケージの重要なクラスです。
HBaseシェルの開始
HBaseシェルにアクセスするには、HBaseホームフォルダーに移動する必要があります。
以下に示すように、*“ hbase shell” *コマンドを使用して、HBaseインタラクティブシェルを起動できます。
HBaseをシステムに正常にインストールすると、以下に示すようにHBaseシェルプロンプトが表示されます。
インタラクティブシェルコマンドをいつでも終了するには、exitと入力するか、<ctrl + c>を使用します。 さらに進む前に、シェルが機能していることを確認してください。 この目的には list コマンドを使用します。 List は、HBaseのすべてのテーブルのリストを取得するために使用されるコマンドです。 まず、以下のようにこのコマンドを使用して、システムのHBaseのインストールと構成を確認します。
このコマンドを入力すると、次の出力が表示されます。
HBase-一般コマンド
HBaseの一般的なコマンドは、status、version、table_help、およびwhoamiです。 この章では、これらのコマンドについて説明します。
状態
このコマンドは、システムで実行されているサーバーの詳細を含むシステムのステータスを返します。 その構文は次のとおりです。
このコマンドを実行すると、次の出力が返されます。
バージョン
このコマンドは、システムで使用されているHBaseのバージョンを返します。 その構文は次のとおりです。
このコマンドを実行すると、次の出力が返されます。
table_help
このコマンドは、テーブル参照コマンドの使用方法と使用方法をガイドします。 以下に、このコマンドを使用する構文を示します。
このコマンドを使用すると、テーブル関連のコマンドのヘルプトピックが表示されます。 以下に、このコマンドの部分的な出力を示します。
私は誰
このコマンドは、HBaseのユーザー詳細を返します。 このコマンドを実行すると、以下に示すように現在のHBaseユーザーを返します。
HBase-管理API
HBaseはJavaで記述されているため、HBaseと通信するためのJava APIを提供します。 Java APIは、HBaseと通信するための最速の方法です。 以下に、テーブルの管理に使用されるタスクをカバーする参照されたjava Admin APIを示します。
クラスHBaseAdmin
メソッドと説明
S.No. | Methods and Description |
---|---|
1 |
void createTable(HTableDescriptor desc) 新しいテーブルを作成します。 |
2 |
void createTable(HTableDescriptor desc, byte[][] splitKeys) 指定された分割キーによって定義された空の領域の初期セットで新しいテーブルを作成します。 |
3 |
void deleteColumn(byte[] tableName, String columnName) テーブルから列を削除します。 |
4 |
void deleteColumn(String tableName, String columnName) テーブルから列を削除します。 |
5 |
void deleteTable(String tableName) テーブルを削除します。 |
クラス記述子
このクラスには、次のようなHBaseテーブルに関する詳細が含まれます。
- すべての列ファミリの記述子、
- テーブルがカタログテーブルの場合、
- テーブルが読み取り専用の場合、
- memストアの最大サイズ、
- 領域分割が発生する場合、 *関連するコプロセッサなど
コンストラクタ
S.No. | Constructor and summary |
---|---|
1 |
TableNameオブジェクトを指定してテーブル記述子を構築します。 |
メソッドと説明
S.No. | Methods and Description |
---|---|
1 |
HTableDescriptor addFamily(HColumnDescriptor family) 指定された記述子に列ファミリを追加します |
HBase-テーブルの作成
HBase Shellを使用してテーブルを作成する
例
以下に、empという名前のテーブルのサンプルスキーマを示します。 「個人データ」と「専門データ」の2つの列ファミリがあります。
Row key | personal data | professional data |
---|---|---|
以下に示すように、HBaseシェルでこのテーブルを作成できます。
そして、次の出力が得られます。
検証
以下に示す list コマンドを使用して、テーブルが作成されているかどうかを確認できます。 ここで、作成されたempテーブルを確認できます。
Java APIを使用したテーブルの作成
ステップ1:HBaseAdminのインスタンス化
このクラスにはパラメーターとしてConfigurationオブジェクトが必要です。したがって、最初にConfigurationクラスをインスタンス化し、このインスタンスをHBaseAdminに渡します。
ステップ2:TableDescriptorの作成
ステップ3:管理者を介して実行する
以下は、adminを介してテーブルを作成するための完全なプログラムです。
以下に示すように、上記のプログラムをコンパイルして実行します。
出力は次のようになります。
HBase-リスト表
HBase Shellを使用してテーブルをリストする
listは、HBaseのすべてのテーブルをリストするために使用されるコマンドです。 以下にリストコマンドの構文を示します。
このコマンドを入力してHBaseプロンプトで実行すると、以下に示すように、HBaseのすべてのテーブルのリストが表示されます。
ここでは、empという名前のテーブルを観察できます。
Java APIを使用したテーブルのリスト
以下の手順に従って、Java APIを使用してHBaseからテーブルのリストを取得します。
ステップ1
HBaseのすべてのテーブルのリストを取得するには、クラス HBaseAdmin に* listTables()というメソッドがあります。 このメソッドは、 *HTableDescriptor オブジェクトの配列を返します。
ステップ2
以下は、Java APIを使用してHBaseのすべてのテーブルをリストするプログラムです。
以下に示すように、上記のプログラムをコンパイルして実行します。
出力は次のようになります。
HBase-テーブルを無効にする
HBase Shellを使用してテーブルを無効にする
テーブルを削除または設定を変更するには、まずdisableコマンドを使用してテーブルを無効にする必要があります。 enableコマンドを使用して、再度有効にすることができます。
以下は、テーブルを無効にする構文です。
例
以下は、テーブルを無効にする方法を示す例です。
検証
テーブルを無効にした後でも、 list および exists コマンドを使用して、その存在を検知できます。 スキャンできません。 次のエラーが表示されます。
無効になっています
このコマンドは、テーブルが無効になっているかどうかを確認するために使用されます。 構文は次のとおりです。
次の例では、empという名前のテーブルが無効になっているかどうかを確認します。 無効になっている場合はtrueを返し、そうでない場合はfalseを返します。
すべて無効にします
このコマンドは、指定された正規表現に一致するすべてのテーブルを無効にするために使用されます。 disable_all コマンドの構文は次のとおりです。
HBaseには、raja、rajani、rajendra、rajesh、rajuの5つのテーブルがあるとします。 次のコードは、* raj。*で始まるすべてのテーブルを無効にします
Java APIを使用してテーブルを無効にする
テーブルが無効になっているかどうかを確認するには、* isTableDisabled()メソッドを使用し、テーブルを無効にするには、 disableTable()メソッドを使用します。 これらのメソッドは *HBaseAdmin クラスに属します。 以下の手順に従って、テーブルを無効にします。
ステップ1
以下に示すように、 HBaseAdmin クラスをインスタンス化します。
ステップ2
以下に示すように、* isTableDisabled()*メソッドを使用して、テーブルが無効になっているかどうかを確認します。
ステップ3
テーブルが無効になっていない場合は、以下に示すように無効にします。
以下は、テーブルが無効になっているかどうかを確認するための完全なプログラムです。そうでない場合、それを無効にする方法。
以下に示すように、上記のプログラムをコンパイルして実行します。
出力は次のようになります。
HBase-テーブルを有効にする
HBase Shellを使用してテーブルを有効にする
テーブルを有効にする構文:
例
以下に、テーブルを有効にする例を示します。
検証
テーブルを有効にした後、スキャンします。 スキーマが表示される場合、テーブルは正常に有効化されています。
有効になっています
このコマンドは、テーブルが有効になっているかどうかを確認するために使用されます。 その構文は次のとおりです。
次のコードは、 emp という名前のテーブルが有効になっているかどうかを確認します。 有効な場合はtrueを返し、そうでない場合はfalseを返します。
Java APIを使用してテーブルを有効にする
テーブルが有効かどうかを確認するには、* isTableEnabled()メソッドを使用します。また、テーブルを有効にするには、 enableTable()メソッドを使用します。 これらのメソッドは *HBaseAdmin クラスに属します。 以下の手順に従って、テーブルを有効にします。
ステップ1
以下に示すように、 HBaseAdmin クラスをインスタンス化します。
ステップ2
以下に示すように、* isTableEnabled()*メソッドを使用して、テーブルが有効になっているかどうかを確認します。
ステップ3
テーブルが無効になっていない場合は、以下に示すように無効にします。
以下は、テーブルが有効になっているかどうかを確認する完全なプログラムで、有効になっていない場合は有効にする方法です。
以下に示すように、上記のプログラムをコンパイルして実行します。
出力は次のようになります。
HBase-説明と変更
記述する
このコマンドは、テーブルの説明を返します。 その構文は次のとおりです。
以下に、 emp テーブルでのdescribeコマンドの出力を示します。
変える
Alterは、既存のテーブルに変更を加えるために使用されるコマンドです。 このコマンドを使用すると、列ファミリのセルの最大数を変更したり、テーブルスコープ演算子を設定および削除したり、テーブルから列ファミリを削除したりできます。
列ファミリのセルの最大数の変更
以下は、列ファミリのセルの最大数を変更する構文です。
次の例では、セルの最大数は5に設定されています。
テーブルスコープ演算子
alterを使用すると、MAX_FILESIZE、READONLY、MEMSTORE_FLUSHSIZE、DEFERRED_LOG_FLUSHなどのテーブルスコープ演算子を設定および削除できます。
読み取り専用の設定
以下は、テーブルを読み取り専用にする構文です。
次の例では、 emp テーブルを読み取り専用にしました。
テーブルスコープ演算子の削除
テーブルスコープ演算子を削除することもできます。 以下は、empテーブルから「MAX_FILESIZE」を削除する構文です。
列ファミリーの削除
alterを使用して、列ファミリを削除することもできます。 以下に、alterを使用して列ファミリを削除する構文を示します。
以下は、「emp」テーブルから列ファミリを削除する例です。
HBaseにemployeeという名前のテーブルがあると仮定します。 次のデータが含まれます。
次に、alterコマンドを使用して professional という名前の列ファミリを削除します。
変更後、テーブル内のデータを確認します。 コラムファミリ「professional」は削除されているため、もはや存在しません。
Java APIを使用した列ファミリの追加
ステップ1
ステップ2
- addColumn()メソッドには、テーブル名と *HColumnDescriptor クラスのオブジェクトが必要です。 したがって、 HColumnDescriptor クラスをインスタンス化します。 また、 HColumnDescriptor のコンストラクターには、追加する列ファミリ名が必要です。 ここでは、「contactDetails」という名前の列ファミリを既存の「employee」テーブルに追加しています。
ステップ3
以下は、既存のテーブルに列ファミリを追加するための完全なプログラムです。
以下に示すように、上記のプログラムをコンパイルして実行します。
上記のコンパイルは、「 .bashrc 」でクラスパスを設定した場合にのみ機能します。 そうでない場合は、以下の手順に従って.javaファイルをコンパイルします。
すべてがうまくいけば、次の出力が生成されます。
Java APIを使用した列ファミリの削除
ステップ1
ステップ2
- deleteColumn()*メソッドを使用して列ファミリーを追加します。 テーブル名と列ファミリ名をパラメータとしてこのメソッドに渡します。
以下に、既存のテーブルから列ファミリを削除する完全なプログラムを示します。
以下に示すように、上記のプログラムをコンパイルして実行します。
出力は次のようになります。
HBase-存在
HBase Shellを使用したテーブルの存在
Java APIを使用したテーブルの存在の確認
ステップ1
ステップ2
- tableExists()*メソッドを使用して、テーブルの存在を確認します。
以下は、Java APIを使用してHBaseのテーブルの存在をテストするJavaプログラムです。
以下に示すように、上記のプログラムをコンパイルして実行します。
出力は次のようになります。
HBase-テーブルをドロップ
HBase Shellを使用してテーブルを削除する
existsコマンドを使用して、テーブルが削除されているかどうかを確認します。
drop_all
このコマンドは、コマンドで指定された「正規表現」に一致するテーブルを削除するために使用されます。 その構文は次のとおりです。
- 注意:*テーブルを削除する前に、無効にする必要があります。
例
raja、rajani、rajendra、rajesh、rajuという名前のテーブルがあるとします。
これらの表はすべて raj という文字で始まります。 まず、以下に示すように disable_all コマンドを使用して、これらすべてのテーブルを無効にします。
これで、以下に示す drop_all コマンドを使用して、それらすべてを削除できます。
Java APIを使用したテーブルの削除
ステップ1
HBaseAdminクラスをインスタンス化します。
ステップ2
ステップ3
以下は、HBaseのテーブルを削除する完全なJavaプログラムです。
以下に示すように、上記のプログラムをコンパイルして実行します。
出力は次のようになります。
HBase-シャットダウン
exit
HBaseを停止する
HBaseを停止するには、HBaseホームフォルダーを参照し、次のコマンドを入力します。
Java APIを使用したHBaseの停止
ステップ1
HbaseAdminクラスをインスタンス化します。
ステップ2
以下に、HBaseを停止するプログラムを示します。
以下に示すように、上記のプログラムをコンパイルして実行します。
出力は次のようになります。
HBase-クライアントAPI
この章では、HBaseテーブルで CRUD 操作を実行するために使用されるHBaseのJavaクライアントAPIについて説明します。 HBaseはJavaで記述されており、Java Native APIを備えています。 したがって、データ操作言語(DML)へのプログラムによるアクセスを提供します。
クラスHBaseの構成
HBase構成ファイルを構成に追加します。 このクラスは org.apache.hadoop.hbase パッケージに属します。
方法と説明
S.No. | Methods and Description |
---|---|
1 |
static org.apache.hadoop.conf.Configuration create() このメソッドは、HBaseリソースを使用して構成を作成します。 |
クラスHTable
HTableは、HBaseテーブルを表すHBase内部クラスです。 単一のHBaseテーブルと通信するために使用されるテーブルの実装です。 このクラスは org.apache.hadoop.hbase.client クラスに属します。
コンストラクタ
S.No. | Constructors and Description |
---|---|
1 | *HTable() * |
2 |
このコンストラクターを使用して、HBaseテーブルにアクセスするオブジェクトを作成できます。 |
方法と説明
S.No. | Methods and Description |
---|---|
1 |
void close() HTableのすべてのリソースを解放します。 |
2 |
void delete(Delete delete) 指定したセル/行を削除します。 |
3 |
boolean exists(Get get) このメソッドを使用すると、Getで指定されているように、テーブル内の列の存在をテストできます。 |
4 |
Result get(Get get) 特定の行から特定のセルを取得します。 |
5 |
org.apache.hadoop.conf.Configuration getConfiguration() このインスタンスで使用されるConfigurationオブジェクトを返します。 |
6 |
TableName getName() このテーブルのテーブル名インスタンスを返します。 |
7 |
HTableDescriptor getTableDescriptor() このテーブルのテーブル記述子を返します。 |
8 |
byte[] getTableName() このテーブルの名前を返します。 |
9 |
void put(Put put) この方法を使用すると、データをテーブルに挿入できます。 |
クラスプット
このクラスは、単一の行に対してPut操作を実行するために使用されます。 org.apache.hadoop.hbase.client パッケージに属します。
コンストラクタ
S.No. | Constructors and Description |
---|---|
1 |
Put(byte[] row) このコンストラクターを使用して、指定した行のPut操作を作成できます。 |
2 |
Put(byte[] rowArray, int rowOffset, int rowLength) このコンストラクタを使用すると、渡された行キーのコピーを作成してローカルに保持できます。 |
3 |
Put(byte[] rowArray, int rowOffset, int rowLength, long ts) このコンストラクタを使用すると、渡された行キーのコピーを作成してローカルに保持できます。 |
4 |
Put(byte[] row, long ts) このコンストラクターを使用して、指定されたタイムスタンプを使用して、指定された行のPut操作を作成できます。 |
方法
S.No. | Methods and Description |
---|---|
1 |
Put add(byte[] family, byte[] qualifier, byte[] value) 指定された列と値をこのPut操作に追加します。 |
2 |
Put add(byte[] family, byte[] qualifier, long ts, byte[] value) 指定されたタイムスタンプをバージョンとして指定された列と値をこのPut操作に追加します。 |
3 |
Put add(byte[] family, ByteBuffer qualifier, long ts, ByteBuffer value) 指定されたタイムスタンプをバージョンとして指定された列と値をこのPut操作に追加します。 |
4 |
Put add(byte[] family, ByteBuffer qualifier, long ts, ByteBuffer value) 指定されたタイムスタンプをバージョンとして指定された列と値をこのPut操作に追加します。 |
クラス取得
このクラスは、単一の行でGet操作を実行するために使用されます。 このクラスは org.apache.hadoop.hbase.client パッケージに属します。
コンストラクタ
S.No. | Constructor and Description |
---|---|
1 |
Get(byte[] row) このコンストラクターを使用して、指定した行のGet操作を作成できます。 |
2 | Get(Get get) |
方法
S.No. | Methods and Description |
---|---|
1 |
Get addColumn(byte[] family, byte[] qualifier) 指定された修飾子を持つ特定のファミリーから列を取得します。 |
2 |
Get addFamily(byte[] family) 指定されたファミリからすべての列を取得します。 |
クラス削除
このクラスは、単一の行で削除操作を実行するために使用されます。 行全体を削除するには、削除する行でDeleteオブジェクトをインスタンス化します。 このクラスは org.apache.hadoop.hbase.client パッケージに属します。
コンストラクタ
S.No. | Constructor and Description |
---|---|
1 |
Delete(byte[] row) 指定された行の削除操作を作成します。 |
2 |
Delete(byte[] rowArray, int rowOffset, int rowLength) 指定された行とタイムスタンプの削除操作を作成します。 |
3 |
Delete(byte[] rowArray, int rowOffset, int rowLength, long ts) 指定された行とタイムスタンプの削除操作を作成します。 |
4 |
Delete(byte[] row, long timestamp) 指定された行とタイムスタンプの削除操作を作成します。 |
方法
S.No. | Methods and Description |
---|---|
1 |
Delete addColumn(byte[] family, byte[] qualifier) 指定された列の最新バージョンを削除します。 |
2 |
Delete addColumns(byte[] family, byte[] qualifier, long timestamp) 指定されたタイムスタンプ以下のタイムスタンプを持つ指定された列のすべてのバージョンを削除します。 |
3 |
Delete addFamily(byte[] family) 指定したファミリのすべての列のすべてのバージョンを削除します。 |
4 |
Delete addFamily(byte[] family, long timestamp) 指定されたタイムスタンプ以下のタイムスタンプを持つ指定されたファミリのすべての列を削除します。 |
クラス結果
このクラスは、GetクエリまたはScanクエリの単一行の結果を取得するために使用されます。
コンストラクタ
S.No. | Constructors |
---|---|
1 |
Result() このコンストラクターを使用すると、KeyValueペイロードのない空のResultを作成できます。 raw Cells()を呼び出すとnullを返します。 |
方法
S.No. | Methods and Description |
---|---|
1 |
byte[] getValue(byte[] family, byte[] qualifier) このメソッドは、指定された列の最新バージョンを取得するために使用されます。 |
2 |
byte[] getRow() このメソッドは、このResultが作成された行に対応する行キーを取得するために使用されます。 |
HBase-データを作成する
HBase Shellを使用したデータの挿入
この章では、HBaseテーブルにデータを作成する方法を示します。 HBaseテーブルにデータを作成するには、次のコマンドとメソッドが使用されます。
- put コマンド、
- Put クラスの* add()*メソッド、および
- HTable クラスの* put()*メソッド。
例として、HBaseで次のテーブルを作成します。
最初の行の挿入
以下に示すように、最初の行の値をempテーブルに挿入します。
同じ方法でputコマンドを使用して残りの行を挿入します。 テーブル全体を挿入すると、次の出力が得られます。
Java APIを使用したデータの挿入
ステップ1:構成クラスのインスタンス化
ステップ2:HTableクラスをインスタンス化する
HBaseのTableの実装である HTable というクラスがあります。 このクラスは、単一のHBaseテーブルと通信するために使用されます。 このクラスをインスタンス化する間、構成オブジェクトとテーブル名をパラメーターとして受け入れます。 以下に示すように、HTableクラスをインスタンス化できます。
ステップ3:PutClassのインスタンス化
HBaseテーブルにデータを挿入するには、* add()メソッドとそのバリアントが使用されます。 このメソッドは *Put に属しているため、putクラスをインスタンス化します。 このクラスには、データを挿入する行名が文字列形式で必要です。 以下に示すように、 Put クラスをインスタンス化できます。
ステップ4:データを挿入する
ステップ5:テーブルにデータを保存する
必要な行を挿入したら、次に示すように、putインスタンスをHTableクラスの* put()*メソッドに追加して、変更を保存します。
ステップ6:HTableインスタンスを閉じる
HBaseテーブルにデータを作成した後、以下に示すように* close()メソッドを使用して *HTable インスタンスを閉じます。
HBaseテーブルにデータを作成するための完全なプログラムを以下に示します。
以下に示すように、上記のプログラムをコンパイルして実行します。
出力は次のようになります。
HBase-データの更新
HBase Shellを使用してデータを更新する
新しく指定された値は既存の値を置き換え、行を更新します。
例
次のデータを含む emp というHBaseのテーブルがあるとします。
次のコマンドは、「Raju」という名前の従業員の都市値をデリーに更新します。
更新された表は次のようになります。ここでは、ラジュの街が「デリー」に変更されていることがわかります。
Java APIを使用したデータの更新
- put()*メソッドを使用して、特定のセルのデータを更新できます。 以下の手順に従って、テーブルの既存のセル値を更新します。
ステップ1:構成クラスのインスタンス化
ステップ2:HTableクラスをインスタンス化する
HBaseのTableの実装である HTable というクラスがあります。 このクラスは、単一のHBaseテーブルと通信するために使用されます。 このクラスをインスタンス化する際、構成オブジェクトとテーブル名をパラメーターとして受け入れます。 以下に示すように、HTableクラスをインスタンス化できます。
ステップ3:Putクラスをインスタンス化する
HBaseテーブルにデータを挿入するには、* add()メソッドとそのバリアントが使用されます。 このメソッドは *Put に属しているため、 put クラスをインスタンス化します。 このクラスには、データを挿入する行名が文字列形式で必要です。 以下に示すように、 Put クラスをインスタンス化できます。
ステップ4:既存のセルを更新する
ステップ5:テーブルにデータを保存する
必要な行を挿入したら、以下に示すように、putインスタンスをHTableクラスの* put()*メソッドに追加して、変更を保存します。
ステップ6:HTableインスタンスを閉じる
HBase Tableでデータを作成した後、以下に示すようにclose()メソッドを使用して HTable インスタンスを閉じます。
以下は、特定のテーブルのデータを更新するための完全なプログラムです。
以下に示すように、上記のプログラムをコンパイルして実行します。
出力は次のようになります。
HBase-データの読み取り
HBase Shellを使用したデータの読み取り
例
次の例は、getコマンドの使用方法を示しています。 emp テーブルの最初の行をスキャンしてみましょう。
特定の列の読み取り
以下に、 get メソッドを使用して特定の列を読み取る構文を示します。
例
以下は、HBaseテーブルの特定の列を読み取る例です。
Java APIを使用したデータの読み取り
HBaseテーブルからデータを読み取るには、HTableクラスの* get()メソッドを使用します。 このメソッドには、 *Get クラスのインスタンスが必要です。 以下の手順に従って、HBaseテーブルからデータを取得します。
ステップ1:構成クラスのインスタンス化
ステップ2:HTableクラスをインスタンス化する
HBaseのTableの実装である HTable というクラスがあります。 このクラスは、単一のHBaseテーブルと通信するために使用されます。 このクラスをインスタンス化する際、構成オブジェクトとテーブル名をパラメーターとして受け入れます。 以下に示すように、HTableクラスをインスタンス化できます。
ステップ3:Getクラスをインスタンス化する
ステップ4:データを読む
データの取得中に、IDで単一の行を取得したり、行IDのセットで行のセットを取得したり、テーブル全体または行のサブセットをスキャンしたりできます。
特定の列ファミリから特定の列を取得するには、次の方法を使用します。
特定の列ファミリからすべての列を取得するには、次の方法を使用します。
ステップ5:結果を取得する
ステップ6:結果インスタンスから値を読み取る
以下は、HBaseテーブルから値を読み取るための完全なプログラムです。
以下に示すように、上記のプログラムをコンパイルして実行します。
出力は次のようになります。
HBase-データの削除
テーブル内の特定のセルを削除する
例
特定のセルを削除する例を次に示します。 ここで給与を削除しています。
テーブル内のすべてのセルを削除する
「deleteall」コマンドを使用すると、行のすべてのセルを削除できます。 以下に、deleteallコマンドの構文を示します。
例
次に、empテーブルのrow1のすべてのセルを削除する「deleteall」コマンドの例を示します。
Java APIを使用したデータの削除
ステップ1:構成クラスのインスタンス化
ステップ2:HTableクラスをインスタンス化する
HBaseのTableの実装である HTable というクラスがあります。 このクラスは、単一のHBaseテーブルと通信するために使用されます。 このクラスをインスタンス化する際、構成オブジェクトとテーブル名をパラメーターとして受け入れます。 以下に示すように、HTableクラスをインスタンス化できます。
ステップ3:削除クラスをインスタンス化する
削除する行のROWIDをバイト配列形式で渡すことにより、 Delete クラスをインスタンス化します。 タイムスタンプとRowlockをこのコンストラクターに渡すこともできます。
ステップ4:削除するデータを選択する
ステップ5:データを削除する
以下に示すように、 HTable クラスの* delete()メソッドに *delete インスタンスを渡すことにより、選択したデータを削除します。
ステップ6:HTableInstanceを閉じます
データを削除したら、 HTable インスタンスを閉じます。
以下は、HBaseテーブルからデータを削除する完全なプログラムです。
以下に示すように、上記のプログラムをコンパイルして実行します。
出力は次のようになります。
HBase-スキャン
HBase Shellを使用したスキャン
例
次の例は、スキャンコマンドを使用してテーブルからデータを読み取る方法を示しています。 ここで emp テーブルを読んでいます。
Java APIを使用したスキャン
Java APIを使用してテーブルデータ全体をスキャンする完全なプログラムは次のとおりです。
以下に示すように、上記のプログラムをコンパイルして実行します。
出力は次のようになります。
HBase-カウントと切り捨て
カウント
最初の行を削除した後、empテーブルには2つの行があります。 以下に示すように確認してください。
切り捨てる
このコマンドは、ドロップを無効にし、テーブルを再作成します。 truncate の構文は次のとおりです。
例
以下は、truncateコマンドの例です。 ここで、 emp テーブルを切り捨てました。
テーブルを切り捨てた後、スキャンコマンドを使用して確認します。 行がゼロのテーブルを取得します。
HBase-セキュリティ
HBaseのユーザーに権限を付与および取り消すことができます。 セキュリティのために、grant、revoke、user_permissionの3つのコマンドがあります。
付与
RWXCAのセットからユーザーにゼロ以上の特権を付与できます。
- R-読み取り特権を表します。
- W-書き込み特権を表します。
- X-実行特権を表します。
- C-作成特権を表します。
- A-管理者権限を表します。
以下に、「finddevguides」という名前のユーザーにすべての権限を付与する例を示します。
取り消す
次のコードは、「finddevguides」という名前のユーザーからすべての権限を取り消します。
user_permission
このコマンドは、特定のテーブルのすべての権限をリストするために使用されます。 user_permission の構文は次のとおりです。
次のコードは、「emp」テーブルのすべてのユーザー権限をリストしています。