CentOS 6.2にvSphere SDK for Perl 5.0をインストール

vSphere SDK for Perl 5.0のサポートプラットフォームはRed Hat Enterprise Linux (RHEL) 5.5ですが、CentOS 6.2(64bit)にインストールしてみました。
もちろん正式なサポートを受けることはできないと思いますが、自宅のお遊び環境であれば問題ないでしょう。


以下ページからvSphere SDK for Perl 5.0をダウンロードします。
vSphere Perl SDK - VMware {code}

まず初めに必要なパッケージを事前にインストールします。

# yum install openssl-devel
# yum install perl-CPAN
# yum install gcc
# yum install libuuid-devel
# yum install libxml2-devel

ダウンロードしたvSphere SDK for Perlを解凍します。

# tar zxvf VMware-vSphere-Perl-SDK-5.0.0-422456.x86_64.tar.gz
# cd vmware-vsphere-cli-distrib

インストールにはhttp_proxyとftp_proxyの設定が必要のようですが、
私の環境ではproxyは必要なかったので取り敢えずftpproxyとhttpproxyチェック行(5515〜5518)をコメントアウトしました。

# cp -p vmware-install.pl vmware-install.pl.bak
# vi vmware-install.pl
   5515 #       if ( !( $ftpproxy && $httpproxy)) {
   5516 #          uninstall_file($gInstallerMainDB);
   5517 #         exit 1;
   5518 #       }

編集後、インストールスクリプトを実行します。

# ./vmware-install.pl

ライセンスに合意するか確認があるのでyesと入力します。

Do you accept? (yes/no) yes

ライセンスに合意した後にPerl モジュールのCPANインストールが走るので少し時間がかかります。
Perlモジュールのインストールに成功するとvSphere SDK for Perlのインストールディレクトリを聞いてきます。
インストールディレクトリに特に指定が無ければ、そのままEnterキーを押下します。

In which directory do you want to install the executable files?
[/usr/bin]

インストールに成功したらスクリプトをテスト実行してみましょう。

version 0.78 or newer

Enjoy,

 --the VMware team

# vmware-cmd --version
vSphere SDK for Perl version: 5.0
Script 'vmware-cmd' version: 5.0

バージョン情報が正常に出力されればインストール終了です。


では早速ESXiに対してvmware-cmdを実行してみましょう。
まずESXiに対してvmware-cmdを実行する前に、SSL証明書のホスト名チェックをOFFにする必要があります。
PERL_LWP_SSL_VERIFY_HOSTNAME=0をexportしてからvmware-cmdを実行しましょう。

# export PERL_LWP_SSL_VERIFY_HOSTNAME=0
# vmware-cmd --server 192.168.1.100 --username root --password abcd1234 -l

/vmfs/volumes/xxxxxxxx-xxxxxxxxx-xxxxxxxxxxxxxxxxxxx/vCenter/vCenter.vmx
/vmfs/volumes/xxxxxxxx-xxxxxxxxx-xxxxxxxxxxxxxxxxxxx/vZabbix/vZabbix.vmx
/vmfs/volumes/xxxxxxxx-xxxxxxxxx-xxxxxxxxxxxxxxxxxxx/vESXi5.0_1/vESXi5.0_1.vmx
/vmfs/volumes/xxxxxxxx-xxxxxxxxx-xxxxxxxxxxxxxxxxxxx/vESXi5.0_2/vESXi5.0_2.vmx

ちなみに上記環境変数設定をvmware-cmdの先頭に書いてしまう手もあります。。

# vi /usr/bin/vmware-cmd
#!/usr/bin/perl -w
#
# Copyright 2006 VMware, Inc.  All rights reserved.

use strict;
use warnings;

$ENV{PERL_LWP_SSL_VERIFY_HOSTNAME}=0; # これ、、

Enjoy.

参考サイト

CentOS 5へVMware vSphere CLI (ver.4.1)をインストールする方法は@namikawa氏のサイトが参考になります。
インストールの参考にもさせていただきました。ありがとうございます。
LinuxにVMware vSphere CLIをインストール - id:rx7(@namikawa)の技術メモ - 技術日記

予算10万円で自作するVMwareESXi 5.0検証機

自宅でのお遊び用でVMwareESXi 5.0検証機を自作したので構成と選定のポイントメモを公開します。

仮想化支援技術(Intel)

インテルの仮想化支援技術にはIntel VT-xとIntel VT-dという2つの技術があります。

