Category Archives: Linux

プログラム言語awk、ファイル入出力処理にちょうどいい

ファイルの入出力処理は、日常業務で嫌というほど書いているが、
そのうちのほとんどが簡易的な調査目的として使用する。

また、そもそも私はJava言語をメインとしているため、
どんな時でもJavaでプログラミングすることが当然と思っていた。

それがあるきっかけでプログラム言語「awk(gawk)」を触ることになった。

Javaで書くよりも明らかに効率が上がったので、ここでawkについて紹介する。

■実装内容
・指定したファイルを1行ずつ読み込む。
・3000行に一度の割合で出力

■Javaの場合(class構文など省略)

BufferedReader br =
                new Bufferedreader(new InputSteamReader(
                        new FileInputStream(new File("input.tsv")), "UTF-8"));

BufferedWriter bw =
                new BufferedWriter(new OutputStreamWriter(
                        new FileOutputStream(new File("output.tsv")), "UTF-8"));

final int writeCount = 3000;
int lineCount = 0;

String line;
while((line = br.readLine()) != null) {
     lineCount++;

     if(lineCount == writeCount) {
          bw.write();

          lineCount = 0;
     }
}

br.close();

bw.flush();
bw.close();

■awkの場合

#!/usr/local/bin/gawk
# line_print.awk:
BEGIN {
     writeCount = 3000;
     lineCount = 0;
}

{
     lineCount++;

     if (lineCount == writeCount) {
          print $0;

          lineCount = 0;
     }
}

END {

}

awkは、コンパイルする必要がないので、プログラム実行までの手順も断然早い。
line_print.awkという名前のファイルを作成して、
上記のプログラムを記述。
実行方法は、以下。

# gawk -f line_print.awk input.tsv > output.tsv

また1行ずつカンマ区切り、タブ区切りなどで処理したい場合、
実行オプションに「何で区切るか」を指定すれば、簡単に操作できる。

動作確認していないので、間違ってたらゴメンね。

[お役立ちリンク]Hadoop→HBaseのインストール

先日、HadoopとHBaseをインストールしていた時に
今まで見た中で一番分かりやすい解説ページがあったので紹介する。

■Hadoop/Hbase Clusterの構築
http://lunarium.info/arc/index.php/Hadoop/Hbase_Cluster%E3%81%AE%E6%A7%8B%E7%AF%89

これで簡単に「話題のクラウド化」へ!?

Asial blogで紹介されたLinuxコマンドが嬉しかった

知っておくと役立つかもしれないLinuxコマンド(サーバ確認関係)
http://blog.asial.co.jp/605

こういったよく使用するコマンド一覧は、
どこへいっても1ページにまとめられていないため、とても役に立つ。

アシアル株式会社か。
すごい頑張ってる感があるコーポレートサイトだな。面白い。

Linuxコマンドによるメール送信時にファイルをuuencodeで添付する

uuencodeについて詳しく知らないが、
とりあえずCSVファイルを添付ファイルにして、メールを送信したかった。
これを達成するためには、uuencodeというコマンドが必要なようで、

早速検索してみた。

パッケージがなかなか見つからないと思っていたら、
どうやらuuencodeはsharutilsというパッケージの中に含まれているらしい。

今度はsharutilsを検索。

ソースからインストールを行なおうとしたため、
なかなかパッケージが見つからない。

やっと見つけた。
http://ftp.yz.yamagata-u.ac.jp/pub/CTAN/tools/uuencode/sharutils/
または
http://ftp.yz.yamagata-u.ac.jp/pub/GNU/sharutils/REL-4.6/

あとは普通にインストールすればuuencodeが使える。

uuencodeによるメールへの添付方法は、以下。

・送信したいファイルパス
	/home/mikuriya/sample.csv
・添付ファイルの名前
	attachment.csv(名前は何でもよい)
・メールのタイトル
	Hello Guest
・メールの送信先アドレス
	xxxx@mikuriya.biz

