HBase-クイックガイド

1970年以来、RDBMSはデータストレージとメンテナンス関連の問題のソリューションです。ビッグデータの出現後、企業はビッグデータを処理することの利点を認識し、Hadoopのようなソリューションを選択し始めました。

Hadoopはビッグデータを格納するために分散ファイルシステムを使用し、MapReduceはそれを処理します。Hadoopは、任意、半、または非構造化など、さまざまな形式の巨大なデータの保存と処理に優れています。

Hadoopの制限

Hadoopはバッチ処理のみを実行でき、データは順次にのみアクセスされます。つまり、最も単純なジョブであっても、データセット全体を検索する必要があります。

処理されたときの巨大なデータセットは、別の巨大なデータセットになります。これも順次処理する必要があります。この時点で、単一の時間単位で任意のデータポイントにアクセスするための新しいソリューションが必要です(ランダムアクセス)。

Hadoopランダムアクセスデータベース

HBase、Cassandra、couchDB、Dynamo、MongoDBなどのアプリケーションは、大量のデータを格納し、ランダムな方法でデータにアクセスするデータベースの一部です。

HBaseとは何ですか?

HBaseは、Hadoopファイルシステム上に構築された分散列指向データベースです。これはオープンソースプロジェクトであり、水平方向にスケーラブルです。

HBaseは、大量の構造化データへの迅速なランダムアクセスを提供するように設計されたGoogleの大きなテーブルに似たデータモデルです。これは、Hadoopファイルシステム(HDFS)によって提供されるフォールトトレランスを活用します。

これはHadoopエコシステムの一部であり、Hadoopファイルシステム内のデータへのランダムなリアルタイムの読み取り/書き込みアクセスを提供します。

データは、直接またはHBaseを介してHDFSに保存できます。データコンシューマーは、HBaseを使用してHDFSのデータをランダムに読み取り/アクセスします。HBaseはHadoopファイルシステムの上にあり、読み取りおよび書き込みアクセスを提供します。

HBaseとHDFS

HDFS HBase
HDFSは、大きなファイルを保存するのに適した分散ファイルシステムです。 HBaseは、HDFS上に構築されたデータベースです。
HDFSは、個々のレコードの高速ルックアップをサポートしていません。 HBaseは、より大きなテーブルの高速ルックアップを提供します。
高遅延のバッチ処理を提供します。バッチ処理の概念はありません。 数十億のレコードからの単一行への低遅延アクセス(ランダムアクセス)を提供します。
データへの順次アクセスのみを提供します。 HBaseは内部でハッシュテーブルを使用してランダムアクセスを提供し、データをインデックス付きHDFSファイルに保存してルックアップを高速化します。

HBaseのストレージメカニズム

HBaseは column-oriented databaseその中のテーブルは行でソートされています。テーブルスキーマは、キーと値のペアである列ファミリーのみを定義します。テーブルには複数の列ファミリーがあり、各列ファミリーには任意の数の列を含めることができます。後続の列値は、ディスクに連続して保存されます。テーブルの各セル値にはタイムスタンプがあります。要するに、HBaseでは:

  • テーブルは行のコレクションです。
  • 行は列ファミリーのコレクションです。
  • 列ファミリーは、列のコレクションです。
  • 列は、キーと値のペアのコレクションです。

以下に、HBaseのテーブルのスキーマの例を示します。

乱暴な カラムファミリー カラムファミリー カラムファミリー カラムファミリー
col1 col2 col3 col1 col2 col3 col1 col2 col3 col1 col2 col3
1
2
3

列指向および行指向

列指向データベースは、データテーブルをデータの行としてではなく、データの列のセクションとして格納するデータベースです。まもなく、列ファミリが作成されます。

行指向データベース 列指向データベース
オンライントランザクションプロセス(OLTP)に適しています。 オンライン分析処理(OLAP)に適しています。
このようなデータベースは、少数の行と列用に設計されています。 列指向データベースは、巨大なテーブル用に設計されています。

次の画像は、列指向データベースの列ファミリーを示しています。

HBaseとRDBMS

HBase RDBMS
HBaseはスキーマがなく、固定列スキーマの概念がありません。列ファミリーのみを定義します。 RDBMSは、テーブルの構造全体を記述するスキーマによって管理されます。
幅の広いテーブル用に作られています。HBaseは水平方向にスケーラブルです。 薄くて小さなテーブル用に作られています。スケーリングが難しい。
HBaseにはトランザクションはありません。 RDBMSはトランザクションです。
データが非正規化されています。 正規化されたデータがあります。
半構造化データと構造化データに適しています。 構造化データに適しています。

HBaseの機能

  • HBaseは線形にスケーラブルです。
  • 自動障害サポートがあります。
  • 一貫した読み取りと書き込みを提供します。
  • ソースと宛先の両方として、Hadoopと統合されます。
  • クライアント用の簡単なJavaAPIがあります。
  • クラスタ間でのデータレプリケーションを提供します。

HBaseを使用する場所

  • Apache HBaseは、ビッグデータへのランダムなリアルタイムの読み取り/書き込みアクセスを行うために使用されます。

  • コモディティハードウェアのクラスターの上に非常に大きなテーブルをホストします。

  • Apache HBaseは、GoogleのBigtableをモデルにした非リレーショナルデータベースです。BigtableはGoogleファイルシステム上で動作します。同様に、ApacheHBaseはHadoopとHDFS上で動作します。

HBaseのアプリケーション

  • 重いアプリケーションを作成する必要がある場合はいつでも使用されます。
  • HBaseは、利用可能なデータへの高速ランダムアクセスを提供する必要がある場合に常に使用されます。
  • Facebook、Twitter、Yahoo、Adobeなどの企業はHBaseを社内で使用しています。

HBaseの履歴

イベント
2006年11月 GoogleはBigTableに関する論文を発表しました。
2007年2月 最初のHBaseプロトタイプは、Hadoopの貢献として作成されました。
2007年10月 Hadoop0.15.0とともに最初に使用可能なHBaseがリリースされました。
2008年1月 HBaseはHadoopのサブプロジェクトになりました。
2008年10月 HBase0.18.1がリリースされました。
2009年1月 HBase0.19.0がリリースされました。
2009年9月 HBase0.20.0がリリースされました。
2010年5月 HBaseはApacheのトップレベルプロジェクトになりました。

HBaseでは、テーブルはリージョンに分割され、リージョンサーバーによって提供されます。リージョンは、列ファミリーによって「ストア」に垂直に分割されます。ストアはHDFSにファイルとして保存されます。以下に示すのは、HBaseのアーキテクチャーです。

Note: 「ストア」という用語は、ストレージ構造を説明するためにリージョンに使用されます。

HBaseには、クライアントライブラリ、マスターサーバー、リージョンサーバーの3つの主要なコンポーネントがあります。リージョンサーバーは、要件に応じて追加または削除できます。

MasterServer

マスターサーバー-

  • リージョンをリージョンサーバーに割り当て、このタスクのためにApacheZooKeeperの助けを借ります。

  • リージョンサーバー間でリージョンの負荷分散を処理します。ビジー状態のサーバーをアンロードし、リージョンを占有率の低いサーバーにシフトします。

  • 負荷分散をネゴシエートすることにより、クラスターの状態を維持します。

  • スキーマの変更や、テーブルや列ファミリーの作成などの他のメタデータ操作を担当します。

地域

リージョンは、リージョンサーバー間で分割および分散されたテーブルに他なりません。

リージョンサーバー

リージョンサーバーには、次のようなリージョンがあります。

  • クライアントと通信し、データ関連の操作を処理します。
  • その下のすべてのリージョンの読み取りおよび書き込み要求を処理します。
  • 領域サイズのしきい値に従って、領域のサイズを決定します。

リージョンサーバーを詳しく調べると、次のようにリージョンとストアが含まれています。

ストアには、メモリストアとHFilesが含まれています。Memstoreはキャッシュメモリのようなものです。HBaseに入力されたものはすべて、最初はここに保存されます。その後、データは転送され、ブロックとしてHfilesに保存され、memstoreがフラッシュされます。

Zookeeper

  • Zookeeperは、構成情報の保守、命名、分散同期の提供などのサービスを提供するオープンソースプロジェクトです。

  • Zookeeperには、さまざまなリージョンサーバーを表すエフェメラルノードがあります。マスターサーバーはこれらのノードを使用して、使用可能なサーバーを検出します。

  • 可用性に加えて、ノードはサーバー障害またはネットワークパーティションの追跡にも使用されます。

  • クライアントは、zookeeperを介してリージョンサーバーと通信します。

  • 疑似モードとスタンドアロンモードでは、HBase自体がzookeeperを処理します。

この章では、HBaseのインストール方法と初期構成方法について説明します。HBaseを続行するにはJavaとHadoopが必要であるため、JavaとHadoopをダウンロードしてシステムにインストールする必要があります。

インストール前のセットアップ

Linux環境にHadoopをインストールする前に、を使用してLinuxをセットアップする必要があります。 ssh(セキュアシェル)。Linux環境をセットアップするには、以下の手順に従ってください。

ユーザーの作成

まず、HadoopファイルシステムをUnixファイルシステムから分離するために、Hadoop用に別のユーザーを作成することをお勧めします。以下の手順に従って、ユーザーを作成します。

  • コマンド「su」を使用してルートを開きます。
  • コマンド「useraddusername」を使用して、rootアカウントからユーザーを作成します。
  • これで、コマンド「suusername」を使用して既存のユーザーアカウントを開くことができます。

Linuxターミナルを開き、次のコマンドを入力してユーザーを作成します。

$ su
password:
# useradd hadoop
# passwd hadoop
New passwd:
Retype new passwd

SSHセットアップとキー生成

起動、停止、分散デーモンシェル操作など、クラスターでさまざまな操作を実行するには、SSHセットアップが必要です。Hadoopのさまざまなユーザーを認証するには、Hadoopユーザーに公開鍵と秘密鍵のペアを提供し、それをさまざまなユーザーと共有する必要があります。

次のコマンドは、SSHを使用してキーと値のペアを生成するために使用されます。id_rsa.pubからauthorized_keysに公開鍵をコピーし、authorized_keysファイルにそれぞれ所有者、読み取り、および書き込みのアクセス許可を付与します。

$ ssh-keygen -t rsa
$ cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys $ chmod 0600 ~/.ssh/authorized_keys

sshを確認する

ssh localhost

Javaのインストール

JavaはHadoopとHBaseの主な前提条件です。まず、「java-version」を使用してシステム内のJavaの存在を確認する必要があります。javaversionコマンドの構文を以下に示します。

$ java -version

すべてが正常に機能する場合は、次の出力が得られます。

java version "1.7.0_71"
Java(TM) SE Runtime Environment (build 1.7.0_71-b13)
Java HotSpot(TM) Client VM (build 25.0-b02, mixed mode)

システムにJavaがインストールされていない場合は、以下の手順に従ってJavaをインストールしてください。

ステップ1

次のリンクOracleJavaにアクセスして、java(JDK <最新バージョン> -X64.tar.gz)をダウンロードします。

次に jdk-7u71-linux-x64.tar.gz システムにダウンロードされます。

ステップ2

通常、ダウンロードしたJavaファイルはDownloadsフォルダーにあります。それを確認し、抽出しますjdk-7u71-linux-x64.gz 次のコマンドを使用してファイルします。

$ cd Downloads/
$ ls jdk-7u71-linux-x64.gz $ tar zxf jdk-7u71-linux-x64.gz
$ ls
jdk1.7.0_71 jdk-7u71-linux-x64.gz