この機能により複数ゲストOSの平行動作を効率的に行うことができます。

Intel VTのH/W対応要件には以下の2項目があります。

自作する際には上記2項目に留意しパーツ選択するようにしましょう。

CPUの選択

CPUによってはVT-xやVT-dに対応していない製品もありますのでCPUを選択する際は十分注意してください。

対応情報については以下インテルサイトの「Advanced Technologies」カテゴリーに記載があります。

マザーボードの選択

マザーボードを選択する際にもVT-xとVT-dに対応しているか確認する必要があります。

Intelマザーボードの対応情報については以下インテルサイトを参考にしてください。
インテルサポート

その他マザーボードの対応状況については以下サイトも参考になると思います。
Superguide: Z68 Sandybridge Motherboard VT-d Test Matrix: Which Mobo/CPU combo works with VMware ESXi 4.1U1 VMDirectPath feature? | TinkerTry IT @ Home

VT-xは最近のマザーボードであれば大体対応していますが、
VT-dは殆ど対応が無い状況なのでPCIパススルーを利用される方は特に注意してください。

メモリの選択

ESXiでスワップが発生すると極端に挙動が遅くなるためメモリは出来るだけ多く搭載することをお勧めします。
私の環境では8GBメモリ x 4枚で32GB構成にしました。

ディスクの選択

IOPSを考えるとSSDにしたいところですが大容量化がコスト的に難しいので現状ではHDDを選択することになると思います。
少しでもスピードを速くしたい場合は7200rpm以上のHDDを選定するといいでしょう。

オプション:ESXi 5.0用USBメモリの選択

ESXi 5.0はHDD,SSDだけでなく、USBメモリにインストールすることも可能です。
VMイメージ用とESXi 5.0用を別ディスクにしたい場合は、USBメモリへのインストールも検討できます。

オプション:ホストキャッシュ用SSDの選択

ESXiにはメモリのオーバーコミット機能があります。
この機能により物理環境に搭載されたメモリの容量以上に各仮想マシンに対してメモリを割り当て、仮想的なスワップでコントロールすることができま す。

ESXi 5.0からメモリのオーバーコミットを支援する目的でホストキャッシュ機能が実装されました。
この機能は、SSDをハイパーバイザのメモリスワップ置き場にすることで、メモリスワップ時の速度低下を軽減させる機能です。
ホストキャッシュ機能によりメモリのオーバーコミットを行った場合でも、パフォーマンスへの影響を最小限に抑えることが出来るようです。

上記メリットがあるため搭載メモリ容量では足りないと思われる場合にはSSDのホストキャッシュ化をお勧めします。
SSD選択時は書き込み性能に注目して選定するといいでしょう。

オプション:NICの選択

オンボードNICとしてよく利用されるRealtek NIC(通称蟹)がESXi 5.0からサポートされました。
これにより大抵オンボードNICで事足りると思いますが、複数LANポート用意して遊びたいのであればNICを追加購入するといいでしょう。
NICを追加購入する場合はIntelNICが動作報告も多くお勧めです。

今回私が組んだ構成と値段

今回予算10万程度で手近のお店を回って購入したため9.1万円程度の構成になりました。
多分最安のお店でパーツを集めれば8万円前後で構築可能だと思います。

  • ケース:Scythe MONOBOX Micro 5,780円
  • 電源:SILVERSTONE SST-ST50F-P (ATX 500W 80+ブロンズ) 6,980円
    • 常時起動であれば80+認証電源で80+ Bronze以上を推奨です。
  • マザボ:ASUS P8Z68-M PRO 10,480円
  • CPU:Intel Core i7 2600 BOX (1155/3.40/8M) 23,780円
    • VT-x, VT-d対応です。
  • メモリ:GEIL GOC332GB1333C9QC (DDR3 PC3-10600 8GBx4) 16,970円
  • HDD:HITACHI HDS723020BLA642 (2TB 7200rpm 64M) 16,480円
    • スピード優先で選定しました。
  • オプション:DVDドライブ:Pioneer DVR-217J 5,380円
    • ESXiをインストール時に使用しました。頑張れば無くてもインストールできるようです。
  • オプション:DVD-Rメディア: 2,080円
    • ESXiのインストールメディア用のDVD-Rです。
  • オプション:書籍: VMware徹底入門 第二版 3,654円

今回組んだESXi 5.0検証機のゲストOSでCrystalDiskMarkを動かしてみましたので参考に下記します。

                                                                                                                                            • -