uuencode /home/mikuriya/sample.csv attachment.csv | mail -s 'Hello Guest' xxxx@mikuriya.biz

psコマンドはオプションに「-」がいらないみたい

私は、psコマンドを打つときオプションに「-」をつけて実行する

ps -aux

ただ、これだと以下の警告文が出る

Warning: bad syntax, perhaps a bogus '-'? See /usr/share/doc/procps-3.2.7/FAQ

昔から気になってはいたが、ふと調べてみたところ、以下のサイトで言ってる。

ps -auxがエラー! – 年の差夫婦★気まま日記

psコマンドは普通オプションに「-」をつけないみたい。

unixODBCのインストール

ODBCのインストールを行なった。

今回はソースからコンパイルを行なう。

しかし、以下のようなエラーが発生した。

# tar -xvzf unixODBC-2.2.12.tar.gz
# cd  unixODBC-2.2.12
# ./configure --prefix=/home/hoge/unixODBC
...
checking for semundo union... yes
checking for socket in -lsocket... no
checking for gethostbyname in -lnsl... yes
checking for X... no
configure: checking for Qt
checking for Qt headers... no
configure: error: cannot find correct Qt headers!



http://blogs.grf-design.com/archives/2007/04/howto_linux_tal.html

正直に言うとソースからのインストールも試みたのですが、Qt ライブラリがないというエラーで
./configure から先に進みませんでした。Web サイトによると Qt は設定用の GUI に必要で、
なければ無視して先に進むとあったのですが…



だそうだ。

GUIは使用しないので–disable-guiオプションを付与。

# ./configure --prefix=/home/hoge/unixODBC --disable-gui
# make
# make install



成功。

1台のサーバに複数のMySQLをインストールしてみた。

前回はApacheだったが、今回は1台のサーバに複数のMySQL5.0をインストールするメモ。

Source downloads」から「Compressed GNU TAR archive」をダウンロード。



■今回の環境

以下の環境を想定して解説する。

サーバ:CentOS 5
ビット:64bit
MySQLインストールディレクトリ:/home/hoge/mysql
ポート番号:1235



■MySQLインストール

# su - hoge
# wget http://hoge.hoge.hoge/hoge/mysql-5.0.51a.tar.gz
# tar -xvzf mysql-5.0.51a.tar.gz
# cd mysql-5.0.51a
# ./configure --prefix=/home/hoge/mysql \
--with-mysqld-user=hoge \
--with-charset=utf8 \
--with-extra-charsets=all \
--with-tcp-port=1235
...
checking for tgetent in -lncurses... no
checking for tgetent in -lcurses... no
checking for tgetent in -ltermcap... no
checking for tgetent in -ltinfo... no
checking for termcap functions library... configure: error: No curses/termcap library found

上記のようなエラーが発生。

どうやらcursesとかいうものが指定されていないっぽい。これも64bitだからか?



configureのhelpを見たら「with-named-curses-libs」なるものが。

試しにオプションつけて再度実行。

# ./configure --prefix=/home/hoge/mysql \
--with-mysqld-user=hoge \
--with-charset=utf8 \
--with-extra-charsets=all \
--with-tcp-port=1235 \
--with-named-curses-libs=/usr/lib64/libncurses.so.5
# make
# make install

正常にいった。



my-medium.cnfをコピーする。

# cp /home/hoge/mysql-5.0.51a/support-files/my-medium.cnf /home/hoge/mysql/my.cnf

my.cnfを編集する。まずmysql.sockのパスが重複しそうなので変更する。

(修正前) socket = /tmp/mysql.sock
(修正後) socket = /home/hoge/mysql/mysql.sock

ポート番号もconfigure時に設定した値になっているか確認する。



■mysql_install_db

データベースの初期化を行なう。

# cd /home/hoge/mysql-5.0.51a/scripts
# ./mysql_install_db --user=hoge --datadir=/home/hoge/mysql/data



■MySQL起動、動作チェック

