Hbase-quick-guide

提供:Dev Guides
移動先:案内検索

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 Flow

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アーキテクチャ

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ターミナルを開き、次のコマンドを入力してユーザーを作成します。

$ 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が存在することを確認する必要があります。 java versionコマンドの構文は次のとおりです。

$ 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

次のリンク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 ファイルを抽出します。

$ 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を使用できるようにするには、「/usr/local/」の場所に移動する必要があります。 ルートを開き、次のコマンドを入力します。

$ 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 version」コマンドを使用して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 Software Foundationからhttp://apache.bytenet.in/hadoop/common/hadoop-2.6.0/[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のセットアップ

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

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_HOME 値をシステム内のjavaの場所に置き換えて、 hadoop-env.sh ファイルのjava環境変数をリセットする必要があります。

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

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

*core-site.xml*
*core-site.xml* ファイルには、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>
  • 注意:*上記のファイルでは、すべてのプロパティ値はユーザー定義であり、Hadoopインフラストラクチャに応じて変更できます。
*yarn-site.xml*

このファイルは、Hadoopに糸を設定するために使用されます。 yarn-site.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.template から mapred-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-ノードのセットアップに名前を付ける

次のようにコマンド「hdfs namenode -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-Hadoop dfの検証

次のコマンドは、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-糸スクリプトの検証

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

$ 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です。 次のURLを使用して、ブラウザーでHadoopサービスを取得します。

http://localhost:50070

ブラウザ上のHadoop

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

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

http://localhost:8088/

Hadoop Applicatin Cluster

HBaseのインストール

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

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

「wget」コマンドを使用してHBaseの最新の安定バージョンをhttp://www.interior-dsgn.com/apache/hbase/stable/からダウンロードし、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ホームを設定し、confフォルダーから hbase-env.sh ファイルを開きます。 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のbinフォルダーにある start-hbase.sh スクリプトを使用して、HBaseを起動できます。 そのためには、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構文を使用して、hfs.rootdir、HDFSインスタンスアドレスを変更します。 ローカルホストのポート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

注意: 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のホームフォルダーを開き、マスターし、次のコマンドを実行して起動します。

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

バックアップマスターを強制終了するには、そのプロセスIDが必要です。このプロセス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 Shellを起動できます。 以下に、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 Master Serverを起動します

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

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

開始地域

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

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

HBase Shellを起動します

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

$cd bin
$./hbase shell

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

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>

HBase Webインターフェイス

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

http://localhost:60010

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

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

HBaseサーバー

HBaseテーブル

HBaseテーブル

Java環境の設定

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

クラスパスの設定

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

$ gedit ~/.bashrc

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

export CLASSPATH = $CLASSPATH://home/hadoop/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ホームフォルダーに移動する必要があります。

cd/usr/localhost/
cd Hbase

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

./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 コマンドを使用します。 List は、HBaseのすべてのテーブルのリストを取得するために使用されるコマンドです。 まず、以下のようにこのコマンドを使用して、システムのHBaseのインストールと構成を確認します。

hbase(main):001:0> list

このコマンドを入力すると、次の出力が表示されます。

hbase(main):001:0> list
TABLE

HBase-一般コマンド

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-管理API

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

クラスHBaseAdmin

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

メソッドと説明

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
  • HTableDescriptor(TableName name)*

TableNameオブジェクトを指定してテーブル記述子を構築します。

メソッドと説明

S.No. Methods and Description
1

HTableDescriptor addFamily(HColumnDescriptor family)

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

HBase-テーブルの作成

HBase Shellを使用してテーブルを作成する

*create* コマンドを使用してテーブルを作成できます。ここでは、テーブル名と列ファミリ名を指定する必要があります。 HBaseシェルでテーブルを作成する*構文*を以下に示します。
create ‘<table name>’,’<column family>’

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

Row key personal data professional data

以下に示すように、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

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

*HBaseAdmin* クラスの* createTable()*メソッドを使用して、HBaseにテーブルを作成できます。 このクラスは *org.apache.hadoop.hbase.client* パッケージに属します。 以下に、Java APIを使用して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:管理者を介して実行する

*HBaseAdmin* クラスの* createTable()*メソッドを使用すると、作成したテーブルを管理モードで実行できます。
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-リスト表

HBase Shellを使用してテーブルをリストする

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

hbase(main):001:0 > list

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

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

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