CrystalDiskMark 3.0.1 x64 (C) 2007-2010 hiyohiyo Crystal Dew World : http://crystalmark.info/
                                                                                                                                            • -
* MB/s = 1,000,000 byte/s [SATA/300 = 300,000,000 byte/s] Sequential Read : 116.638 MB/s Sequential Write : 117.778 MB/s Random Read 512KB : 46.140 MB/s Random Write 512KB : 61.380 MB/s Random Read 4KB (QD=1) : 0.606 MB/s [ 147.9 IOPS] Random Write 4KB (QD=1) : 1.383 MB/s [ 337.6 IOPS] Random Read 4KB (QD=32) : 1.432 MB/s [ 349.5 IOPS] Random Write 4KB (QD=32) : 1.381 MB/s [ 337.3 IOPS] Test : 1000 MB [C: 49.5% (19.7/39.9 GB)] (x5) Date : 2012/02/19 22:53:01 OS : Windows Server 2008 R2 Enterprise Edition (Full installation) SP1 [6.1 Build 7601] (x64)

MySQL 5.5.8 GA ベンチマーク

MySQL 5.5の正式版がリリースされたようです。

次の記事で「Linux環境では読み出し/書き込みが360%、読み出しのみが200%だった。」とあったのでmysqlslapを動かしてみま した。

今回、MySQL 5.5.8とMySQL 5.1.54を比較してみました。

実行環境

さくらのVPS の標準構成で yum update を実行済みです。

# cat /etc/redhat-release
CentOS release 5.5 (Final)
# uname -a
Linux wwwxxxxu.sakura.ne.jp 2.6.18-194.8.1.el5 #1 SMP Thu Jul 1 19:04:48 EDT 2010 x86_64 x86_64 x86_64 GNU/Linux

MySQL

rpmでインストールし両バージョンともmy-large.cnfの設定を利用しました。

mysqlslapオプション

# mysqlslap --auto-generate-sql --auto-generate-sql-guid-primary\
   --engine=innodb --number-int-cols=10 --number-char-cols=10\
   --concurrency=20 --auto-generate-sql-write-number=10000\
   --auto-generate-sql-execute-number=10000\
   --auto-generate-sql-load-type=アクセスパターン -p
アクセスパターン 内容
mixed 挿入とスキャンを半々ずつ
read テーブルのスキャン
write テーブルへの挿入
update 主キーの更新
key 主キーの読み取り

実行結果(Average)

記事通り全体的に性能向上が見えます。
特にwriteが早くなっているようです。
これは「非同期IOのまとめ投げ」が効いているのでしょうか。

MySQL mixed read write update key
5.1.54 120.344sec 9383.116sec 219.577sec 281.976sec 26.459sec
5.5.8 53.374sec 6110.888sec 61.536sec 96.021sec 18.858sec
何倍 2.254倍 1.535倍 3.568倍 2.936倍 1.403倍

重要:2010/12/20訂正

上記ベンチマークでは5.5.8でスピードが圧倒的に速くなっているように見えますが
InnoDB関係のパラメータデフォルト値が変更になっているだけでした。

  • innodb_buffer_pool_size:8388608(8MB)=>134217728(128MB)
  • innodb_additional_mem_pool_size:1048576(1MB)=>8388608(8MB)
  • innodb_log_buffer_size:1048576(1MB)=>8388608(8MB)

今晩にでもパラメーター合わせた後のベンチマーク結果をアップします。

この点についてSH2さんからのブクマコメントで「my-large.cnfはMyISAM用の設定ファイルで、InnoDBの設定は書いてありません。このケースでは5.1⇒5.5でinnodb_buffer_pool_sizeのデフォルト値が8MBから128MBに増えた点が大きいと思います」と指摘頂きました。有難うございました。

HBase 基礎文法最速マスター

基礎文法最速マスターが流行のようなので、
便乗して勉強がてらにHBaseの基本操作について纏めてみます。

これを読めばGoogleBigTableのクローンであるHBaseの基本操作について何となく理解できるかも?です。
他の基礎文法最速マスターと同じように簡易リファレンスを兼ねていますので足りない部分をあればご指摘ください。


HBaseは2010-02-01時点で最新のHBase0.20.3を対象としています。
インストール方法については前記事を参照ください。

対話式シェルの実行

基本

HBaseではHBase Shellという対話式シェルが提供されています。