デフォルトのmy.cnfを読み込まないようmysqld_safeのオプションで指定する。

# ./mysqld_safe --defaults-file=/home/hoge/mysql/my.cnf \
--pid-file=/home/hoge/mysql/mysqld.pid \
--log-error=/home/hoge/mysql/log/mysqld.log &



ポート番号とmysql.sockを指定してログインする。

念のため、/home/hoge/mysql/bin以下のmysqlを使用した方がよいかもね。

# /home/hoge/mysql/bin/mysql -u root -P1235 --socket=/home/hoge/mysql/mysql.sock

64bit環境のサーバに複数のApacheを入れてみた。

1台のサーバに複数のApacheを入れる機会があったので、そのメモ。

すでに1個Apacheがインストールされていてポートはデフォルトの「80」だった。

通常通りインストールすると競合してしまうので、いろいろ設定した。



■今回の環境

今回は以下の環境を想定して解説する。

サーバ:CentOS 5
ビット:64bit
Apacheインストールディレクトリ:/home/hoge/apache2
ポート番号:1234



■Apacheインストール

# su - hoge
# wget http://hogehoge.hoge/hoge/httpd-2.0.63.tar.gz
# tar -xvzf httpd-2.0.63.tar.gz
# cd httpd-2.0.63
# ./configure --prefix=/home/hoge/apache2
# make
/usr/lib/libexpat.so: could not read symbols: File in wrong format
collect2: ld returned 1 exit status
make[2]: *** [htpasswd] エラー 1
make[2]: ディレクトリ `/home/hoge/httpd-2.0.63/support' から出ます
make[1]: *** [all-recursive] エラー 1
make[1]: ディレクトリ `/home/hoge/httpd-2.0.63/support' から出ます
make: *** [all-recursive] エラー 1

上記のようなエラーが発生。

libexpat.soの場所がダメっぽい。64bit版libexpat.soを使用しなくてはいけないらしい。



以下のオプションをつけて再度実行。正常にインストールできた様子。

# ./configure --prefix=/home/hoge/apache2 --with-expat=builtin
# make
# make install

Apacheのconfigureオプションは、helpを見ても存在しない奴があるから困る。



■ポート設定、起動チェック

デフォルトのままだと、既存のApacheと重複してしまうのでポートを変更する。

# vi /home/hoge/apache2/conf/httpd.conf

219行目辺りのListenをコメントアウトにし、新たに1234を定義。そして保存。

 219 #Listen 80
 220 # mikuriya 2008/03/25
 221 Listen 1234

Apacheを起動する。

# /home/hoge/apache2/bin/apachectl start

特にエラーなく起動されたので、ブラウザで確認する。

http://hoge.hoge.hoge:1234/

正常に見れた。既存のApacheも動作してるか見てみる。

http://hoge.hoge.hoge/

こちらも正常に動作している様子。





参考:http://hirokawa.netflowers.jp/entry/4969/

創聖合体「Hypertable」「Hadoop」が完了した

HypertableとHadoopを合体させたくてここまできた。

やっと合体が成功したように見えるので作業報告する。



今回、HypertableとHadoopをインストールしていることが前提で書く。

インストール環境はこんな感じ。

 Hypertableインストールディレクトリ:/home/hadoop/hypertable
 Hadoopインストールディレクトリ:/home/hadoop/hadoop/hadoop-0.15.3
 Master : 192.168.0.5
 Slave  : 192.168.0.8
          192.168.0.10
 作業は全て192.168.0.5(Master)で行なう



さて、「UpAndRunningWithHadoop」を見つつ解説していく。



■Hadoopを起動