ステップ3

すべてのユーザーがJavaを使用できるようにするには、Javaを「/ usr / local /」の場所に移動する必要があります。rootを開き、次のコマンドを入力します。

$ su
password:
# mv jdk1.7.0_71 /usr/local/
# exit

ステップ4

設定用 PATH そして JAVA_HOME 変数については、次のコマンドを追加してください ~/.bashrc ファイル。

export JAVA_HOME=/usr/local/jdk1.7.0_71
export PATH= $PATH:$JAVA_HOME/bin

次に、すべての変更を現在実行中のシステムに適用します。

$ source ~/.bashrc

ステップ5

次のコマンドを使用して、Javaの代替を構成します。

# alternatives --install /usr/bin/java java usr/local/java/bin/java 2

# alternatives --install /usr/bin/javac javac usr/local/java/bin/javac 2

# alternatives --install /usr/bin/jar jar usr/local/java/bin/jar 2


# alternatives --set java usr/local/java/bin/java

# alternatives --set javac usr/local/java/bin/javac

# alternatives --set jar usr/local/java/bin/jar

次に、 java -version 上で説明したように端末からのコマンド。

Hadoopのダウンロード

Javaをインストールした後、Hadoopをインストールする必要があります。まず、以下に示すように、「Hadoopバージョン」コマンドを使用してHadoopの存在を確認します。

hadoop version

すべてが正常に機能する場合は、次の出力が得られます。

Hadoop 2.6.0
Compiled by jenkins on 2014-11-13T21:10Z
Compiled with protoc 2.5.0
From source with checksum 18e43357c8f927c0695f1e9522859d6a
This command was run using
/home/hadoop/hadoop/share/hadoop/common/hadoop-common-2.6.0.jar

システムがHadoopを見つけられない場合は、システムにHadoopをダウンロードしてください。これを行うには、以下のコマンドに従います。

次のコマンドを使用して、Apache SoftwareFoundationからhadoop-2.6.0をダウンロードして抽出します。

$ su
password:
# cd /usr/local
# wget http://mirrors.advancedhosters.com/apache/hadoop/common/hadoop-
2.6.0/hadoop-2.6.0-src.tar.gz
# tar xzf hadoop-2.6.0-src.tar.gz
# mv hadoop-2.6.0/* hadoop/
# exit

Hadoopのインストール

必要なモードのいずれかでHadoopをインストールします。ここでは、疑似分散モードでのHBase機能を示しているため、Hadoopを疑似分散モードでインストールします。

インストールには次の手順を使用します Hadoop 2.4.1

ステップ1-Hadoopのセットアップ

次のコマンドをに追加することで、Hadoop環境変数を設定できます。 ~/.bashrc ファイル。

export HADOOP_HOME=/usr/local/hadoop
export HADOOP_MAPRED_HOME=$HADOOP_HOME export HADOOP_COMMON_HOME=$HADOOP_HOME
export HADOOP_HDFS_HOME=$HADOOP_HOME export YARN_HOME=$HADOOP_HOME
export HADOOP_COMMON_LIB_NATIVE_DIR=$HADOOP_HOME/lib/native export PATH=$PATH:$HADOOP_HOME/sbin:$HADOOP_HOME/bin
export HADOOP_INSTALL=$HADOOP_HOME

次に、すべての変更を現在実行中のシステムに適用します。

$ source ~/.bashrc

ステップ2-Hadoop構成

すべてのHadoop構成ファイルは、「$ HADOOP_HOME / etc / hadoop」の場所にあります。Hadoopインフラストラクチャに応じて、これらの構成ファイルを変更する必要があります。

$ cd $HADOOP_HOME/etc/hadoop

JavaでHadoopプログラムを開発するには、Java環境変数をリセットする必要があります。 hadoop-env.sh 置き換えることによってファイル JAVA_HOME システム内のJavaの場所を含む値。

export JAVA_HOME=/usr/local/jdk1.7.0_71

Hadoopを構成するには、以下のファイルを編集する必要があります。

core-site.xml

ザ・ core-site.xml fileには、Hadoopインスタンスに使用されるポート番号、ファイルシステムに割り当てられたメモリ、データを格納するためのメモリ制限、読み取り/書き込みバッファのサイズなどの情報が含まれています。

core-site.xmlを開き、<configuration>タグと</ configuration>タグの間に次のプロパティを追加します。

<configuration>
   <property>
      <name>fs.default.name</name>
      <value>hdfs://localhost:9000</value>
   </property>
</configuration>

hdfs-site.xml

ザ・ hdfs-site.xml ファイルには、Hadoopインフラストラクチャを格納するローカルファイルシステムのレプリケーションデータの値、ネームノードパス、データノードパスなどの情報が含まれています。

以下のデータを想定します。

dfs.replication (data replication value) = 1
(In the below given path /hadoop/ is the user name.
hadoopinfra/hdfs/namenode is the directory created by hdfs file system.)

namenode path = //home/hadoop/hadoopinfra/hdfs/namenode
(hadoopinfra/hdfs/datanode is the directory created by hdfs file system.)

datanode path = //home/hadoop/hadoopinfra/hdfs/datanode

このファイルを開き、<configuration>、</ configuration>タグの間に次のプロパティを追加します。

<configuration>
   <property>
      <name>dfs.replication</name >
      <value>1</value>
   </property>
	
   <property>
      <name>dfs.name.dir</name>
      <value>file:///home/hadoop/hadoopinfra/hdfs/namenode</value>
   </property>
	
   <property>
      <name>dfs.data.dir</name>
      <value>file:///home/hadoop/hadoopinfra/hdfs/datanode</value>
   </property>
</configuration>

Note: 上記のファイルでは、すべてのプロパティ値がユーザー定義であり、Hadoopインフラストラクチャに応じて変更を加えることができます。

yarn-site.xml

このファイルは、Hadoopにyarnを構成するために使用されます。ヤーンサイト.xmlファイルを開き、<configuration $ gt;、</ configuration $ gt;の間に次のプロパティを追加します。このファイルのタグ。

<configuration>
   <property>
      <name>yarn.nodemanager.aux-services</name>
      <value>mapreduce_shuffle</value>
   </property>
</configuration>

mapred-site.xml

このファイルは、使用しているMapReduceフレームワークを指定するために使用されます。デフォルトでは、Hadoopにはyarn-site.xmlのテンプレートが含まれています。まず、ファイルをコピーする必要がありますmapred-site.xml.templatemapred-site.xml 次のコマンドを使用してファイルします。

$ cp mapred-site.xml.template mapred-site.xml

開いた mapred-site.xml ファイルを作成し、<configuration>タグと</ configuration>タグの間に次のプロパティを追加します。

<configuration>
   <property>
      <name>mapreduce.framework.name</name>
      <value>yarn</value>
   </property>
</configuration>

Hadoopのインストールの確認

次の手順は、Hadoopのインストールを確認するために使用されます。

ステップ1-名前ノードの設定

次のようにコマンド「hdfsnamenode-format」を使用してnamenodeを設定します。

$ cd ~ $ hdfs namenode -format

期待される結果は以下のとおりです。

10/24/14 21:30:55 INFO namenode.NameNode: STARTUP_MSG:
/************************************************************
STARTUP_MSG: Starting NameNode
STARTUP_MSG: host = localhost/192.168.1.11
STARTUP_MSG: args = [-format]
STARTUP_MSG: version = 2.4.1
...
...
10/24/14 21:30:56 INFO common.Storage: Storage directory
/home/hadoop/hadoopinfra/hdfs/namenode has been successfully formatted.
10/24/14 21:30:56 INFO namenode.NNStorageRetentionManager: Going to
retain 1 images with txid >= 0
10/24/14 21:30:56 INFO util.ExitUtil: Exiting with status 0
10/24/14 21:30:56 INFO namenode.NameNode: SHUTDOWN_MSG:
/************************************************************
SHUTDOWN_MSG: Shutting down NameNode at localhost/192.168.1.11
************************************************************/

ステップ2-Hadoopdfsを確認する

次のコマンドは、dfsを開始するために使用されます。このコマンドを実行すると、Hadoopファイルシステムが起動します。

$ start-dfs.sh

期待される出力は次のとおりです。

10/24/14 21:37:56
Starting namenodes on [localhost]
localhost: starting namenode, logging to /home/hadoop/hadoop-
2.4.1/logs/hadoop-hadoop-namenode-localhost.out
localhost: starting datanode, logging to /home/hadoop/hadoop-
2.4.1/logs/hadoop-hadoop-datanode-localhost.out
Starting secondary namenodes [0.0.0.0]

ステップ3-ヤーンスクリプトの検証

次のコマンドを使用して、yarnスクリプトを開始します。このコマンドを実行すると、yarnデーモンが起動します。

$ start-yarn.sh

期待される出力は次のとおりです。

starting yarn daemons
starting resourcemanager, logging to /home/hadoop/hadoop-
2.4.1/logs/yarn-hadoop-resourcemanager-localhost.out
localhost: starting nodemanager, logging to /home/hadoop/hadoop-
2.4.1/logs/yarn-hadoop-nodemanager-localhost.out

ステップ4-ブラウザでHadoopにアクセスする

Hadoopにアクセスするためのデフォルトのポート番号は50070です。ブラウザーでHadoopサービスを取得するには、次のURLを使用します。

http://localhost:50070

ステップ5-クラスターのすべてのアプリケーションを確認する

クラスタのすべてのアプリケーションにアクセスするためのデフォルトのポート番号は8088です。このサービスにアクセスするには、次のURLを使用してください。

http://localhost:8088/

HBaseのインストール

HBaseは、スタンドアロンモード、疑似分散モード、および完全分散モードの3つのモードのいずれかでインストールできます。

スタンドアロンモードでのHBaseのインストール

HBaseフォームの最新の安定バージョンをダウンロードします http://www.interior-dsgn.com/apache/hbase/stable/「wget」コマンドを使用し、tar「zxvf」コマンドを使用して抽出します。次のコマンドを参照してください。

$cd usr/local/ $wget http://www.interior-dsgn.com/apache/hbase/stable/hbase-0.98.8-
hadoop2-bin.tar.gz
$tar -zxvf hbase-0.98.8-hadoop2-bin.tar.gz

以下に示すように、スーパーユーザーモードに移行し、HBaseフォルダーを/ usr / localに移動します。