Java APIを使用したテーブルのリスト

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

ステップ1

HBaseのすべてのテーブルのリストを取得するには、クラス HBaseAdmin に* listTables()というメソッドがあります。 このメソッドは、 *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のテーブルのリストを取得します。

以下は、Java APIを使用して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-テーブルを無効にする

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

テーブルを削除または設定を変更するには、まず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 &plus; 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には、raja、rajani、rajendra、rajesh、rajuの5つのテーブルがあるとします。 次のコードは、* 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

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

テーブルが無効になっているかどうかを確認するには、* 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-テーブルを有効にする

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

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

enable ‘emp’

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

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

検証

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

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

   ROW                        COLUMN &plus; 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

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

テーブルが有効かどうかを確認するには、* 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-説明と変更

記述する

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

hbase> describe 'table name'

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

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

次に、alterコマンドを使用して professional という名前の列ファミリを削除します。

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 &plus; CELL
row1 column = personal:city, timestamp = 14181936767, value = hyderabad

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

1 row(s) in 0.0830 seconds

Java APIを使用した列ファミリの追加

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

ステップ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

Java APIを使用した列ファミリの削除

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

ステップ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-存在

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

*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

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

*HBaseAdmin* クラスの* tableExists()*メソッドを使用して、HBaseのテーブルの存在を確認できます。 以下の手順に従って、HBaseにテーブルが存在することを確認します。

ステップ1

Instantiate the HBaseAdimn class

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

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

ステップ2

  • tableExists()*メソッドを使用して、テーブルの存在を確認します。

以下は、Java APIを使用して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-テーブルをドロップ

HBase Shellを使用してテーブルを削除する

*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.*’
  • 注意:*テーブルを削除する前に、無効にする必要があります。

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

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

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

ステップ1

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

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

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

ステップ2

*HBaseAdmin* クラスの* disableTable()*メソッドを使用してテーブルを無効にします。
admin.disableTable("emp1");

ステップ3

*HBaseAdmin* クラスの* deleteTable()*メソッドを使用してテーブルを削除します。
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

HBase-シャットダウン

exit

*exit* コマンドを入力して、シェルを終了します。
hbase(main):021:0> exit

HBaseを停止する

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

./bin/stop-hbase.sh

Java APIを使用したHBaseの停止

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

ステップ1

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

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

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

ステップ2

*HBaseAdmin* クラスの* shutdown()*メソッドを使用してHBaseをシャットダウンします。
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-クライアント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
  • HTable(TableName tableName, ClusterConnection connection, ExecutorService pool)*

このコンストラクターを使用して、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で次のテーブルを作成します。

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

Java APIを使用したデータの挿入

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

ステップ1:構成クラスのインスタンス化

*Configuration* クラスは、HBase構成ファイルをオブジェクトに追加します。 以下に示すように、 *HbaseConfiguration* クラスの* create()*メソッドを使用して、構成オブジェクトを作成できます。
Configuration conf = HbaseConfiguration.create();

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

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

HTable hTable = new HTable(conf, tableName);

ステップ3:PutClassのインスタンス化

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

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

ステップ4:データを挿入する