一番最初から行なうので、まずnamenodeをリセットする。

 # ./bin/hadoop namenode -format
 08/02/20 22:09:12 INFO dfs.NameNode: STARTUP_MSG:
 /************************************************************
 STARTUP_MSG: Starting NameNode
 STARTUP_MSG:   host = 192.168.0.5/127.0.0.1
 STARTUP_MSG:   args = [-format]
 ************************************************************/
 08/02/20 22:09:12 INFO dfs.Storage: Storage directory /home/hadoop/hadoop/files...
 08/02/20 22:09:12 INFO dfs.NameNode: SHUTDOWN_MSG:
 /************************************************************
 SHUTDOWN_MSG: Shutting down NameNode at 192.168.0.5/127.0.0.1
 ************************************************************/



Hadoopを起動する。たぶんstart-all.shじゃなくてもいいんだが、

もう失敗したくないので。

 # ./bin/start-all.sh
 starting namenode, logging to /home/hadoop/hadoop/hadoop-0.15.3/bin/../logs/hadoo...
 192.168.0.10: starting datanode, logging to /home/hadoop/hadoop/hadoop-0.15.3/bin...
 localhost: starting datanode, logging to /home/hadoop/hadoop/hadoop-0.15.3/bin/.....
 192.168.0.8: starting datanode, logging to /home/hadoop/hadoop/hadoop-0.15.3/bin/...
 localhost: starting secondarynamenode, logging to /home/hadoop/hadoop/hadoop-0.15...
 starting jobtracker, logging to /home/hadoop/hadoop/hadoop-0.15.3/bin/../logs/had...
 192.168.0.10: starting tasktracker, logging to /home/hadoop/hadoop/hadoop-0.15.3/...
 localhost: starting tasktracker, logging to /home/hadoop/hadoop/hadoop-0.15.3/bin...
 192.168.0.8: starting tasktracker, logging to /home/hadoop/hadoop/hadoop-0.15.3/b...



■ディスクをマウント

「UpAndRunningWithHadoop」には「Step 2」でmountを行なえと書いてあるが、

Hypertableのインストール時にすでに行なったのでやらない。



■Hypertableの設定

Hadoopのマスターとつなげるための設定を行なう。

 # cd /home/hadoop/hypertable
 # vi ./conf/hypertable.cfg

私の場合は、HadoopのマスターとHypertableが同じサーバ上に存在するので、

以下のように設定する。

 HdfsBroker.fs.default.name=hdfs://localhost:9000
 Hyperspace.Master.Host=localhost
 Hypertable.Master.Host=localhost
 ※ポート番号の9000は、{HADOOP_HOME}/conf/hadoop-site.xmlのfs.default.nameと同じにするっぽい



■Hypertableの起動

あとは起動するだけ・・・と思っていたが、またもやエラー発生。

 # cd /home/hadoop/hypertable
 # ./bin/start-master.sh hadoop
 DfsBroker (hadoop) hasn't come up yet, trying again in 5 seconds ...
 Num CPUs=2
 HdfsBroker.Port=38030
 HdfsBroker.Reactors=2
 HdfsBroker.Workers=20
 HdfsBroker.Server.fs.default.name=hdfs://localhost:9000
 org.apache.hadoop.ipc.RPC$VersionMismatch: Protocol org.apache.hadoop.dfs.ClientProtocol
 version mismatch. (client = 14, server = 20)
         at org.apache.hadoop.ipc.RPC.getProxy(RPC.java:253)
         at org.apache.hadoop.dfs.DFSClient.createNamenode(DFSClient.java:141)
         at org.apache.hadoop.dfs.DFSClient.<init>(DFSClient.java:153)
         at org.apache.hadoop.dfs.DistributedFileSystem.initialize(DistributedFileSystem.java:66)
         at org.apache.hadoop.fs.FileSystem.get(FileSystem.java:159)
         at org.apache.hadoop.fs.FileSystem.getNamed(FileSystem.java:118)
         at org.apache.hadoop.fs.FileSystem.get(FileSystem.java:90)
         at org.hypertable.DfsBroker.hadoop.HdfsBroker.<init>(HdfsBroker.java:71)
         at org.hypertable.DfsBroker.hadoop.main.main(main.java:136)