$ hbase shell
HBase Shell; enter 'help<RETURN>' for list of supported commands.
Version: 0.20.3, r902334, Mon Jun 25 13:13:08 PDT 2010
hbase(main):001:0>

対話式シェルではコマンドを実行することにより対話的にHBaseに接続することができます。
次の例ではhelpコマンドを実行し利用できるコマンドの一覧を確認しています。

hbase(main):001:0> help
HBASE SHELL COMMANDS:
 alter     Alter column family schema;  pass table name and a dictionary
           specifying new column family schema. Dictionaries are described
           below in the GENERAL NOTES section.  Dictionary must include name
           of column family to alter.  For example,
コマンドの実行結果をHBase Shellに渡して実行

パイプを使ってコマンドを渡すことによりHBase Shellを実行することもできます。

$ echo 'help' | hbase shell
HBase Shell; enter 'help<RETURN>' for list of supported commands.
Version: 0.20.3, r902334, Mon Jun 25 13:13:08 PDT 2010
help
HBASE SHELL COMMANDS:
 alter     Alter column family schema;  pass table name and a dictionary
           specifying new column family schema. Dictionaries are described
           below in the GENERAL NOTES section.  Dictionary must include name
           of column family to alter.  For example,

HBase Shellの実行結果をファイルに出力することもできます。

$ echo 'help' | hbase shell > hbase_help.txt
スクリプト実行

hbase shellの引数でHBase Shellスクリプトパスを指定することで実行することもできます。

$ cat /tmp/hbase.txt
help
exit

$ hbase shell /tmp/hbase.txt
HBase Shell; enter 'help<RETURN>' for list of supported commands.
Version: 0.20.3, r902334, Mon Jun 25 13:13:08 PDT 2010
help
HBASE SHELL COMMANDS:
 alter     Alter column family schema;  pass table name and a dictionary
           specifying new column family schema. Dictionaries are described
           below in the GENERAL NOTES section.  Dictionary must include name
           of column family to alter.  For example,

またJRubyスクリプトパスを指定することで実行することもできます。

$ cat /tmp/scan.rb
{{{c = HBaseConfiguration.new() t = HTable.new(c, "TestTable") columns = ["info:"].to_java(java.lang.String) s = t.getScanner(columns, "", "0000000003", HConstants::LATEST_TIMESTAMP).iterator() while s.hasNext() do

    * puts String.from_java_bytes s.next().getRow() 

end}}}

$ hbase shell /tmp/scan.rb
HBase Shellトリック

ホームディレクトリに.irbrcというファイルを作成してHBase Shellの設定をカスタマイズすることができます。

以下の設定の場合はHBase Shellで実行したコマンドの履歴を200件保持することができます。
履歴は.irb-save-historyに記録されるためシェルを再起動しても履歴は保持されます。
HBase Shellを頻繁に再起動する場合に便利です。

$ cat ~/.irbrc
require 'irb/ext/save-history'
IRB.conf[:SAVE_HISTORY] = 200
IRB.conf[:HISTORY_FILE] = "#{ENV['HOME']}/.irb-save-history"

HBase基本操作 - クラスタ

HBaseクラスターの情報確認

クラスターの確認を行うにはstatusコマンドを実行します。
statusコマンドは引数に'simple','summary','detailed'の3種類を指定することができ、
引数を指定しない場合は'summary'が表示されます。

hbase(main):001:0> status
1 servers, 0 dead, 3.0000 average load
hbase(main):002:0> statsu 'simple'
1 live servers
    TAKAO-NOTE:3398 1265196434625
        requests=0, regions=3, usedHeap=22, maxHeap=996
0 dead servers
hbase(main):003:0> status 'summary'
1 servers, 0 dead, 3.0000 average load
hbase(main):004:0> status 'detailed'
version 0.20.3
0 regionsInTransition
1 live servers
    TAKAO-NOTE:3398 1265196434625
        requests=0, regions=3, usedHeap=24, maxHeap=996
        .META.,,1
            stores=2, storefiles=3, storefileSizeMB=0, memstoreSizeMB=0, storefileIndexSizeMB=0
        test,,1265160603921
            stores=1, storefiles=1, storefileSizeMB=0, memstoreSizeMB=0, storefileIndexSizeMB=0
        -ROOT-,,0
            stores=1, storefiles=2, storefileSizeMB=0, memstoreSizeMB=0, storefileIndexSizeMB=0
0 dead servers
クラスターの停止