*Put* クラスの* add()*メソッドは、データを挿入するために使用されます。 列ファミリー、列修飾子(列名)、および挿入する値をそれぞれ表す3バイト配列が必要です。 以下に示すようにadd()メソッドを使用して、HBaseテーブルにデータを挿入します。
p.add(Bytes.toBytes("coloumn family "), Bytes.toBytes("column
name"),Bytes.toBytes("value"));

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

必要な行を挿入したら、次に示すように、putインスタンスをHTableクラスの* put()*メソッドに追加して、変更を保存します。

hTable.put(p);

ステップ6:HTableインスタンスを閉じる

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

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-データの更新

HBase Shellを使用してデータを更新する

*put* コマンドを使用して、既存のセル値を更新できます。 これを行うには、同じ構文に従い、以下に示すように新しい値を指定します。
put ‘table name’,’row ’,'Column family:column name',’new value’

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

次のデータを含む emp というHBaseのテーブルがあるとします。

hbase(main):003:0> scan 'emp'
 ROW              COLUMN &plus; 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 &plus; 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

Java APIを使用したデータの更新

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

ステップ1:構成クラスのインスタンス化

*Configuration* クラスは、HBase構成ファイルをオブジェクトに追加します。 以下に示すように、 *HbaseConfiguration* クラスの* create()*メソッドを使用して、構成オブジェクトを作成できます。
Configuration conf = HbaseConfiguration.create();

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

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

HTable hTable = new HTable(conf, tableName);

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

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

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

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

*Put* クラスの* add()*メソッドは、データを挿入するために使用されます。 列ファミリー、列修飾子(列名)、および挿入する値をそれぞれ表す3バイト配列が必要です。 以下に示すように、* add()*メソッドを使用してHBaseテーブルにデータを挿入します。
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クラスの* put()*メソッドに追加して、変更を保存します。

hTable.put(p);

ステップ6:HTableインスタンスを閉じる

HBase Tableでデータを作成した後、以下に示すようにclose()メソッドを使用して HTable インスタンスを閉じます。

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-データの読み取り

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

*get* コマンドと *HTable* クラスの* get()*メソッドは、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

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

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

ステップ1:構成クラスのインスタンス化

*Configuration* クラスは、HBase構成ファイルをオブジェクトに追加します。 以下に示すように、 *HbaseConfiguration* クラスの* create()*メソッドを使用して、構成オブジェクトを作成できます。
Configuration conf = HbaseConfiguration.create();

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

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

HTable hTable = new HTable(conf, tableName);

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

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

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

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

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

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

get.addFamily(personal)

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

get.addColumn(personal, name)

ステップ5:結果を取得する

*Get* クラスインスタンスを *HTable* クラスのgetメソッドに渡すことで結果を取得します。 このメソッドは、要求された結果を保持する *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

HBase-データの削除

テーブル内の特定のセルを削除する

*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>’,

次に、empテーブルのrow1のすべてのセルを削除する「deleteall」コマンドの例を示します。

hbase(main):007:0> deleteall 'emp','1'
0 row(s) in 0.0240 seconds
*scan* コマンドを使用してテーブルを確認します。 テーブルを削除した後のテーブルのスナップショットを以下に示します。
hbase(main):022:0> scan 'emp'

ROW                  COLUMN &plus; 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

Java APIを使用したデータの削除

*HTable* クラスの* delete()*メソッドを使用して、HBaseテーブルからデータを削除できます。 以下の手順に従って、テーブルからデータを削除します。

ステップ1:構成クラスのインスタンス化

*Configuration* クラスは、HBase構成ファイルをオブジェクトに追加します。 以下に示すように、 *HbaseConfiguration* クラスの* create()*メソッドを使用して、構成オブジェクトを作成できます。
Configuration conf = HbaseConfiguration.create();

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

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

HTable hTable = new HTable(conf, tableName);

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

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

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

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

*Delete* クラスのdeleteメソッドを使用してデータを削除できます。 このクラスには、さまざまな削除メソッドがあります。 これらの方法を使用して、削除する列または列ファミリを選択します。 Deleteクラスメソッドの使用法を示す次の例をご覧ください。
delete.deleteColumn(Bytes.toBytes("personal"), Bytes.toBytes("name"));
delete.deleteFamily(Bytes.toBytes("professional"));

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

以下に示すように、 HTable クラスの* delete()メソッドに *delete インスタンスを渡すことにより、選択したデータを削除します。

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-スキャン

HBase Shellを使用したスキャン

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

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

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

ROW                           COLUMN &plus; 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

Java APIを使用したスキャン

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

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}

HBase-カウントと切り捨て

カウント

*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

テーブルを切り捨てた後、スキャンコマンドを使用して確認します。 行がゼロのテーブルを取得します。

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

HBase-セキュリティ

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

付与

*grant* コマンドは、特定のユーザーにテーブルの読み取り、書き込み、実行、管理などの特定の権限を付与します。 grantコマンドの構文は次のとおりです。
hbase> grant <user> <permissions> [<table> [<column family> [&ltcolumn; qualifier>]]

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

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

以下に、「finddevguides」という名前のユーザーにすべての権限を付与する例を示します。

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

取り消す

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

次のコードは、「finddevguides」という名前のユーザーからすべての権限を取り消します。

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

user_permission

このコマンドは、特定のテーブルのすべての権限をリストするために使用されます。 user_permission の構文は次のとおりです。

hbase>user_permission ‘tablename’

次のコードは、「emp」テーブルのすべてのユーザー権限をリストしています。

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

Hbase-questions-answers