バージョンが違うって。調べてみた。

 # ls -al /home/hadoop/hypertable/java/lib/
 -rw-r--r--  1 hadoop hadoop   38015  2月 14 22:33 commons-logging-1.0.4.jar
 -rw-rw-r--  1 hadoop hadoop 1449150  2月 20 22:53 hadoop-0.14.4-core.jar
 -rw-r--r--  1 hadoop hadoop   99995  2月 14 22:33 hypertable-0.9.0.jar
 -rw-r--r--  1 hadoop hadoop  106547  2月 14 22:33 junit-4.3.1.jar
 -rw-r--r--  1 hadoop hadoop  358180  2月 14 22:33 log4j-1.2.13.jar

HypertableはHadoopを呼び出す際に上記の「hadoop-0.14.4-core.jar」を使用して

Hadoopと連携するようだ。

そんで私がインストールしたHadoopのバージョンを調べてみた。

 # ls -al /home/hadoop/hadoop/hadoop-0.15.3/
 -rw-rw-r--   1 hadoop hadoop 1449150  1月 16 08:53 hadoop-0.15.3-core.jar
 -rw-rw-r--   1 hadoop hadoop   79006  1月 16 07:58 hadoop-0.15.3-examples.jar
 -rw-rw-r--   1 hadoop hadoop  495029  1月 16 08:53 hadoop-0.15.3-test.jar

HypertableはHadoop0.14.4を呼び出そうとしているが、

私がインストールしたHadoopは0.15.3だったためにこのエラーが発生したようだ。

というわけで、Hypertableに存在する「hadoop-0.14.4-core.jar」を

「hadoop-0.15.3-core.jar」に入れ替える必要がある。

 # rm /home/hadoop/hypertable/java/lib/hadoop-0.14.4-core.jar
 # cp /home/hadoop/hadoop/hadoop-0.15.3/hadoop-0.15.3-core.jar /home/hadoop/hypertable/java/lib/

それでは再度Hypertableを起動。

 # cd /home/hadoop/hypertable/
 # ./bin/start-master.sh hadoop
 Successfully started DFSBroker (hadoop)
 Successfully started Hyperspace
 Successfully started Hypertable.Master

やっと成功した。プロセスはこんな感じ。

 # ps -aux
 hadoop   22543  0.0  1.5 1253228 32060 pts/2 Sl   22:09   0:04 /usr/java/j2sdk/bin/java -Xmx1000m -Dhadoop.l...
 hadoop   22644  0.0  1.4 1246144 29580 ?     Sl   22:09   0:02 /usr/java/j2sdk/bin/java -Xmx1000m -Dhadoop.l...
 hadoop   22755  0.0  1.4 1245048 29624 ?     Sl   22:09   0:01 /usr/java/j2sdk/bin/java -Xmx1000m -Dhadoop.l...
 hadoop   22825  0.0  1.4 1253656 30232 pts/2 Sl   22:09   0:02 /usr/java/j2sdk/bin/java -Xmx1000m -Dhadoop.l...
 hadoop   22937  0.0  1.4 1247140 28972 ?     Sl   22:09   0:02 /usr/java/j2sdk/bin/java -Xmx1000m -Dhadoop.l...
 hadoop   27310  0.0  1.0 252580 21512 pts/2  Sl   22:53   0:00 java -Xdebug -classpath /home/hadoop/hypertab...
 hadoop   27358  0.0  0.1 239916 2308 pts/2   Sl   22:54   0:00 /home/hadoop/hypertable/bin/Hyperspace.Master...
 hadoop   27393  0.0  0.1 253764 3064 pts/2   Sl   22:54   0:00 /home/hadoop/hypertable/bin/Hypertable.Master...

成功したから良かったし、Javaやってるから良かったけど、

こんなもん互換性とっとけよ。わかんねぇよ。



■スレーブ(slave)を起動

必須項目ではないのかと思っていたら、これも必須の設定項目。

マニュアルでは「# cat conf/slaves」と書かれているが、