HBase Shellからクラスターを停止することができます。
ただ、HBase Shellから起動することは出来ませんので実行には注意する必要があります。

hbase(main):001:0> shutdown
hbase(main):002:0> status
NativeException: org.apache.hadoop.hbase.MasterNotRunningException: master has been shut down

HBase基本操作 - Tableの操作

MySQLを比較対照としてHBase Shellの基本操作を記述します。
HBaseではテーブルの有効/無効の考え方があり、alterやdrop操作はテーブル無効後に行います。

Tableの作成
  • HBase Shell
create 'City', {NAME=>'ID'}, {NAME=>'Name'}, {NAME=>'CountryCode'}, {NAME=>'Population'}
CREATE TABLE City (
  ID int(11) NOT NULL auto_increment,
  Name char(35) NOT NULL default '',
  CountryCode char(3) NOT NULL default '',
  Population int(11) NOT NULL default '0',
  PRIMARY KEY  (ID)
) ENGINE=MyISAM DEFAULT CHARSET=latin1;

Tableの一覧表示

  • HBase Shell
hbase(main):073:0> list
City
1 row(s) in 0.0160 seconds
SHOW TABLES;

Tableの無効化(HBase独自)

hbase(main):071:0> disable 'City'
0 row(s) in 5.0620 seconds

Tableの有効化(HBase独自)

hbase(main):072:0> enable 'City'
0 row(s) in 0.0160 seconds

Tableの存在確認(HBase独自)

hbase(main):070:0> exists 'City'
true
1 row(s) in 0.0000 seconds

Tableの情報表示(HBase独自)

hbase(main):074:0> describe 'City'
DESCRIPTION                                                             ENABLED
 {NAME => 'City', FAMILIES => [{NAME => 'CountryCode', VERSIONS => '3', true
  COMPRESSION => 'NONE', TTL => '2147483647', BLOCKSIZE => '65536', IN_
 MEMORY => 'false', BLOCKCACHE => 'true'}, {NAME => 'ID', VERSIONS => '
 3', COMPRESSION => 'NONE', TTL => '2147483647', BLOCKSIZE => '65536',
 IN_MEMORY => 'false', BLOCKCACHE => 'true'}, {NAME => 'Name', VERSIONS
  => '3', COMPRESSION => 'NONE', TTL => '2147483647', BLOCKSIZE => '655
 36', IN_MEMORY => 'false', BLOCKCACHE => 'true'}, {NAME => 'Population
 ', VERSIONS => '3', COMPRESSION => 'NONE', TTL => '2147483647', BLOCKS
 IZE => '65536', IN_MEMORY => 'false', BLOCKCACHE => 'true'}]}
1 row(s) in 0.0320 seconds
Tableのカラム追加
  • HBase Shell
disable 'City'
alter 'City', {NAME=>'District'}
enable 'City' 
ALTER TABLE City ADD District char(20);
Tableのカラム削除
  • HBase Shell
disable 'City'
alter 'City', {NAME=>'District', METHOD=>'delete'}
enable 'City' 
ALTER TABLE City DROP District;
Tableの削除
  • HBase
disable 'City'
drop 'City'
DROP TABLE City;

HBase基本操作 - データの操作

データの挿入

IDがindexになるようにデータを挿入しています。

  • HBase
put 'City', '1', 'ID', '1'
put 'City', '1', 'Name', 'Kabul'
put 'City', '1', 'CountryCode', 'AFG'
put 'City', '1', 'Population', '1780000'
put 'City', '2', 'ID', '2'
put 'City', '2', 'Name', 'Qandahar'
put 'City', '2', 'CountryCode', 'AFG'
put 'City', '2', 'Population', '237500'
put 'City', '3', 'ID', '3'
put 'City', '3', 'Name', 'Herat'
put 'City', '3', 'CountryCode', 'AFG'
put 'City', '3', 'Population', '186800'
INSERT INTO City VALUES (1, 'Kabul', 'AFG', 1780000);
INSERT INTO City VALUES (2,'Qandahar','AFG', 237500);
INSERT INTO City VALUES (3,'Herat','AFG', 186800);
データの検索(全て)
  • HBase
