概要

  • HadoopのHDFS上に構築されたデータベース
  • ランダムアクセス、シーケンシャルアクセス共に低レイテンシで行えるデータストア
  • テーブルはリージョンに自動的に分割され、リージョンはワーカーノードにランダムに割り当てられる
  • テーブル構造は柔軟で、行を書き込むときに自由にカラムを追加できる
  • データ型はByte配列
  • カラム指向
  • リアルタイム、MapReduce?処理の両方に対応可能
  • 自動シャーディング
  • インデックスは持たない
  • レコードはキー順に格納される
  • SQLはサポートされない
  • 強い一貫性
    • 更新前の古いデータが見えることはない
    • レコードに関する操作はアトミック

HBaseの構成要素

テーブル・ファイル

  • 名前の付いたTableに、Rowと呼ばれる従来のRDBでいうレコードに相当する形式でデータを保持
  • 各データはKeyと任意の数のColumnを持っており、Key順に並べられて保持されている
  • 同一のTableでも保持するColumnの数が大きく変化する為にTableはまばらな状態で蓄えられる
  • Columnの名称は"<Family>:<Label>"という形式になっており、<Family>と<Label>とで任意の大きさのByteArray?になっている
  • 実File上ではColumnFamilies?毎に分かれて保存されている
  • HBaseのTableはRowKey?の昇順、Column名の昇順、Timestampの降順の順で並べられたRowの塊に見えるが、実際は一定範囲毎にRowを区切り、Region(BigTable?のTabletに相当)と呼ばれるファイルの形で保存される
  • Regionは先頭Key(実ファイル含む)から末尾Key(実ファイル含まず)を含んでおり、適切な順で並べられたRegionファイルが、一個のTableに相当する
  • Regionファイルの内部で各ColumnFamily?はHStoreとして保存される

サーバ

  • HBaseMaster? (HM)
    • リージョンファイルのロードバランシング
  • HRegionServer? (RS)
    • リージョンファイルの保持
    • 読み込み、書き込み
  • ZooKeeper (ZK)
    • Rootテーブルの位置情報保持
    • HBaseMaster?の情報保持
  • HDFS
    • 分散ファイルシステム
    • データの複製を保存

使い方 on Mac OS X

Hadoopのインストール・起動/停止

  • Hadoop のダウンロード
  • HBase のダウンロード
  • 展開してできたフォルダを /usr/local/ に移動し、シンボリックリンクを張る
    $ cd /usr/local
    $ sudo ln -s hadoop-0.20.2 hadoop
    $ sudo ln -s hbase-0.20.6 hbase
  • /usr/local/hadoop/conf/hadoop-env.sh の JAVA_HOME を編集
    export JAVA_HOME=/System/Library/Frameworks/JavaVM.framework/Versions/CurrentJDK/Home
  • Hadoop用にSSHのキーファイルを生成
    $ ssh-keygen -t dsa -P '' -f ~/.ssh/id_dsa_for_hadoop
    $ cat ~/.ssh/id_dsa_for_hadoop.pub >> ~/.ssh/authorized_keys
  • /usr/local/hadoop/conf/hadoop-env.sh の HADOOP_SSH_OPTS を編集
    export HADOOP_SSH_OPTS="-i /Users/$USER/.ssh/id_dsa_for_hadoop"
  • 設定ファイル(/usr/local/hadoop/conf/*.xml)の編集
    • core-site.xml
      <configuration>
        <property>
          <name>fs.default.name</name>
          <value>hdfs://localhost:9000</value>
        </property>
      </configuration>
  • hdfs-site.xml
    <configuration>
      <property>
        <name>dfs.replication</name>
        <value>1</value>
      </property>
    </configuration>
  • mapred-site.xml
    <configuration>
      <property>
        <name>mapred.job.tracker</name>
        <value>localhost:9001</value>
      </property>
    </configuration>
  • 初回だけ以下を実行
    $ /usr/local/hadoop/bin/hadoop namenode -format
  • 起動
    $ /usr/local/hadoop/bin/start-all.sh
    
  • プロセス確認
    $ ps ax | grep hadoop
    org.apache.hadoop.mapred.JobTracker
    org.apache.hadoop.hdfs.server.namenode.NameNode
    org.apache.hadoop.mapred.TaskTracker
    org.apache.hadoop.hdfs.server.namenode.SecondaryNameNode
    org.apache.hadoop.hdfs.server.datanode.DataNode
  • 停止
    $ /usr/local/hadoop/bin/stop-all.sh

HBaseのインストール・起動/停止

  • /usr/local/hbase/conf/hbase-env.sh の JAVA_HOME を編集
    export JAVA_HOME=/System/Library/Frameworks/JavaVM.framework/Versions/CurrentJDK/Home
    export HBASE_CLASSPATH=/usr/local/hadoop/conf
    export HBASE_SSH_OPTS="-i /Users/$USER/.ssh/id_dsa_for_hadoop"
  • テスト
    $ /usr/local/hbase/bin/hbase shell
  • 起動
    $ /usr/local/hbase/bin/start-hbase.sh
  • 停止
    $ /usr/local/hbase/bin/stop-hbase.sh

HBase shell でテスト

$ /usr/local/hbase/bin/hbase shell
hbase(main):001:0> help
hbase(main):002:0> create "mylittletable", "mylittlecolumnfamily"
hbase(main):003:0> describe "mylittletable"
hbase(main):004:0> put "mylittletable", "myrow", "mylittlecolumnfamily:x", "v"
hbase(main):005:0> get "mylittletable", "myrow"
hbase(main):006:0> scan "mylittletable"

パフォーマンス

チューニング

  • HBase を安定稼動させるためには、Java VM のレスポンス悪化を防ぐことが非常に重要
  • サーバーには十分な RAM を搭載し、Java VM のヒープサイズや、カーネルパラメータ(vm.swappiness)も適切に設定する必要がある
    • HBase の一般的な構成、Region Server、HDFS Data Node、Hadoop Task Trackerを同じサーバー上で稼働させるためには、最低でも、8GB の RAM を搭載する必要がある。20GB前後搭載するのが一般的。
  • Facebook の HDFS クラスターは 21 PB !!!
    • 21 PB of storage in a single HDFS cluster
    • 2000 machines
    • 12 TB per machine (a few machines have 24 TB each)
    • 1200 machines with 8 cores each + 800 machines with 16 cores each
    • 32 GB of RAM per machine
    • 15 map-reduce tasks per machine

運用

各言語での使用

Scala

事例


トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2017-04-09 (日) 21:28:04 (2567d)