Hypertableにはそんなファイルが無い。だから作成する。

 # cd /home/hadoop/hypertable/conf
 # vi slaves

Hypertableの本体は、今回1台のみなので「localhost」と入力する。

 localhost

複数のサーバにHypertableのパッケージを置いて、SELECTなどを分散させる場合は

その他サーバIPを入力する。(1行1IPで記述)



ではスレーブを起動する。

 # cd /home/hadoop/hypertable
 # ./bin/slaves.sh /home/hadoop/hypertable/bin/start-range-server.sh hadoop
 localhost: Successfully started Hypertable.RangeServer



■Hypertableに接続、そして触る

HQLTutorial」に書いてあるSQLを

試してみたら、ちゃんと動いた。

 # ./bin/hypertable
 Welcome to the HQL command interpreter.

 Type 'help;' or '\h' for help. Type '\c' to clear the buffer.

 hypertable> create table Pages ( date, "refer-url", "http-code");
 hypertable> show create table Pages;

 CREATE TABLE Pages (
   'refer-url',
   'http-code',
   date,
   ACCESS GROUP default ( 'refer-url', 'http-code', date )
 )

ちなみに前項のSlave設定を行なわないと以下のエラーが発生するので、

スレーブは絶対に設定すること!これ重要。

 hypertable> create table Pages ( date, "refer-url", "http-code");
 1203526316 INFO hypertable : (/home/hadoop/src/hypertable/src/cc/AsyncComm/ConnectionManager.cc:257)
 Event: type=DISCONNECT from=127.0.0.1:38050; Problem connecting to Master, will retry in 15 seconds...
 1203526331 INFO hypertable : (/home/hadoop/src/hypertable/src/cc/AsyncComm/ConnectionManager.cc:257)
 Event: type=DISCONNECT "COMM connect error" from=127.0.0.1:38050; Problem connecting to Master, will retry in 15 seconds...



■最後に

HypertableとHadoopを合体させたくここまできた。

そして合体できたっぽい。

残っているタスクをあげると、「確認」と「検証」だ。

成功しているっぽいけど、本当にHypertableとHadoopは合体しているのか?

Hadoopによってデータが分散されているのか?

INSERT,SELECT,UPDATEなどSQL速度は?何とどう比較する?

サーバ3台程度であったら検証にならない?



・・・面倒くせぇ。

Apache Hadoopのデータベース「HBase」を設定してみた

Hadoop 0.15.0」や「Hbase/10Minutes」を見てなんだか簡易データベースが

使用できるそうなのでやってみた。



■今回の環境

サーバ環境は以下のような感じ。
SERVERS(計3台) :

   MASTER : 192.168.0.5

   SLAVE1 : 192.168.0.8

   SLAVE2 : 192.168.0.10

HADOOP_HOME(全サーバ共通) : /home/hadoop/hadoop/hadoop-0.15.3/

DATA_DIR(全サーバ共通) : /home/hadoop/hadoop/filesystem/

JAVA_HOME(全サーバ共通) : /usr/java/j2sdk/



■パッケージの解凍と設置(マスターで作業)

$ tar -xvzf hadoop-0.15.3.tar.gz
$ mv hadoop-0.15.3 /home/hadoop/hadoop/



■全般設定1(マスターで作業)

いつものように設定を行なう。hadoop-env.shを開いてJAVA_HOMEを設定。

$ cd /home/hadoop/hadoop/
vi conf/hadoop-env.sh
export JAVA_HOME=/usr/java/j2sdk



■全般設定2(マスターで作業)

これもいつものように設定を行なう。

今回はデータベースだけを使うので、mapredは設定しない。

$ vi conf/hadoop-site.xml
<configuration>
	<property>
		<name>fs.default.name</name>
		<value>localhost:9000</value>
	</property>
	<property>
		<name>dfs.name.dir</name>
		<value>/home/hadoop/hadoop/filesystem/dfs/name</value>
	</property>
	<property>
		<name>dfs.data.dir</name>
		<value>/home/hadoop/hadoop/filesystem/dfs/data</value>
	</property>