hbase(main):051:0> scan 'City'
ROW                          COLUMN+CELL
 1                           column=CountryCode:, timestamp=1265205866562, value=AFG
 1                           column=ID:, timestamp=1265205853640, value=1
 1                           column=Name:, timestamp=1265205860375, value=Kabul
 1                           column=Population:, timestamp=1265205872140, value=1780000
 2                           column=CountryCode:, timestamp=1265207385421, value=AFG
 2                           column=ID:, timestamp=1265207385390, value=2
 2                           column=Name:, timestamp=1265207385390, value=Qandahar
 2                           column=Population:, timestamp=1265207385421, value=237500
 3                           column=CountryCode:, timestamp=1265207385453, value=AFG
 3                           column=ID:, timestamp=1265207385437, value=3
 3                           column=Name:, timestamp=1265207385437, value=Herat
 3                           column=Population:, timestamp=1265207385468, value=186800
3 row(s) in 0.0310 seconds
SELECT * FROM City;
データの検索(範囲指定)
  • HBase
hbase(main):050:0> scan 'City', {STARTROW => '1', STOPROW => '3'}
ROW                          COLUMN+CELL
 1                           column=CountryCode:, timestamp=1265205866562, value=AFG
 1                           column=ID:, timestamp=1265205853640, value=1
 1                           column=Name:, timestamp=1265205860375, value=Kabul
 1                           column=Population:, timestamp=1265205872140, value=1780000
 2                           column=CountryCode:, timestamp=1265207385421, value=AFG
 2                           column=ID:, timestamp=1265207385390, value=2
 2                           column=Name:, timestamp=1265207385390, value=Qandahar
 2                           column=Population:, timestamp=1265207385421, value=237500
2 row(s) in 0.0310 seconds
SELECT * FROM City WHERE ID between 1 and 2;
データの検索(列全て)
  • HBase
hbase(main):019:0> get 'City', '2'
COLUMN                       CELL
 CountryCode:                timestamp=1265206057406, value=AFG
 ID:                         timestamp=1265206057375, value=2
 Name:                       timestamp=1265206057390, value=Qandahar
 Population:                 timestamp=1265206058359, value=237500
4 row(s) in 0.0160 seconds
SELECT * FROM City WHERE ID = 2;
データの検索(列指定)
  • HBase
hbase(main):022:0> get 'City', '2', {COLUMN => 'Name'}
COLUMN                       CELL
 Name:                       timestamp=1265206057390, value=Qandahar
1 row(s) in 0.0150 seconds
SELECT Name FROM City WHERE ID = 2;
データの削除(項目削除)
  • HBase
delete 'City', '2', 'Name'
UPDATE City SET Name = null WHERE ID = 2;
データの削除(行削除)
  • HBase
deleteall 'City', '2'
DELETE FROM City WHERE ID = 2;
データの削除(一括削除)

HBaseのtrancateの内部処理はdisable,drop,createとなっています。

  • HBase
trancate 'City'
TRANCATE TABLE City;

最後に

さて、ここまででHBase Shellの基本操作を勉強しました。
RDB使いの皆さんはRDBと操作が違ってメンドクセと思われたかもしれません。
上記では時間の都合で取り上げませんでしたがHadoopはデータを2次元の表ではなく多次元で持ちます。
(時間が出来たら追記します。。)


実はここまで読ませておきながら何なんですが・・・
HadoopにはRDBのようなSQLライクにMapReduce操作ができるHiveという別プロダクトがあります。
HiveはFacebookが開発を始めたプロダクトで
2008年12月に正式にHadoopプロジェクトにcontributeされました。
その他にも色々なプロジェクトがありますので興味がありましたら調べて頂ければと思います。

Cygwinを利用してWindowsにHBaseをインストール

HBaseは列指向DBMSで大規模分散処理に特化しているDBMSです。
大規模なデータ容量になってもパフォーマンスの劣化がおきにくいのが特徴で、
次世代のデータベースとして注目されています。

ここではHBaseをWindowsXPマシンにインストールする方法について記述します。
RDBMSとHBaseの違いをお手軽に?確認したいという方にお勧めです。

環境

HBaseをWindowsで利用するにはJDK6/Cygwin/SSHサービスが必要となります。
環境は2010-02-01時点の最新バイナリを利用しました。

Cygwinインストール

ここではCygwinのRootとLocal Packageを以下のように設定する前提で書きます。