$su
$password: enter your password here
mv hbase-0.99.1/* Hbase/

スタンドアロンモードでのHBaseの構成

HBaseに進む前に、次のファイルを編集してHBaseを構成する必要があります。

hbase-env.sh

HBaseのJavaホームを設定して開きます hbase-env.shconfフォルダーからのファイル。以下に示すように、JAVA_HOME環境変数を編集し、既存のパスを現在のJAVA_HOME変数に変更します。

cd /usr/local/Hbase/conf
gedit hbase-env.sh

これにより、HBaseのenv.shファイルが開きます。今、既存のものを交換してくださいJAVA_HOME 以下に示すように、現在の値との値。

export JAVA_HOME=/usr/lib/jvm/java-1.7.0

hbase-site.xml

これはHBaseのメイン構成ファイルです。/ usr / local / HBaseのHBaseホームフォルダーを開いて、データディレクトリを適切な場所に設定します。confフォルダー内に、いくつかのファイルがあります。hbase-site.xml 以下に示すようにファイルします。

#cd /usr/local/HBase/
#cd conf
# gedit hbase-site.xml

内部 hbase-site.xmlファイルには、<configuration>タグと</ configuration>タグがあります。それらの中で、以下に示すように、「hbase.rootdir」という名前のプロパティキーの下にHBaseディレクトリを設定します。

<configuration>
   //Here you have to set the path where you want HBase to store its files.
   <property>
      <name>hbase.rootdir</name>
      <value>file:/home/hadoop/HBase/HFiles</value>
   </property>
	
   //Here you have to set the path where you want HBase to store its built in zookeeper  files.
   <property>
      <name>hbase.zookeeper.property.dataDir</name>
      <value>/home/hadoop/zookeeper</value>
   </property>
</configuration>

これで、HBaseのインストールと構成の部分が正常に完了します。を使用してHBaseを起動できますstart-hbase.shHBaseのbinフォルダーで提供されるスクリプト。そのためには、HBaseホームフォルダーを開き、以下に示すようにHBase開始スクリプトを実行します。

$cd /usr/local/HBase/bin
$./start-hbase.sh

すべてがうまくいけば、HBase開始スクリプトを実行しようとすると、HBaseが開始したことを示すメッセージが表示されます。

starting master, logging to /usr/local/HBase/bin/../logs/hbase-tpmaster-localhost.localdomain.out

疑似分散モードでのHBaseのインストール

ここで、HBaseが疑似分散モードでどのようにインストールされているかを確認しましょう。

HBaseの構成

HBaseに進む前に、ローカルシステムまたはリモートシステムでHadoopとHDFSを構成し、それらが実行されていることを確認してください。HBaseが実行されている場合は、停止します。

hbase-site.xml

hbase-site.xmlファイルを編集して、次のプロパティを追加します。

<property>
   <name>hbase.cluster.distributed</name>
   <value>true</value>
</property>

どのモードでHBaseを実行する必要があるかについて説明します。ローカルファイルシステムの同じファイルで、hdfs://// URI構文を使用して、HDFSインスタンスアドレスであるhbase.rootdirを変更します。ローカルホストのポート8030でHDFSを実行しています。

<property>
   <name>hbase.rootdir</name>
   <value>hdfs://localhost:8030/hbase</value>
</property>

HBaseの起動

構成が終了したら、HBaseホームフォルダーを参照し、次のコマンドを使用してHBaseを起動します。

$cd /usr/local/HBase
$bin/start-hbase.sh

Note: HBaseを起動する前に、Hadoopが実行されていることを確認してください。

HDFSでのHBaseディレクトリの確認

HBaseはHDFSにディレクトリを作成します。作成されたディレクトリを表示するには、Hadoop binを参照し、次のコマンドを入力します。

$ ./bin/hadoop fs -ls /hbase

すべてがうまくいけば、次の出力が得られます。

Found 7 items
drwxr-xr-x - hbase users 0 2014-06-25 18:58 /hbase/.tmp
drwxr-xr-x - hbase users 0 2014-06-25 21:49 /hbase/WALs
drwxr-xr-x - hbase users 0 2014-06-25 18:48 /hbase/corrupt
drwxr-xr-x - hbase users 0 2014-06-25 18:58 /hbase/data
-rw-r--r-- 3 hbase users 42 2014-06-25 18:41 /hbase/hbase.id
-rw-r--r-- 3 hbase users 7 2014-06-25 18:41 /hbase/hbase.version
drwxr-xr-x - hbase users 0 2014-06-25 21:49 /hbase/oldWALs

マスターの開始と停止

「local-master-backup.sh」を使用すると、最大10台のサーバーを起動できます。HBase、masterのホームフォルダーを開き、次のコマンドを実行して起動します。

$ ./bin/local-master-backup.sh 2 4

バックアップマスターを強制終了するには、そのプロセスIDが必要です。これは、という名前のファイルに保存されます。 “/tmp/hbase-USER-X-master.pid.” 次のコマンドを使用して、バックアップマスターを強制終了できます。

$ cat /tmp/hbase-user-1-master.pid |xargs kill -9

RegionServerの開始と停止

次のコマンドを使用して、単一のシステムから複数のリージョンサーバーを実行できます。

$ .bin/local-regionservers.sh start 2 3

リージョンサーバーを停止するには、次のコマンドを使用します。

$ .bin/local-regionservers.sh stop 3

 

HBaseShellを起動しています

HBaseを正常にインストールした後、HBaseシェルを起動できます。以下に、HBaseシェルを開始するために従う必要のある一連の手順を示します。ターミナルを開き、スーパーユーザーとしてログインします。

Hadoopファイルシステムを起動します

以下に示すように、Hadoopホームsbinフォルダーを参照し、Hadoopファイルシステムを起動します。

$cd $HADOOP_HOME/sbin
$start-all.sh

HBaseを起動します

HBaseルートディレクトリのbinフォルダーを参照し、HBaseを起動します。

$cd /usr/local/HBase
$./bin/start-hbase.sh

HBaseマスターサーバーを起動します

これは同じディレクトリになります。以下のように起動します。

$./bin/local-master-backup.sh start 2 (number signifies specific
server.)

開始リージョン

以下に示すように、リージョンサーバーを起動します。

$./bin/./local-regionservers.sh start 3

HBaseシェルを起動します

次のコマンドを使用して、HBaseシェルを起動できます。

$cd bin
$./hbase shell

これにより、以下に示すようにHBaseシェルプロンプトが表示されます。

2014-12-09 14:24:27,526 INFO [main] Configuration.deprecation:
hadoop.native.lib is deprecated. Instead, use io.native.lib.available
HBase Shell; enter 'help<RETURN>' for list of supported commands.
Type "exit<RETURN>" to leave the HBase Shell
Version 0.98.8-hadoop2, r6cfc8d064754251365e070a10a82eb169956d5fe, Fri
Nov 14 18:26:29 PST 2014

hbase(main):001:0>

HBaseWebインターフェース

HBaseのWebインターフェースにアクセスするには、ブラウザーに次のURLを入力します。

http://localhost:60010

このインターフェースには、現在実行中のリージョンサーバー、バックアップマスター、およびHBaseテーブルが一覧表示されます。

HBaseリージョンサーバーとバックアップマスター

HBaseテーブル

Java環境の設定

Javaライブラリを使用してHBaseと通信することもできますが、Java APIを使用してHBaseにアクセスする前に、それらのライブラリのクラスパスを設定する必要があります。

クラスパスの設定

プログラミングを続行する前に、クラスパスをHBaseライブラリに設定します。 .bashrcファイル。開いた.bashrc 以下に示すように、いずれかのエディターで。

$ gedit ~/.bashrc

以下に示すように、HBaseライブラリ(HBaseのlibフォルダー)のクラスパスを設定します。

export CLASSPATH = $CLASSPATH://home/hadoop/hbase/lib/*

これは、JavaAPIを使用してHBaseにアクセスする際の「クラスが見つかりません」という例外を防ぐためです。

この章では、HBaseに付属するHBaseインタラクティブシェルを起動する方法について説明します。

HBaseシェル

HBaseには、HBaseと通信できるシェルが含まれています。HBaseは、Hadoopファイルシステムを使用してデータを保存します。マスターサーバーとリージョンサーバーがあります。データストレージは、リージョン(テーブル)の形式になります。これらのリージョンは分割され、リージョンサーバーに保存されます。

マスターサーバーはこれらのリージョンサーバーを管理し、これらのタスクはすべてHDFSで実行されます。以下に、HBaseシェルでサポートされているコマンドの一部を示します。

一般的なコマンド

  • 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 Admin API-上記のすべてのコマンドの前に、Javaはプログラミングを通じてDDL機能を実現するための管理APIを提供します。下org.apache.hadoop.hbase.client パッケージ、HBaseAdminとHTableDescriptorは、DDL機能を提供するこのパッケージの2つの重要なクラスです。

データ操作言語

  • put -特定のテーブルの指定された行の指定された列にセル値を配置します。

  • get -行またはセルの内容をフェッチします。

  • delete -テーブルのセル値を削除します。

  • deleteall -指定された行のすべてのセルを削除します。

  • scan -テーブルデータをスキャンして返します。

  • count -テーブルの行数をカウントして返します。

  • truncate -指定されたテーブルを無効化、削除、および再作成します。

  • Java client API -上記のすべてのコマンドの前に、JavaはDML機能を実現するためのクライアントAPIを提供します。 CRUD org.apache.hadoop.hbase.clientパッケージの下で、プログラミングによる(Create Retrieve Update Delete)操作など。 HTable Put そして Get このパッケージの重要なクラスです。

HBaseシェルの起動

HBaseシェルにアクセスするには、HBaseホームフォルダーに移動する必要があります。

cd /usr/localhost/
cd Hbase

を使用してHBaseインタラクティブシェルを開始できます “hbase shell” 以下に示すコマンド。

./bin/hbase shell

システムにHBaseが正常にインストールされると、以下に示すようにHBaseシェルプロンプトが表示されます。

HBase Shell; enter 'help<RETURN>' for list of supported commands.
Type "exit<RETURN>" to leave the HBase Shell
Version 0.94.23, rf42302b28aceaab773b15f234aa8718fff7eea3c, Wed Aug 27
00:54:09 UTC 2014

hbase(main):001:0>

インタラクティブシェルコマンドをいつでも終了するには、exitと入力するか、<ctrl + c>を使用します。先に進む前に、シェルの機能を確認してください。使用list この目的のためのコマンド。 ListHBase内のすべてのテーブルのリストを取得するために使用されるコマンドです。まず、以下に示すように、このコマンドを使用して、システムへのHBaseのインストールと構成を確認します。

hbase(main):001:0> list

このコマンドを入力すると、次の出力が得られます。

hbase(main):001:0> list
TABLE

HBaseの一般的なコマンドは、status、version、table_help、およびwhoamiです。この章では、これらのコマンドについて説明します。

状態

このコマンドは、システムで実行されているサーバーの詳細を含むシステムのステータスを返します。その構文は次のとおりです。

hbase(main):009:0> status

このコマンドを実行すると、次の出力が返されます。

hbase(main):009:0> status
3 servers, 0 dead, 1.3333 average load

バージョン

このコマンドは、システムで使用されているHBaseのバージョンを返します。その構文は次のとおりです。

hbase(main):010:0> version

このコマンドを実行すると、次の出力が返されます。

hbase(main):009:0> version
0.98.8-hadoop2, r6cfc8d064754251365e070a10a82eb169956d5fe, Fri Nov 14
18:26:29 PST 2014

table_help

このコマンドは、テーブル参照コマンドの使用方法と使用方法をガイドします。このコマンドを使用するための構文を以下に示します。

hbase(main):02:0> table_help

このコマンドを使用すると、テーブル関連のコマンドのヘルプトピックが表示されます。以下に、このコマンドの部分的な出力を示します。

hbase(main):002:0> table_help
Help for table-reference commands.
You can either create a table via 'create' and then manipulate the table
via commands like 'put', 'get', etc.
See the standard help information for how to use each of these commands.
However, as of 0.96, you can also get a reference to a table, on which
you can invoke commands.
For instance, you can get create a table and keep around a reference to
it via:
 hbase> t = create 't', 'cf'…...

私は誰

このコマンドは、HBaseのユーザー詳細を返します。このコマンドを実行すると、以下に示すように現在のHBaseユーザーを返します。

hbase(main):008:0> whoami
hadoop (auth:SIMPLE)
groups: hadoop

HBaseはJavaで記述されているため、HBaseと通信するためのJavaAPIを提供します。Java APIは、HBaseと通信するための最速の方法です。以下に示すのは、テーブルの管理に使用されるタスクをカバーする参照されたjava AdminAPIです。

クラスHBaseAdmin

HBaseAdmin管理者を表すクラスです。このクラスはに属しますorg.apache.hadoop.hbase.clientパッケージ。このクラスを使用すると、管理者のタスクを実行できます。Adminのインスタンスは次を使用して取得できますConnection.getAdmin() 方法。

メソッドと説明

S.No. メソッドと説明
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. コンストラクターと要約
1

HTableDescriptor(TableName name)

TableNameオブジェクトを指定するテーブル記述子を作成します。

メソッドと説明

S.No. メソッドと説明
1

HTableDescriptor addFamily(HColumnDescriptor family)

指定された記述子に列ファミリーを追加します

HBaseシェルを使用したテーブルの作成

を使用してテーブルを作成できます createコマンドでは、ここでテーブル名と列ファミリ名を指定する必要があります。ザ・syntax HBaseシェルでテーブルを作成する方法を以下に示します。

create ‘<table name>’,’<column family>’

以下に、empという名前のテーブルのサンプルスキーマを示します。「個人データ」と「専門家データ」の2つの列ファミリーがあります。

行キー 個人データ 専門的なデータ

以下に示すように、HBaseシェルでこのテーブルを作成できます。

hbase(main):002:0> create 'emp', 'personal data', 'professional data'

そして、それはあなたに次の出力を与えるでしょう。

0 row(s) in 1.1300 seconds
=> Hbase::Table - emp

検証

テーブルが作成されているかどうかは、 list以下に示すコマンド。ここでは、作成されたempテーブルを確認できます。

hbase(main):002:0> list
TABLE 
emp
2 row(s) in 0.0340 seconds

JavaAPIを使用したテーブルの作成

HBaseでテーブルを作成するには、 createTable() の方法 HBaseAdminクラス。このクラスはに属しますorg.apache.hadoop.hbase.clientパッケージ。以下に、JavaAPIを使用してHBaseでテーブルを作成する手順を示します。

ステップ1:HBaseAdminをインスタンス化する

このクラスはパラメーターとしてConfigurationオブジェクトを必要とするため、最初にConfigurationクラスをインスタンス化し、このインスタンスをHBaseAdminに渡します。

Configuration conf = HBaseConfiguration.create();
HBaseAdmin admin = new HBaseAdmin(conf);

ステップ2:TableDescriptorを作成する

HTableDescriptor に属するクラスです org.apache.hadoop.hbaseクラス。このクラスは、テーブル名と列ファミリーのコンテナーのようなものです。

//creating table descriptor
HTableDescriptor table = new HTableDescriptor(toBytes("Table name"));

//creating column family descriptor
HColumnDescriptor family = new HColumnDescriptor(toBytes("column family"));

//adding coloumn family to HTable
table.addFamily(family);

ステップ3:管理者を通じて実行する

を使用して createTable() の方法 HBaseAdmin クラスでは、作成したテーブルを管理者モードで実行できます。

admin.createTable(table);

以下に示すのは、adminを介してテーブルを作成するための完全なプログラムです。

import java.io.IOException;

import org.apache.hadoop.hbase.HBaseConfiguration;
import org.apache.hadoop.hbase.HColumnDescriptor;
import org.apache.hadoop.hbase.HTableDescriptor;
import org.apache.hadoop.hbase.client.HBaseAdmin;
import org.apache.hadoop.hbase.TableName;

import org.apache.hadoop.conf.Configuration;

public class CreateTable {
      
   public static void main(String[] args) throws IOException {

      // Instantiating configuration class
      Configuration con = HBaseConfiguration.create();

      // Instantiating HbaseAdmin class
      HBaseAdmin admin = new HBaseAdmin(con);

      // Instantiating table descriptor class
      HTableDescriptor tableDescriptor = new
      HTableDescriptor(TableName.valueOf("emp"));

      // Adding column families to table descriptor
      tableDescriptor.addFamily(new HColumnDescriptor("personal"));
      tableDescriptor.addFamily(new HColumnDescriptor("professional"));

      // Execute the table through admin
      admin.createTable(tableDescriptor);
      System.out.println(" Table created ");
   }
}

上記のプログラムを以下のようにコンパイルして実行します。

$javac CreateTable.java
$java CreateTable

以下が出力になります。

Table created

HBaseシェルを使用したテーブルの一覧表示

listは、HBase内のすべてのテーブルを一覧表示するために使用されるコマンドです。以下に、listコマンドの構文を示します。

hbase(main):001:0 > list

このコマンドを入力してHBaseプロンプトで実行すると、以下に示すように、HBase内のすべてのテーブルのリストが表示されます。

hbase(main):001:0> list
TABLE
emp

ここでは、empという名前のテーブルを確認できます。

JavaAPIを使用したテーブルの一覧表示

以下の手順に従って、JavaAPIを使用してHBaseからテーブルのリストを取得します。

ステップ1

あなたはというメソッドを持っています listTables() クラスで HBaseAdminHBase内のすべてのテーブルのリストを取得します。このメソッドは、HTableDescriptor オブジェクト。

//creating a configuration object
Configuration conf = HBaseConfiguration.create();

//Creating HBaseAdmin object
HBaseAdmin admin = new HBaseAdmin(conf);

//Getting all the list of tables using HBaseAdmin object
HTableDescriptor[] tableDescriptor = admin.listTables();

ステップ2

あなたはの長さを得ることができます HTableDescriptor[] の長さ変数を使用した配列 HTableDescriptorクラス。を使用して、このオブジェクトからテーブルの名前を取得しますgetNameAsString()方法。これらを使用して「for」ループを実行し、HBaseのテーブルのリストを取得します。

以下に示すのは、JavaAPIを使用してHBaseのすべてのテーブルを一覧表示するプログラムです。

import java.io.IOException;

import org.apache.hadoop.conf.Configuration;

import org.apache.hadoop.hbase.HBaseConfiguration;
import org.apache.hadoop.hbase.HTableDescriptor;
import org.apache.hadoop.hbase.MasterNotRunningException;
import org.apache.hadoop.hbase.client.HBaseAdmin;

public class ListTables {

   public static void main(String args[])throws MasterNotRunningException, IOException{

      // Instantiating a configuration class
      Configuration conf = HBaseConfiguration.create();

      // Instantiating HBaseAdmin class
      HBaseAdmin admin = new HBaseAdmin(conf);

      // Getting all the list of tables using HBaseAdmin object
      HTableDescriptor[] tableDescriptor = admin.listTables();

      // printing all the table names.
      for (int i=0; i<tableDescriptor.length;i++ ){
         System.out.println(tableDescriptor[i].getNameAsString());
      }
   
   }
}

上記のプログラムを以下のようにコンパイルして実行します。

$javac ListTables.java
$java ListTables

以下が出力になります。

User
emp

HBaseシェルを使用したテーブルの無効化

テーブルを削除したり、その設定を変更したりするには、最初にdisableコマンドを使用してテーブルを無効にする必要があります。enableコマンドを使用して再度有効にすることができます。

以下に、テーブルを無効にするための構文を示します。

disable ‘emp’

以下に、テーブルを無効にする方法を示す例を示します。

hbase(main):025:0> disable 'emp'
0 row(s) in 1.2760 seconds

検証

テーブルを無効にした後でも、次の方法でテーブルの存在を感じることができます。 list そして existsコマンド。スキャンできません。次のエラーが発生します。

hbase(main):028:0> scan 'emp'
ROW         COLUMN + CELL
ERROR: emp is disabled.

無効になっています

このコマンドは、テーブルが無効になっているかどうかを確認するために使用されます。構文は次のとおりです。

hbase> is_disabled 'table name'

次の例では、empという名前のテーブルが無効になっているかどうかを確認します。無効になっている場合はtrueを返し、無効になっていない場合はfalseを返します。

hbase(main):031:0> is_disabled 'emp'
true
0 row(s) in 0.0440 seconds

すべて無効にする

このコマンドは、指定された正規表現に一致するすべてのテーブルを無効にするために使用されます。の構文disable_all コマンドは以下のとおりです。

hbase> disable_all 'r.*'

HBaseに5つのテーブル、つまりraja、rajani、rajendra、rajesh、およびrajuがあるとします。次のコードは、で始まるすべてのテーブルを無効にしますraj.

hbase(main):002:07> disable_all 'raj.*'
raja
rajani
rajendra
rajesh
raju
Disable the above 5 tables (y/n)?
y
5 tables successfully disabled

JavaAPIを使用してテーブルを無効にする

テーブルが無効になっているかどうかを確認するには、 isTableDisabled() メソッドが使用され、テーブルを無効にするには、 disableTable()メソッドが使用されます。これらのメソッドはに属しますHBaseAdminクラス。以下の手順に従って、テーブルを無効にします。

ステップ1

インスタンス化 HBaseAdmin 以下に示すクラス。

// Creating configuration object
Configuration conf = HBaseConfiguration.create();

// Creating HBaseAdmin object
HBaseAdmin admin = new HBaseAdmin(conf);

ステップ2

を使用してテーブルが無効になっているかどうかを確認します isTableDisabled() 以下に示す方法。

Boolean b = admin.isTableDisabled("emp");

ステップ3

テーブルが無効になっていない場合は、以下に示すように無効にします。

if(!b){
   admin.disableTable("emp");
   System.out.println("Table disabled");
}

以下に、テーブルが無効になっているかどうかを確認するための完全なプログラムを示します。そうでない場合は、それを無効にする方法。

import java.io.IOException;

import org.apache.hadoop.conf.Configuration;

import org.apache.hadoop.hbase.HBaseConfiguration;
import org.apache.hadoop.hbase.MasterNotRunningException;
import org.apache.hadoop.hbase.client.HBaseAdmin;

public class DisableTable{

   public static void main(String args[]) throws MasterNotRunningException, IOException{

      // Instantiating configuration class
      Configuration conf = HBaseConfiguration.create();
 
      // Instantiating HBaseAdmin class
      HBaseAdmin admin = new HBaseAdmin(conf);

      // Verifying weather the table is disabled
      Boolean bool = admin.isTableDisabled("emp");
      System.out.println(bool);

      // Disabling the table using HBaseAdmin object
      if(!bool){
         admin.disableTable("emp");
         System.out.println("Table disabled");
      }
   }
}

上記のプログラムを以下のようにコンパイルして実行します。

$javac DisableTable.java
$java DsiableTable

以下が出力になります。

false
Table disabled

HBaseシェルを使用したテーブルの有効化

テーブルを有効にする構文:

enable ‘emp’

以下に、テーブルを有効にする例を示します。

hbase(main):005:0> enable 'emp'
0 row(s) in 0.4580 seconds

検証

テーブルを有効にした後、それをスキャンします。スキーマが表示されている場合は、テーブルが正常に有効化されています。

hbase(main):006:0> scan 'emp'

   ROW                        COLUMN + CELL

1 column = personal data:city, timestamp = 1417516501, value = hyderabad

1 column = personal data:name, timestamp = 1417525058, value = ramu

1 column = professional data:designation, timestamp = 1417532601, value = manager

1 column = professional data:salary, timestamp = 1417524244109, value = 50000

2 column = personal data:city, timestamp = 1417524574905, value = chennai

2 column = personal data:name, timestamp = 1417524556125, value = ravi

2 column = professional data:designation, timestamp = 14175292204, value = sr:engg

2 column = professional data:salary, timestamp = 1417524604221, value = 30000 

3 column = personal data:city, timestamp = 1417524681780, value = delhi

3 column = personal data:name, timestamp = 1417524672067, value = rajesh

3 column = professional data:designation, timestamp = 14175246987, value = jr:engg

3 column = professional data:salary, timestamp = 1417524702514, value = 25000

3 row(s) in 0.0400 seconds

有効になっています

このコマンドは、テーブルが有効になっているかどうかを確認するために使用されます。その構文は次のとおりです。

hbase> is_enabled 'table name'

次のコードは、 emp有効になっています。有効になっている場合はtrueを返し、有効になっていない場合はfalseを返します。

hbase(main):031:0> is_enabled 'emp'
true
0 row(s) in 0.0440 seconds

JavaAPIを使用してテーブルを有効にする

テーブルが有効になっているかどうかを確認するには、 isTableEnabled()メソッドが使用されます。テーブルを有効にするには、enableTable()メソッドが使用されます。これらのメソッドはに属しますHBaseAdminクラス。以下の手順に従って、テーブルを有効にします。

ステップ1

インスタンス化 HBaseAdmin 以下に示すクラス。

// Creating configuration object
Configuration conf = HBaseConfiguration.create();

// Creating HBaseAdmin object
HBaseAdmin admin = new HBaseAdmin(conf);

ステップ2

を使用してテーブルが有効になっているかどうかを確認します isTableEnabled() 以下に示す方法。

Boolean bool = admin.isTableEnabled("emp");

ステップ3

テーブルが無効になっていない場合は、以下に示すように無効にします。

if(!bool){
   admin.enableTable("emp");
   System.out.println("Table enabled");
}

以下に示すのは、テーブルが有効になっているかどうかを確認し、有効になっていない場合は有効にする方法を確認するための完全なプログラムです。

import java.io.IOException;

import org.apache.hadoop.conf.Configuration;

import org.apache.hadoop.hbase.HBaseConfiguration;
import org.apache.hadoop.hbase.MasterNotRunningException;
import org.apache.hadoop.hbase.client.HBaseAdmin;

public class EnableTable{

   public static void main(String args[]) throws MasterNotRunningException, IOException{

      // Instantiating configuration class
      Configuration conf = HBaseConfiguration.create();

      // Instantiating HBaseAdmin class
      HBaseAdmin admin = new HBaseAdmin(conf);

      // Verifying whether the table is disabled
      Boolean bool = admin.isTableEnabled("emp");
      System.out.println(bool);

      // Enabling the table using HBaseAdmin object
      if(!bool){
         admin.enableTable("emp");
         System.out.println("Table Enabled");
      }
   }
}

上記のプログラムを以下のようにコンパイルして実行します。

$javac EnableTable.java
$java EnableTable

以下が出力になります。

false
Table Enabled

説明する

このコマンドは、テーブルの説明を返します。その構文は次のとおりです。

hbase> describe 'table name'

以下に示すのは、でのdescribeコマンドの出力です。 emp テーブル。

hbase(main):006:0> describe 'emp'
   DESCRIPTION
      ENABLED
      
'emp', {NAME ⇒ 'READONLY', DATA_BLOCK_ENCODING ⇒ 'NONE', BLOOMFILTER
⇒ 'ROW', REPLICATION_SCOPE ⇒ '0', COMPRESSION ⇒ 'NONE', VERSIONS ⇒
'1', TTL true

⇒ 'FOREVER', MIN_VERSIONS ⇒ '0', KEEP_DELETED_CELLS ⇒ 'false',
BLOCKSIZE ⇒ '65536', IN_MEMORY ⇒ 'false', BLOCKCACHE ⇒ 'true'}, {NAME
⇒ 'personal

data', DATA_BLOCK_ENCODING ⇒ 'NONE', BLOOMFILTER ⇒ 'ROW',
REPLICATION_SCOPE ⇒ '0', VERSIONS ⇒ '5', COMPRESSION ⇒ 'NONE',
MIN_VERSIONS ⇒ '0', TTL

⇒ 'FOREVER', KEEP_DELETED_CELLS ⇒ 'false', BLOCKSIZE ⇒ '65536',
IN_MEMORY ⇒ 'false', BLOCKCACHE ⇒ 'true'}, {NAME ⇒ 'professional
data', DATA_BLO

CK_ENCODING ⇒ 'NONE', BLOOMFILTER ⇒ 'ROW', REPLICATION_SCOPE ⇒ '0',
VERSIONS ⇒ '1', COMPRESSION ⇒ 'NONE', MIN_VERSIONS ⇒ '0', TTL ⇒
'FOREVER', K

EEP_DELETED_CELLS ⇒ 'false', BLOCKSIZE ⇒ '65536', IN_MEMORY ⇒
'false', BLOCKCACHE ⇒ 'true'}, {NAME ⇒ 'table_att_unset',
DATA_BLOCK_ENCODING ⇒ 'NO 

NE', BLOOMFILTER ⇒ 'ROW', REPLICATION_SCOPE ⇒ '0', COMPRESSION ⇒
'NONE', VERSIONS ⇒ '1', TTL ⇒ 'FOREVER', MIN_VERSIONS ⇒ '0',
KEEP_DELETED_CELLS

⇒ 'false', BLOCKSIZE ⇒ '6

変更

Alterは、既存のテーブルに変更を加えるために使用されるコマンドです。このコマンドを使用すると、列ファミリーのセルの最大数を変更したり、テーブルスコープ演算子を設定および削除したり、テーブルから列ファミリーを削除したりできます。

列ファミリーのセルの最大数の変更

以下に、列ファミリーのセルの最大数を変更するための構文を示します。

hbase> alter 't1', NAME ⇒ 'f1', VERSIONS ⇒ 5

次の例では、セルの最大数は5に設定されています。

hbase(main):003:0> alter 'emp', NAME ⇒ 'personal data', VERSIONS ⇒ 5
Updating all regions with the new schema...
0/1 regions updated.
1/1 regions updated.
Done.
0 row(s) in 2.3050 seconds

テーブルスコープ演算子

alterを使用すると、MAX_FILESIZE、READONLY、MEMSTORE_FLUSHSIZE、DEFERRED_LOG_FLUSHなどのテーブルスコープ演算子を設定および削除できます。

読み取り専用の設定

以下に、テーブルを読み取り専用にするための構文を示します。

hbase>alter 't1', READONLY(option)

次の例では、 emp テーブルは読み取り専用です。

hbase(main):006:0> alter 'emp', READONLY
Updating all regions with the new schema...
0/1 regions updated.
1/1 regions updated.
Done.
0 row(s) in 2.2140 seconds

テーブルスコープ演算子の削除

テーブルスコープ演算子を削除することもできます。以下に示すのは、empテーブルから「MAX_FILESIZE」を削除するための構文です。

hbase> alter 't1', METHOD ⇒ 'table_att_unset', NAME ⇒ 'MAX_FILESIZE'

列ファミリーの削除

alterを使用して、列ファミリーを削除することもできます。以下に、alterを使用して列ファミリーを削除するための構文を示します。

hbase> alter ‘ table name ’, ‘delete’ ⇒ ‘ column family ’

以下に示すのは、 'emp'テーブルから列ファミリーを削除する例です。

HBaseにemployeeという名前のテーブルがあるとします。次のデータが含まれています。

hbase(main):006:0> scan 'employee'

   ROW                   COLUMN+CELL

row1 column = personal:city, timestamp = 1418193767, value = hyderabad

row1 column = personal:name, timestamp = 1418193806767, value = raju

row1 column = professional:designation, timestamp = 1418193767, value = manager

row1 column = professional:salary, timestamp = 1418193806767, value = 50000

1 row(s) in 0.0160 seconds

ここで、という名前の列ファミリーを削除しましょう。 professional alterコマンドを使用します。

hbase(main):007:0> alter 'employee','delete'⇒'professional'
Updating all regions with the new schema...
0/1 regions updated.
1/1 regions updated.
Done.
0 row(s) in 2.2380 seconds

次に、変更後にテーブルのデータを確認します。列ファミリー「professional」は削除されたため、もうありません。

hbase(main):003:0> scan 'employee'
   ROW             COLUMN + CELL
row1 column = personal:city, timestamp = 14181936767, value = hyderabad

row1 column = personal:name, timestamp = 1418193806767, value = raju

1 row(s) in 0.0830 seconds

JavaAPIを使用した列ファミリーの追加

メソッドを使用して、列ファミリーをテーブルに追加できます addColumn()HBAseAdminクラス。以下の手順に従って、列ファミリーをテーブルに追加します。

ステップ1

インスタンス化する HBaseAdmin クラス。

// Instantiating configuration object
Configuration conf = HBaseConfiguration.create();

// Instantiating HBaseAdmin class
HBaseAdmin admin = new HBaseAdmin(conf);

ステップ2

ザ・ addColumn() メソッドには、テーブル名とのオブジェクトが必要です HColumnDescriptorクラス。したがって、インスタンス化するHColumnDescriptorクラス。のコンストラクタHColumnDescriptor次に、追加する列ファミリ名が必要です。ここでは、「contactDetails」という名前の列ファミリーを既存の「employee」テーブルに追加しています。

// Instantiating columnDescriptor object

HColumnDescriptor columnDescriptor = new
HColumnDescriptor("contactDetails");

ステップ3

を使用して列ファミリーを追加します addColumn方法。テーブル名とHColumnDescriptor このメソッドのパラメータとしてのクラスオブジェクト。

// Adding column family
admin.addColumn("employee", new HColumnDescriptor("columnDescriptor"));

以下に示すのは、既存のテーブルに列ファミリーを追加するための完全なプログラムです。

import java.io.IOException;

import org.apache.hadoop.conf.Configuration;

import org.apache.hadoop.hbase.HBaseConfiguration;
import org.apache.hadoop.hbase.HColumnDescriptor;
import org.apache.hadoop.hbase.MasterNotRunningException;
import org.apache.hadoop.hbase.client.HBaseAdmin;

public class AddColoumn{

   public static void main(String args[]) throws MasterNotRunningException, IOException{

      // Instantiating configuration class.
      Configuration conf = HBaseConfiguration.create();

      // Instantiating HBaseAdmin class.
      HBaseAdmin admin = new HBaseAdmin(conf);

      // Instantiating columnDescriptor class
      HColumnDescriptor columnDescriptor = new HColumnDescriptor("contactDetails");
      
      // Adding column family
      admin.addColumn("employee", columnDescriptor);
      System.out.println("coloumn added");
   }
}

上記のプログラムを以下のようにコンパイルして実行します。

$javac AddColumn.java
$java AddColumn

上記のコンパイルは、「」でクラスパスを設定した場合にのみ機能します。 .bashrc」。まだ行っていない場合は、以下の手順に従って.javaファイルをコンパイルしてください。

//if "/home/home/hadoop/hbase " is your Hbase home folder then.

$javac -cp /home/hadoop/hbase/lib/*: Demo.java

すべてがうまくいけば、次の出力が生成されます。

column added

JavaAPIを使用した列ファミリーの削除

メソッドを使用して、テーブルから列ファミリーを削除できます deleteColumn()HBAseAdminクラス。以下の手順に従って、列ファミリーをテーブルに追加します。

ステップ1

インスタンス化する HBaseAdmin クラス。

// Instantiating configuration object
Configuration conf = HBaseConfiguration.create();

// Instantiating HBaseAdmin class
HBaseAdmin admin = new HBaseAdmin(conf);

ステップ2

を使用して列ファミリーを追加します deleteColumn()方法。テーブル名と列ファミリー名をパラメーターとしてこのメ​​ソッドに渡します。

// Deleting column family
admin.deleteColumn("employee", "contactDetails");

以下に示すのは、既存のテーブルから列ファミリーを削除するための完全なプログラムです。

import java.io.IOException;

import org.apache.hadoop.conf.Configuration;

import org.apache.hadoop.hbase.HBaseConfiguration;
import org.apache.hadoop.hbase.MasterNotRunningException;
import org.apache.hadoop.hbase.client.HBaseAdmin;

public class DeleteColoumn{

   public static void main(String args[]) throws MasterNotRunningException, IOException{

      // Instantiating configuration class.
      Configuration conf = HBaseConfiguration.create();

      // Instantiating HBaseAdmin class.
      HBaseAdmin admin = new HBaseAdmin(conf);

      // Deleting a column family
      admin.deleteColumn("employee","contactDetails");
      System.out.println("coloumn deleted"); 
   }
}

上記のプログラムを以下のようにコンパイルして実行します。

$javac DeleteColumn.java $java DeleteColumn

以下が出力になります。

column deleted

HBaseシェルを使用したテーブルの存在

テーブルの存在を確認するには、 existsコマンド。次の例は、このコマンドの使用方法を示しています。

hbase(main):024:0> exists 'emp'
Table emp does exist

0 row(s) in 0.0750 seconds

==================================================================

hbase(main):015:0> exists 'student'
Table student does not exist

0 row(s) in 0.0480 seconds

JavaAPIを使用したテーブルの存在の確認

HBaseにテーブルが存在することを確認するには、 tableExists() の方法 HBaseAdmin クラス。以下の手順に従って、HBaseにテーブルが存在することを確認します。

ステップ1

Instantiate the HBaseAdimn class

// Instantiating configuration object
Configuration conf = HBaseConfiguration.create();

// Instantiating HBaseAdmin class
HBaseAdmin admin = new HBaseAdmin(conf);

ステップ2

を使用してテーブルの存在を確認します tableExists( ) 方法。

以下に示すのは、JavaAPIを使用してHBaseにテーブルが存在するかどうかをテストするJavaプログラムです。

import java.io.IOException;

import org.apache.hadoop.hbase.HBaseConfiguration;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.hbase.client.HBaseAdmin;

public class TableExists{

   public static void main(String args[])throws IOException{

      // Instantiating configuration class
      Configuration conf = HBaseConfiguration.create();

      // Instantiating HBaseAdmin class
      HBaseAdmin admin = new HBaseAdmin(conf);

      // Verifying the existance of the table
      boolean bool = admin.tableExists("emp");
      System.out.println( bool);
   }
}

上記のプログラムを以下のようにコンパイルして実行します。

$javac TableExists.java $java TableExists

以下が出力になります。

true

HBaseシェルを使用したテーブルの削除

を使用して dropコマンドを使用すると、テーブルを削除できます。テーブルを削除する前に、テーブルを無効にする必要があります。

hbase(main):018:0> disable 'emp'
0 row(s) in 1.4580 seconds

hbase(main):019:0> drop 'emp'
0 row(s) in 0.3060 seconds

existsコマンドを使用して、テーブルが削除されているかどうかを確認します。

hbase(main):020:07gt; exists 'emp'
Table emp does not exist
0 row(s) in 0.0730 seconds

drop_all

このコマンドは、コマンドで指定された「正規表現」に一致するテーブルを削除するために使用されます。その構文は次のとおりです。

hbase> drop_all ‘t.*’

Note: テーブルを削除する前に、テーブルを無効にする必要があります。

raja、rajani、rajendra、rajesh、およびrajuという名前のテーブルがあるとします。

hbase(main):017:0> list
TABLE
raja
rajani
rajendra 
rajesh
raju
9 row(s) in 0.0270 seconds

これらの表はすべて文字で始まります raj。まず、を使用してこれらすべてのテーブルを無効にしましょうdisable_all 以下に示すコマンド。

hbase(main):002:0> disable_all 'raj.*'
raja
rajani
rajendra
rajesh
raju
Disable the above 5 tables (y/n)?
y
5 tables successfully disabled

今、あなたはそれらのすべてを使用して削除することができます drop_all 以下のコマンド。

hbase(main):018:0> drop_all 'raj.*'
raja
rajani
rajendra
rajesh
raju
Drop the above 5 tables (y/n)?
y
5 tables successfully dropped

JavaAPIを使用したテーブルの削除

を使用してテーブルを削除できます deleteTable() のメソッド HBaseAdminクラス。Java APIを使用してテーブルを削除するには、以下の手順に従ってください。

ステップ1

HBaseAdminクラスをインスタンス化します。

// creating a configuration object
Configuration conf = HBaseConfiguration.create();

// Creating HBaseAdmin object
HBaseAdmin admin = new HBaseAdmin(conf);

ステップ2

を使用してテーブルを無効にします disableTable() の方法 HBaseAdmin クラス。

admin.disableTable("emp1");

ステップ3

次に、を使用してテーブルを削除します deleteTable() の方法 HBaseAdmin クラス。

admin.deleteTable("emp12");

以下に示すのは、HBaseのテーブルを削除するための完全なJavaプログラムです。

import java.io.IOException;

import org.apache.hadoop.hbase.HBaseConfiguration;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.hbase.client.HBaseAdmin;

public class DeleteTable {

   public static void main(String[] args) throws IOException {

      // Instantiating configuration class
      Configuration conf = HBaseConfiguration.create();

      // Instantiating HBaseAdmin class
      HBaseAdmin admin = new HBaseAdmin(conf);

      // disabling table named emp
      admin.disableTable("emp12");

      // Deleting emp
      admin.deleteTable("emp12");
      System.out.println("Table deleted");
   }
}

上記のプログラムを以下のようにコンパイルして実行します。

$javac DeleteTable.java $java DeleteTable

以下が出力になります。

Table deleted

出口

次のように入力してシェルを終了します exit コマンド。

hbase(main):021:0> exit

HBaseの停止

HBaseを停止するには、HBaseホームフォルダーを参照し、次のコマンドを入力します。

./bin/stop-hbase.sh

JavaAPIを使用したHBaseの停止

を使用してHBaseをシャットダウンできます shutdown() の方法 HBaseAdminクラス。以下の手順に従って、HBaseをシャットダウンします。

ステップ1

HbaseAdminクラスをインスタンス化します。

// Instantiating configuration object
Configuration conf = HBaseConfiguration.create();

// Instantiating HBaseAdmin object
HBaseAdmin admin = new HBaseAdmin(conf);

ステップ2

を使用してHBaseをシャットダウンします shutdown() の方法 HBaseAdmin クラス。

admin.shutdown();

以下に、HBaseを停止するプログラムを示します。

import java.io.IOException;

import org.apache.hadoop.hbase.HBaseConfiguration;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.hbase.client.HBaseAdmin;

public class ShutDownHbase{

   public static void main(String args[])throws IOException {

      // Instantiating configuration class
      Configuration conf = HBaseConfiguration.create();

      // Instantiating HBaseAdmin class
      HBaseAdmin admin = new HBaseAdmin(conf);

      // Shutting down HBase
      System.out.println("Shutting down hbase");
      admin.shutdown();
   }
}

上記のプログラムを以下のようにコンパイルして実行します。

$javac ShutDownHbase.java $java ShutDownHbase

以下が出力になります。

Shutting down hbase

この章では、実行に使用されるHBase用のJavaクライアントAPIについて説明します。 CRUDHBaseテーブルでの操作。HBaseはJavaで記述されており、Java NativeAPIを備えています。したがって、データ操作言語(DML)へのプログラムによるアクセスを提供します。

クラスHBase構成

HBase構成ファイルを構成に追加します。このクラスはに属しますorg.apache.hadoop.hbase パッケージ。

方法と説明

S.No. メソッドと説明
1

static org.apache.hadoop.conf.Configuration create()

このメソッドは、HBaseリソースを使用して構成を作成します。

クラスHTable

HTableは、HBaseテーブルを表すHBase内部クラスです。これは、単一のHBaseテーブルとの通信に使用されるテーブルの実装です。このクラスはに属しますorg.apache.hadoop.hbase.client クラス。

コンストラクター

S.No. コンストラクターと説明
1

HTable()

2

HTable(TableName tableName, ClusterConnection connection, ExecutorService pool)

このコンストラクターを使用して、HBaseテーブルにアクセスするためのオブジェクトを作成できます。

方法と説明

S.No. メソッドと説明
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. コンストラクターと説明
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. メソッドと説明
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. コンストラクターと説明
1

Get(byte[] row)

このコンストラクターを使用して、指定した行のGet操作を作成できます。

2 Get(Get get)

メソッド

S.No. メソッドと説明
1

Get addColumn(byte[] family, byte[] qualifier)

指定された修飾子を使用して、特定のファミリから列を取得します。

2

Get addFamily(byte[] family)

指定されたファミリからすべての列を取得します。

クラス削除

このクラスは、単一の行に対して削除操作を実行するために使用されます。行全体を削除するには、削除する行を使用してDeleteオブジェクトをインスタンス化します。このクラスはに属しますorg.apache.hadoop.hbase.client パッケージ。

コンストラクタ

S.No. コンストラクターと説明
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. メソッドと説明
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. コンストラクター
1

Result()

このコンストラクターを使用すると、KeyValueペイロードのない空の結果を作成できます。raw Cells()を呼び出すとnullを返します。

メソッド

S.No. メソッドと説明
1

byte[] getValue(byte[] family, byte[] qualifier)

このメソッドは、指定された列の最新バージョンを取得するために使用されます。

2

byte[] getRow()

このメソッドは、この結果が作成された行に対応する行キーを取得するために使用されます。

HBaseシェルを使用したデータの挿入

この章では、HBaseテーブルにデータを作成する方法を示します。HBaseテーブルにデータを作成するには、次のコマンドとメソッドを使用します。

  • put コマンド、

  • add() の方法 Put クラス、および

  • put() の方法 HTable クラス。

例として、HBaseで次のテーブルを作成します。

使用する putコマンドを使用すると、テーブルに行を挿入できます。その構文は次のとおりです。

put ’<table name>’,’row1’,’<colfamily:colname>’,’<value>’

最初の行を挿入する

以下に示すように、最初の行の値をempテーブルに挿入しましょう。

hbase(main):005:0> put 'emp','1','personal data:name','raju'
0 row(s) in 0.6600 seconds
hbase(main):006:0> put 'emp','1','personal data:city','hyderabad'
0 row(s) in 0.0410 seconds
hbase(main):007:0> put 'emp','1','professional
data:designation','manager'
0 row(s) in 0.0240 seconds
hbase(main):007:0> put 'emp','1','professional data:salary','50000'
0 row(s) in 0.0240 seconds

同じ方法でputコマンドを使用して残りの行を挿入します。テーブル全体を挿入すると、次の出力が得られます。

hbase(main):022:0> scan 'emp'

   ROW                        COLUMN+CELL
1 column=personal data:city, timestamp=1417524216501, value=hyderabad

1 column=personal data:name, timestamp=1417524185058, value=ramu

1 column=professional data:designation, timestamp=1417524232601,

 value=manager
 
1 column=professional data:salary, timestamp=1417524244109, value=50000

2 column=personal data:city, timestamp=1417524574905, value=chennai

2 column=personal data:name, timestamp=1417524556125, value=ravi

2 column=professional data:designation, timestamp=1417524592204,

 value=sr:engg
 
2 column=professional data:salary, timestamp=1417524604221, value=30000

3 column=personal data:city, timestamp=1417524681780, value=delhi

3 column=personal data:name, timestamp=1417524672067, value=rajesh

3 column=professional data:designation, timestamp=1417524693187,

value=jr:engg
3 column=professional data:salary, timestamp=1417524702514,

value=25000

JavaAPIを使用したデータの挿入

を使用してHbaseにデータを挿入できます add() の方法 Putクラス。を使用して保存できますput() の方法 HTableクラス。これらのクラスはに属しますorg.apache.hadoop.hbase.clientパッケージ。以下に、HBaseのテーブルにデータを作成する手順を示します。

ステップ1:構成クラスをインスタンス化する

ザ・ Configurationクラスは、HBase構成ファイルをそのオブジェクトに追加します。を使用して構成オブジェクトを作成できますcreate() の方法 HbaseConfiguration 以下に示すクラス。

Configuration conf = HbaseConfiguration.create();

ステップ2:HTableクラスをインスタンス化する

あなたはというクラスを持っています HTable、HBaseでのTableの実装。このクラスは、単一のHBaseテーブルと通信するために使用されます。このクラスをインスタンス化するときに、構成オブジェクトとテーブル名をパラメーターとして受け入れます。以下に示すように、HTableクラスをインスタンス化できます。

HTable hTable = new HTable(conf, tableName);

ステップ3:PutClassをインスタンス化する

HBaseテーブルにデータを挿入するには、 add()メソッドとそのバリアントが使用されます。このメソッドはに属しますPutしたがって、putクラスをインスタンス化します。このクラスには、データを挿入する行名が文字列形式で必要です。あなたはインスタンス化することができますPut 以下に示すクラス。

Put p = new Put(Bytes.toBytes("row1"));

ステップ4:InsertData

ザ・ add() の方法 Putクラスはデータを挿入するために使用されます。列ファミリー、列修飾子(列名)、および挿入する値をそれぞれ表す3バイトの配列が必要です。以下に示すように、add()メソッドを使用してHBaseテーブルにデータを挿入します。

p.add(Bytes.toBytes("coloumn family "), Bytes.toBytes("column
name"),Bytes.toBytes("value"));

ステップ5:データをテーブルに保存する

必要な行を挿入した後、プットインスタンスをに追加して変更を保存します put() 以下に示すHTableクラスのメソッド。

hTable.put(p);

手順6:HTableインスタンスを閉じる

HBaseテーブルにデータを作成したら、 HTable を使用するインスタンス close() 以下に示す方法。

hTable.close();

以下に示すのは、HBaseテーブルにデータを作成するための完全なプログラムです。

import java.io.IOException;

import org.apache.hadoop.conf.Configuration;

import org.apache.hadoop.hbase.HBaseConfiguration;
import org.apache.hadoop.hbase.client.HTable;
import org.apache.hadoop.hbase.client.Put;
import org.apache.hadoop.hbase.util.Bytes;

public class InsertData{

   public static void main(String[] args) throws IOException {

      // Instantiating Configuration class
      Configuration config = HBaseConfiguration.create();

      // Instantiating HTable class
      HTable hTable = new HTable(config, "emp");

      // Instantiating Put class
      // accepts a row name.
      Put p = new Put(Bytes.toBytes("row1")); 

      // adding values using add() method
      // accepts column family name, qualifier/row name ,value
      p.add(Bytes.toBytes("personal"),
      Bytes.toBytes("name"),Bytes.toBytes("raju"));

      p.add(Bytes.toBytes("personal"),
      Bytes.toBytes("city"),Bytes.toBytes("hyderabad"));

      p.add(Bytes.toBytes("professional"),Bytes.toBytes("designation"),
      Bytes.toBytes("manager"));

      p.add(Bytes.toBytes("professional"),Bytes.toBytes("salary"),
      Bytes.toBytes("50000"));
      
      // Saving the put Instance to the HTable.
      hTable.put(p);
      System.out.println("data inserted");
      
      // closing HTable
      hTable.close();
   }
}

上記のプログラムを以下のようにコンパイルして実行します。

$javac InsertData.java $java InsertData

以下が出力になります。

data inserted

HBaseシェルを使用したデータの更新

を使用して既存のセル値を更新できます putコマンド。これを行うには、同じ構文に従い、以下に示すように新しい値を記述します。

put ‘table name’,’row ’,'Column family:column name',’new value’

新しく指定された値が既存の値を置き換え、行を更新します。

HBaseにというテーブルがあるとします。 emp 以下のデータで。

hbase(main):003:0> scan 'emp'
 ROW              COLUMN + CELL
row1 column = personal:name, timestamp = 1418051555, value = raju
row1 column = personal:city, timestamp = 1418275907, value = Hyderabad
row1 column = professional:designation, timestamp = 14180555,value = manager
row1 column = professional:salary, timestamp = 1418035791555,value = 50000
1 row(s) in 0.0100 seconds

次のコマンドは、「Raju」という名前の従業員の都市値をデリーに更新します。

hbase(main):002:0> put 'emp','row1','personal:city','Delhi'
0 row(s) in 0.0400 seconds

更新されたテーブルは次のようになり、ラジュの街が「デリー」に変更されたことがわかります。

hbase(main):003:0> scan 'emp'
  ROW          COLUMN + CELL
row1 column = personal:name, timestamp = 1418035791555, value = raju
row1 column = personal:city, timestamp = 1418274645907, value = Delhi
row1 column = professional:designation, timestamp = 141857555,value = manager
row1 column = professional:salary, timestamp = 1418039555, value = 50000
1 row(s) in 0.0100 seconds

JavaAPIを使用したデータの更新

を使用して特定のセルのデータを更新できます put()方法。以下の手順に従って、テーブルの既存のセル値を更新します。

ステップ1:構成クラスをインスタンス化する

Configurationクラスは、HBase構成ファイルをそのオブジェクトに追加します。を使用して構成オブジェクトを作成できますcreate() の方法 HbaseConfiguration 以下に示すクラス。

Configuration conf = HbaseConfiguration.create();

ステップ2:HTableクラスをインスタンス化する

あなたはというクラスを持っています HTable、HBaseでのTableの実装。このクラスは、単一のHBaseテーブルと通信するために使用されます。このクラスをインスタンス化するときに、構成オブジェクトとテーブル名をパラメーターとして受け入れます。以下に示すように、HTableクラスをインスタンス化できます。

HTable hTable = new HTable(conf, tableName);

ステップ3:プットクラスをインスタンス化する

HBaseテーブルにデータを挿入するには、 add()メソッドとそのバリアントが使用されます。このメソッドはに属しますPut、したがって、インスタンス化します putクラス。このクラスには、データを挿入する行名が文字列形式で必要です。あなたはインスタンス化することができますPut 以下に示すクラス。

Put p = new Put(Bytes.toBytes("row1"));

ステップ4:既存のセルを更新する

ザ・ add() の方法 Putクラスはデータを挿入するために使用されます。列ファミリー、列修飾子(列名)、および挿入する値をそれぞれ表す3バイトの配列が必要です。を使用してHBaseテーブルにデータを挿入しますadd() 以下に示す方法。

p.add(Bytes.toBytes("coloumn family "), Bytes.toBytes("column
name"),Bytes.toBytes("value"));
p.add(Bytes.toBytes("personal"),
Bytes.toBytes("city"),Bytes.toBytes("Delih"));

ステップ5:データをテーブルに保存する

必要な行を挿入した後、プットインスタンスをに追加して変更を保存します put() 以下に示すHTableクラスのメソッド。

hTable.put(p);

手順6:HTableインスタンスを閉じる

HBaseテーブルにデータを作成したら、 HTable 以下に示すように、close()メソッドを使用するインスタンス。

hTable.close();

以下に示すのは、特定のテーブルのデータを更新するための完全なプログラムです。

import java.io.IOException;

import org.apache.hadoop.conf.Configuration;

import org.apache.hadoop.hbase.HBaseConfiguration;
import org.apache.hadoop.hbase.client.HTable;
import org.apache.hadoop.hbase.client.Put;
import org.apache.hadoop.hbase.util.Bytes;

public class UpdateData{

   public static void main(String[] args) throws IOException {

      // Instantiating Configuration class
      Configuration config = HBaseConfiguration.create();

      // Instantiating HTable class
      HTable hTable = new HTable(config, "emp");

      // Instantiating Put class
      //accepts a row name
      Put p = new Put(Bytes.toBytes("row1"));

      // Updating a cell value
      p.add(Bytes.toBytes("personal"),
      Bytes.toBytes("city"),Bytes.toBytes("Delih"));

      // Saving the put Instance to the HTable.
      hTable.put(p);
      System.out.println("data Updated");

      // closing HTable
      hTable.close();
   }
}

上記のプログラムを以下のようにコンパイルして実行します。

$javac UpdateData.java $java UpdateData

以下が出力になります。

data Updated

HBaseシェルを使用したデータの読み取り

ザ・ get コマンドと get() の方法 HTableクラスは、HBaseのテーブルからデータを読み取るために使用されます。使用するgetコマンドを使用すると、一度に1行のデータを取得できます。その構文は次のとおりです。

get ’<table name>’,’row1’

次の例は、getコマンドの使用方法を示しています。の最初の行をスキャンしてみましょうemp テーブル。

hbase(main):012:0> get 'emp', '1'

   COLUMN                     CELL
   
personal : city timestamp = 1417521848375, value = hyderabad

personal : name timestamp = 1417521785385, value = ramu

professional: designation timestamp = 1417521885277, value = manager

professional: salary timestamp = 1417521903862, value = 50000

4 row(s) in 0.0270 seconds

特定の列を読む

以下に示すのは、を使用して特定の列を読み取るための構文です。 get 方法。

hbase> get 'table name', ‘rowid’, {COLUMN ⇒ ‘column family:column name ’}

以下に示すのは、HBaseテーブルの特定の列を読み取る例です。

hbase(main):015:0> get 'emp', 'row1', {COLUMN ⇒ 'personal:name'}
  COLUMN                CELL  
personal:name timestamp = 1418035791555, value = raju
1 row(s) in 0.0080 seconds

JavaAPIを使用したデータの読み取り

HBaseテーブルからデータを読み取るには、 get()HTableクラスのメソッド。このメソッドには、のインスタンスが必要です。Getクラス。以下の手順に従って、HBaseテーブルからデータを取得します。

ステップ1:構成クラスをインスタンス化する

Configurationクラスは、HBase構成ファイルをそのオブジェクトに追加します。を使用して構成オブジェクトを作成できますcreate() の方法 HbaseConfiguration 以下に示すクラス。

Configuration conf = HbaseConfiguration.create();

ステップ2:HTableクラスをインスタンス化する

あなたはというクラスを持っています HTable、HBaseでのTableの実装。このクラスは、単一のHBaseテーブルと通信するために使用されます。このクラスをインスタンス化するときに、構成オブジェクトとテーブル名をパラメーターとして受け入れます。以下に示すように、HTableクラスをインスタンス化できます。

HTable hTable = new HTable(conf, tableName);

ステップ3:Getクラスをインスタンス化する

を使用してHBaseテーブルからデータを取得できます get() の方法 HTableクラス。このメソッドは、指定された行からセルを抽出します。それは必要ですGetパラメータとしてのクラスオブジェクト。以下のように作成します。

Get get = new Get(toBytes("row1"));

ステップ4:データを読む

データの取得中に、IDで単一の行を取得したり、行IDのセットで行のセットを取得したり、テーブル全体または行のサブセットをスキャンしたりできます。

のaddメソッドバリアントを使用してHBaseテーブルデータを取得できます Get クラス。

特定の列ファミリーから特定の列を取得するには、次の方法を使用します。

get.addFamily(personal)

特定の列ファミリーからすべての列を取得するには、次の方法を使用します。

get.addColumn(personal, name)

ステップ5:結果を得る

あなたを渡すことによって結果を得る Get のgetメソッドへのクラスインスタンス HTableクラス。このメソッドは、Result要求された結果を保持するクラスオブジェクト。以下はの使用法ですget() 方法。

Result result = table.get(g);

ステップ6:結果インスタンスから値を読み取る

ザ・ Result クラスは getValue()インスタンスから値を読み取るメソッド。以下に示すように使用して、から値を読み取ります。Result インスタンス。

byte [] value = result.getValue(Bytes.toBytes("personal"),Bytes.toBytes("name"));
byte [] value1 = result.getValue(Bytes.toBytes("personal"),Bytes.toBytes("city"));

以下に示すのは、HBaseテーブルから値を読み取るための完全なプログラムです。

import java.io.IOException;

import org.apache.hadoop.conf.Configuration;

import org.apache.hadoop.hbase.HBaseConfiguration;
import org.apache.hadoop.hbase.client.Get;
import org.apache.hadoop.hbase.client.HTable;
import org.apache.hadoop.hbase.client.Result;
import org.apache.hadoop.hbase.util.Bytes;

public class RetriveData{

   public static void main(String[] args) throws IOException, Exception{
   
      // Instantiating Configuration class
      Configuration config = HBaseConfiguration.create();

      // Instantiating HTable class
      HTable table = new HTable(config, "emp");

      // Instantiating Get class
      Get g = new Get(Bytes.toBytes("row1"));

      // Reading the data
      Result result = table.get(g);

      // Reading values from Result class object
      byte [] value = result.getValue(Bytes.toBytes("personal"),Bytes.toBytes("name"));

      byte [] value1 = result.getValue(Bytes.toBytes("personal"),Bytes.toBytes("city"));

      // Printing the values
      String name = Bytes.toString(value);
      String city = Bytes.toString(value1);
      
      System.out.println("name: " + name + " city: " + city);
   }
}

上記のプログラムを以下のようにコンパイルして実行します。

$javac RetriveData.java $java RetriveData

以下が出力になります。

name: Raju city: Delhi

テーブル内の特定のセルの削除

を使用して deleteコマンドを使用すると、テーブル内の特定のセルを削除できます。の構文delete コマンドは次のとおりです。

delete ‘<table name>’, ‘<row>’, ‘<column name >’, ‘<time stamp>’

特定のセルを削除する例を次に示します。ここでは給与を削除しています。

hbase(main):006:0> delete 'emp', '1', 'personal data:city',
1417521848375
0 row(s) in 0.0060 seconds

テーブル内のすべてのセルを削除する

「deleteall」コマンドを使用すると、行内のすべてのセルを削除できます。以下に、deleteallコマンドの構文を示します。

deleteall ‘<table name>’, ‘<row>’,

これは「deleteall」コマンドの例です。ここでは、empテーブルのrow1のすべてのセルを削除しています。

hbase(main):007:0> deleteall 'emp','1'
0 row(s) in 0.0240 seconds

を使用してテーブルを確認します scanコマンド。テーブルを削除した後のテーブルのスナップショットを以下に示します。

hbase(main):022:0> scan 'emp'

ROW                  COLUMN + CELL

2 column = personal data:city, timestamp = 1417524574905, value = chennai 

2 column = personal data:name, timestamp = 1417524556125, value = ravi

2 column = professional data:designation, timestamp = 1417524204, value = sr:engg

2 column = professional data:salary, timestamp = 1417524604221, value = 30000

3 column = personal data:city, timestamp = 1417524681780, value = delhi

3 column = personal data:name, timestamp = 1417524672067, value = rajesh
 
3 column = professional data:designation, timestamp = 1417523187, value = jr:engg

3 column = professional data:salary, timestamp = 1417524702514, value = 25000

JavaAPIを使用したデータの削除

を使用してHBaseテーブルからデータを削除できます delete() の方法 HTableクラス。テーブルからデータを削除するには、以下の手順に従ってください。

ステップ1:構成クラスをインスタンス化する

Configurationクラスは、HBase構成ファイルをそのオブジェクトに追加します。を使用して構成オブジェクトを作成できますcreate() の方法 HbaseConfiguration 以下に示すクラス。

Configuration conf = HbaseConfiguration.create();

ステップ2:HTableクラスをインスタンス化する

あなたはというクラスを持っています HTable、HBaseでのTableの実装。このクラスは、単一のHBaseテーブルと通信するために使用されます。このクラスをインスタンス化するときに、構成オブジェクトとテーブル名をパラメーターとして受け入れます。以下に示すように、HTableクラスをインスタンス化できます。

HTable hTable = new HTable(conf, tableName);

ステップ3:削除クラスをインスタンス化する

インスタンス化する Delete削除される行のROWIDをバイト配列形式で渡すことによってクラス。このコンストラクターにタイムスタンプとRowlockを渡すこともできます。

Delete delete = new Delete(toBytes("row1"));

ステップ4:削除するデータを選択する

の削除方法を使用してデータを削除できます Deleteクラス。このクラスには、さまざまな削除メソッドがあります。これらの方法を使用して、削除する列または列ファミリーを選択します。Deleteクラスメソッドの使用法を示す次の例を見てください。

delete.deleteColumn(Bytes.toBytes("personal"), Bytes.toBytes("name"));
delete.deleteFamily(Bytes.toBytes("professional"));

ステップ5:データを削除する

を渡して、選択したデータを削除します delete インスタンスに delete() の方法 HTable 以下に示すクラス。

table.delete(delete);

手順6:HTableInstanceを閉じます

データを削除した後、 HTable インスタンス。

table.close();

以下に示すのは、HBaseテーブルからデータを削除するための完全なプログラムです。

import java.io.IOException;

import org.apache.hadoop.conf.Configuration;

import org.apache.hadoop.hbase.HBaseConfiguration;
import org.apache.hadoop.hbase.client.Delete;
import org.apache.hadoop.hbase.client.HTable;
import org.apache.hadoop.hbase.util.Bytes;

public class DeleteData {

   public static void main(String[] args) throws IOException {

      // Instantiating Configuration class
      Configuration conf = HBaseConfiguration.create();

      // Instantiating HTable class
      HTable table = new HTable(conf, "employee");

      // Instantiating Delete class
      Delete delete = new Delete(Bytes.toBytes("row1"));
      delete.deleteColumn(Bytes.toBytes("personal"), Bytes.toBytes("name"));
      delete.deleteFamily(Bytes.toBytes("professional"));

      // deleting the data
      table.delete(delete);

      // closing the HTable object
      table.close();
      System.out.println("data deleted.....");
   }
}

上記のプログラムを以下のようにコンパイルして実行します。

$javac Deletedata.java $java DeleteData

以下が出力になります。

data deleted

HBaseシェルを使用したスキャン

ザ・ scanコマンドは、HTableのデータを表示するために使用されます。scanコマンドを使用して、テーブルデータを取得できます。その構文は次のとおりです。

scan ‘<table name>’

次の例は、scanコマンドを使用してテーブルからデータを読み取る方法を示しています。ここで私たちは読んでいますemp テーブル。

hbase(main):010:0> scan 'emp'

ROW                           COLUMN + CELL

1 column = personal data:city, timestamp = 1417521848375, value = hyderabad
 
1 column = personal data:name, timestamp = 1417521785385, value = ramu

1 column = professional data:designation, timestamp = 1417585277,value = manager

1 column = professional data:salary, timestamp = 1417521903862, value = 50000

1 row(s) in 0.0370 seconds

JavaAPIを使用したスキャン

JavaAPIを使用してテーブルデータ全体をスキャンするための完全なプログラムは次のとおりです。

import java.io.IOException;

import org.apache.hadoop.conf.Configuration;

import org.apache.hadoop.hbase.HBaseConfiguration;
import org.apache.hadoop.hbase.util.Bytes;

import org.apache.hadoop.hbase.client.HTable;
import org.apache.hadoop.hbase.client.Result;
import org.apache.hadoop.hbase.client.ResultScanner;
import org.apache.hadoop.hbase.client.Scan;


public class ScanTable{

   public static void main(String args[]) throws IOException{

      // Instantiating Configuration class
      Configuration config = HBaseConfiguration.create();

      // Instantiating HTable class
      HTable table = new HTable(config, "emp");

      // Instantiating the Scan class
      Scan scan = new Scan();

      // Scanning the required columns
      scan.addColumn(Bytes.toBytes("personal"), Bytes.toBytes("name"));
      scan.addColumn(Bytes.toBytes("personal"), Bytes.toBytes("city"));

      // Getting the scan result
      ResultScanner scanner = table.getScanner(scan);

      // Reading values from scan result
      for (Result result = scanner.next(); result != null; result = Scanner.next())

      System.out.println("Found row : " + result);
      //closing the scanner
      scanner.close();
   }
}

上記のプログラムを以下のようにコンパイルして実行します。

$javac ScanTable.java $java ScanTable

以下が出力になります。

Found row :
keyvalues={row1/personal:city/1418275612888/Put/vlen=5/mvcc=0,
row1/personal:name/1418035791555/Put/vlen=4/mvcc=0}

カウント

を使用してテーブルの行数を数えることができます countコマンド。その構文は次のとおりです。

count ‘<table name>’

最初の行を削除すると、empテーブルには2つの行があります。以下のように確認してください。

hbase(main):023:0> count 'emp'
2 row(s) in 0.090 seconds
⇒ 2

切り捨てる

このコマンドは、ドロップを無効にしてテーブルを再作成します。の構文truncate 以下のとおりであります:

hbase> truncate 'table name'

以下に、truncateコマンドの例を示します。ここでは、emp テーブル。

hbase(main):011:0> truncate 'emp'
Truncating 'one' table (it may take a while):
   - Disabling table...
   - Truncating table...
   0 row(s) in 1.5950 seconds

テーブルを切り捨てた後、scanコマンドを使用して確認します。行がゼロのテーブルが表示されます。

hbase(main):017:0> scan ‘emp’
ROW                  COLUMN + CELL
0 row(s) in 0.3110 seconds

HBaseのユーザーに権限を付与および取り消すことができます。セキュリティ上の目的で、grant、revoke、user_permissionの3つのコマンドがあります。

付与

ザ・ grantコマンドは、特定のユーザーにテーブルの読み取り、書き込み、実行、管理などの特定の権限を付与します。grantコマンドの構文は次のとおりです。

hbase> grant <user> <permissions> [<table> [<column family> [&ltcolumn; qualifier>]]

RWXCAのセットからユーザーに0個以上の特権を付与できます。

  • R-読み取り特権を表します。
  • W-書き込み特権を表します。
  • X-実行特権を表します。
  • C-作成特権を表します。
  • A-管理者権限を表します。

以下に示すのは、「Tutorialspoint」という名前のユーザーにすべての特権を付与する例です。

hbase(main):018:0> grant 'Tutorialspoint', 'RWXCA'

取り消す

ザ・ revokeコマンドは、テーブルのユーザーのアクセス権を取り消すために使用されます。その構文は次のとおりです。

hbase> revoke <user>

次のコードは、「Tutorialspoint」という名前のユーザーからのすべてのアクセス許可を取り消します。

hbase(main):006:0> revoke 'Tutorialspoint'

user_permission

このコマンドは、特定のテーブルのすべての権限を一覧表示するために使用されます。の構文user_permission 以下のとおりであります:

hbase>user_permission ‘tablename’

次のコードは、「emp」テーブルのすべてのユーザー権限を一覧表示します。

hbase(main):013:0> user_permission 'emp'