</configuration>



■全般設定3(マスターで作業)

スレーブサーバは2台存在するので、そのIPを入力する。

$ conf/slaves
192.168.0.8
192.168.0.10



■パッケージのコピー

それぞれのスレーブサーバにパッケージをまるごとコピー

$ cd /home/hadoop/hadoop/
$ tar -cvzf hadoop-0.15.3.tar.gz hadoop-0.15.3
$ scp hadoop-0.15.3.tar.gz hadoop@192.168.0.8:/home/hadoop/hadoop/
$ scp hadoop-0.15.3.tar.gz hadoop@192.168.0.10:/home/hadoop/hadoop/

$ ssh hadoop@192.168.0.8
$ cd /home/hadoop/hadoop
$ tar -xvzf hadoop-0.15.3.tar.gz
$ exit

$ ssh hadoop@192.168.0.10
$ cd /home/hadoop/hadoop
$ tar -xvzf hadoop-0.15.3.tar.gz
$ exit



■初期化(マスターで作業)

ハードディスクをフォーマットするかのように初期化。

$ cd /home/hadoop/hadoop/hadoop-0.15.3
$ ./bin/hadoop namenode -format
08/02/08 01:09:59 INFO dfs.NameNode: STARTUP_MSG:
/************************************************************
STARTUP_MSG: Starting NameNode
STARTUP_MSG:   host = localhost/127.0.0.1
STARTUP_MSG:   args = [-format]
************************************************************/
08/02/08 01:09:59 INFO dfs.Storage: Storage directory /home/ha...
08/02/08 01:09:59 INFO dfs.NameNode: SHUTDOWN_MSG:
/************************************************************
SHUTDOWN_MSG: Shutting down NameNode at localhost/127.0.0.1
************************************************************/



■Distributed File System(DFS)の起動(マスターで作業)

$ ./bin/start-dfs.sh
starting namenode, logging to /home/hadoop/hadoop/hadoop-0.15.3/bi...
192.168.0.8: starting datanode, logging to /home/hadoop/hadoop/had...
192.168.0.10: starting datanode, logging to /home/hadoop/hadoop/ha...
localhost: starting secondarynamenode, logging to /home/hadoop/had...



■データベースの設定(マスターで作業)

データベースは、マニアックな場所に存在する。

この下には「eclipse-plugin」とか「ec2」とかあるので、他にもソフトがあるみたい。

Amazon EC2でMapReduceとかいう訳のわからんサイトがいろいろあったのはこれか?

$ cd /home/hadoop/hadoop/hadoop-0.15.3/src/contrib/hbase/
$ vi conf/hbase-site.xml
<configuration>
	<property>
		<name>hbase.master</name>
		<value>localhost:60000</value>
		<description>The host and port that the HBase master runs at</description>
	</property>
	<property>
		<name>hbase.rootdir</name>
		<value>/hbase</value>
		<description>location of HBase instance in dfs</description>
	</property>
</configuration>



■権限変更・データベース起動(マスターで作業)

HBASEの実行ファイルに権限がないので実行権限を与える。

$ chmod 755 ./bin/*

そんでデータベース起動。

$ ./bin/start-hbase.sh
Safe mode is OFF
starting master, logging to /home/hadoop/hadoop/hadoop-0.15.3/src/co...
localhost: starting regionserver, logging to /home/hadoop/hadoop/had...



■データベースへつなげて完了(マスターで作業)

データベースに接続してみた。

PostgreSQLやMySQLのように普通にクエリを打てるっぽい。

$ ./bin/hbase shell
Hbase Shell, 0.0.2 version.
Copyright (c) 2007 by udanax, licensed to Apache Software Foundation.
Type 'help;' for usage.

Hbase>



「help;」を打てば多少説明がでる。

やっとHadoopを触ってる感じになってきてる?



ちなみにSQLについては、Hbase/HbaseShell – Hadoop Wikiを参考に。