それではCygwinをインストールしてみます。

  1. Local Packageディレクトリ(C:\cygwin\setup)を作成します。
  2. http://cygwin.com/setup.exeをC:\cygwin\setupディレクトリへダウンロードします。
  3. Administrator権限を持つユーザでsetup.exeをダブルクリックしインストールを開始します。
    1. "Choose A Download Source"ではInstall from Intarnetを選択します。
    2. "Select Root Install Directory"のRoot DirectoryではC:\cygwin\rootを設定します。
    3. "Select Local Package Directory"のLocal Package DirectoryではC:\cygwin\setupを設定します。
    4. "Select Your Internet Connection"ではDirect Connectionを選択します。
    5. "Choose A Download Site"ではjpドメインのサイトを選択します。
    6. "Select Packages"では追加パッケージを選択せずにインストールを行います。
    7. "Create Icons"では必要に応じてチェックを行いインストールを完了します。
  4. システム環境変数CYGWIN_HOMEを作成しC:\cygwin\rootを設定します。
  5. システム環境変数PATHに%CYGWIN_HOME%\binを追加します。
  6. Cygwinのインストールを完了するためにOSをリブートします。

SSHインストール

HBase(Hadoop)はコマンドの実行などにSSHによる通信を行います。
今回はCygwinを利用してSSHサービスをインストールします。

  1. 再度Cygwinのsetup.exeをダブルクリックしSSHのインストールを開始します。
  2. "Select Packages"が出るまでNextボタンを押下します。
  3. "Select Packages"で以下パッケージを選択しインストールします。
    1. Net=>OpenSSH
    2. Net=>tcp_wrappers
    3. Utils=>diffutils
    4. Libs=>zlib

SSH設定

  1. Cygwinを起動します。
  2. Cygwinで以下コマンドを実行し環境の適正化を行います。
    1. chmod +r /etc/passwd
    2. chmod u+w /etc/passwd
    3. chmod +r /etc/group
    4. chmod u+w /etc/group
    5. chmod 755 /var
  3. Cygwinで以下コマンドを実行しsshdの設定ファイルを作成します。
    • ssh-host-config -y
  4. Cygwinで以下コマンドを実行しsshサービスを起動します。
  5. Cygwinで以下コマンドを実行しWindowsのアカウントをCygwinに同期します。
    1. mkpasswd -cl > /etc/passwd
    2. mkgroup -local > /etc/group
  6. Cygwinで必要に応じて以下コマンドを実行しノーパスワードで接続できるようにします。
    1. ssh-keygen -t dsa -P '' -f ~/.ssh/id_dsa
    2. cat ~/.ssh/id_dsa.pub >> ~/.ssh/authorized_keys
    3. chmod 600 ~/.ssh/authorized_keys
  7. 念のため以下コマンドで動作確認します。
    1. 新しくCygwin端末を開きます。
    2. Cygwinで以下コマンドを実行しsshログインします。
    3. Cygwinで以下コマンドを実行しCygwinを終了します。
      • exit

Javaインストール

http://java.sun.com/javase/ja/6/download.htmlからJDK1.6をダウンロードしてインストールします。
ここではJavaを以下のディレクトリにインストールします。

Java設定

  1. Cygwinからアクセスしやすいように/usr/local/にシンボリックリンクをはります。
    • ln -s /cygdrive/c/java/jdk1.6.0_18 /usr/local/jdk1.6.0_18
    • Program File以下にインストールした場合
      • ln -s /cygdrive/c/Program\ Files/Java/ /usr/local/
  2. 念のため以下コマンドで動作確認をします。
    1. cd /usr/local/jdk1.6.0_18
    2. ./bin/java -version

HBaseインストール

  1. http://www.apache.org/dyn/closer.cgi/hadoop/hbase/からHBaseをダウンロードします。
  2. hbase-0.20.3.tar.gzを解凍ソフトを使って解凍します。
  3. 解凍したファイルをC:\cygwin\root\usr\local\以下に配置し、Cygwinから/usr/local/hbase-で接続できるようにします。

HBase設定

  1. /uar/local/hbase-0.20.3/conf/hbase-env.shに追記します。
    1. export JAVA_HOME=/usr/local/jdk1.6.0_18
    2. export HBASE_IDENT_STRING=$HOSTNAME
  2. /usr/local/hbase-0.20.3/conf/hbase-default.xmlを編集します。
    1. hbase.rootdirにfile:///C:/cygwin/root/tmp/hbase/data
    2. hbase.tmp.dirにC:/cygwin/root/tmp/hbase/tmp
    3. hbase.zookeeper.quorumに127.0.0.1
  3. Cygwinで以下コマンドを実行しhbase.rootdirとhbase.tmp.dirのディレクトリを作成します。
    1. mkdir -p /tmp/hbase/data
    2. mkdir -p /tmp/hbase/tmp
    3. chmod 777 /tmp/hbase/data
    4. chmod 777 /tmp/hbase/tmp

HBase動作テスト

  1. Cygwinを起動します。
  2. Cygwinで以下コマンドを実行しHBaseを起動します。
    1. cd /usr/local/hbase-0.20.3/
    2. ./bin/start-hbase.sh
  3. Cygwinで以下コマンドを実行しhbase shellを起動します。
    • ./bin/hbase shell
  4. hbase shellで以下コマンドを実行しコマンドを確認します。
    • help
  5. hbase shellで以下コマンドを実行しテーブルを作成します。
    • create 'test', 'data'
  6. hbase shellで以下コマンドを実行しテーブルを確認します。
    • list
  7. hbase shellで以下コマンドを実行しデータを挿入します。
    1. put 'test', 'row1', 'data:1', 'value1'
    2. put 'test', 'row2', 'data:2', 'value2'
    3. put 'test', 'row3', 'data:3', 'value3'
  8. hbase shellで以下コマンドを実行しデータが表示されればテスト成功です。
    • scan 'test'
  9. hbase shellで以下コマンドを実行しテーブルを削除します。
    1. disable 'test'
    2. drop 'test'
  10. hbase shellで以下コマンドを実行しhbase shellを終了します。
    • exit
  11. Cygwinで以下コマンドを実行しHBaseを停止します。
    1. cd /usr/local/hbase-0.20.3/
    2. ./bin/stop-hbase.sh

HBase REST動作テスト

  1. Cygwinを起動します。
  2. Cygwinで以下コマンドを実行しHBaseを起動します。
    1. cd /usr/local/hbase-0.20.3/
    2. ./bin/start-hbase.sh
  3. Cygwinで以下コマンドを実行しhbase shellを起動します。
    • ./bin/hbase shell
  4. hbase shellで以下コマンドを実行しテーブルを作成します。
    • create 'test', 'data'
  5. hbase shellで以下コマンドを実行しデータを挿入します。
    1. put 'test', 'row1', 'data:1', 'value1'
    2. put 'test', 'row2', 'data:2', 'value2'
    3. put 'test', 'row3', 'data:3', 'value3'
  6. hbase shellで以下コマンドを実行しhbase shellを終了します。
    • exit
  7. Cygwinで以下コマンドを実行しHBaseのRESTサービスを起動します。
    • ./bin/hbase-daemon.sh start rest
  8. ブラウザで以下のURLに接続し作成したtestテーブルが表示されればテスト成功です。
  9. CygwinでC以下コマンドを実行しHBaseのRESTサービスを停止します。
    • ./bin/hbase-daemon.sh stop rest
  10. Cygwinで以下コマンドを実行しHBaseを停止します。
    • ./bin/stop-hbase.sh

最後に

これでHBaseで遊べる環境は整いました。

Hadoopに関する情報がまだまだインターネットには少ないので
皆さんも色々試して情報を共有していただければと思います。。

データベース全体の1パーセントをSSDに移行し最大50パーセントの"データ取込"速度向上!

あけましておめでとうございます。
前回以下のエントリーを書いたわけですが無事に高速化に成功しました。

レイテンシが低くIOPS性能が高いのは大きな強みですね。
機会があればどこかで話せたらと思います。

Informix最新動向セミナー'09 Autumn

IBMさん主催のInformixのセミナーに参加してきました。

場所:IBM本社(箱崎)
日時:2009/11/27 セミナー14:00-17:00 & 懇親会19:00-22:00

・コミュニティ広場がオープンしたよ
http://www.ibm.com/developerworks/forums/forum.jspa?forumID=1638

CISCOのUnified Call ManagerでInformixが採用されてる
http://www.youtube.com/watch?v=HjHTqIQCaaM
 =>8万サイトで稼動中
 =>Informixをブラックボックスとして利用
 =>アラーム機能を使って全自動復旧のメカニズムを実現

・Informix11.50へのアップグレードは簡単

・InformixのアップグレードよりOSの移行のほうが大変

ヤマハ発動機さんはワールドワイドシステムをInformixで組んでる

HDRはactive、active、activeで使えるのでいい
 ただオプティマイザ等は分散するけど最終的なIOはprimaryサーバーで行う
 参照系がメインのWebアプリだと使える

・OracleRACのようなシェアードディスクタイプのクラスタ(SDS)も結構いいらしい