昨日はサーバ側でてんてこ舞いしていてクライアント側のhbaseviewerをいじれなかったので
今日はそっちを重点的にやってみました。

んで、本番業務を想定して(まだリサーチ中だったりします)1カラムで割と大きなデータをぶち込んで
そうですねぇTCPの通信ヘッダの1日分とかを1レコードとかw

hbaseは平気です、なんでも食べます。よい子ですw
スキーマ設計?なんすかそれw

オラクルマスター?
なんすかそれw
left join?
なんすかそれw

で、ですね。hadoopのmap/reduceつかってhbaseに100kレコードほどぶち込んでおきます。

テーブルはキーは日時で、カラムファミリーはcontentsとして
ぶち込むときは
contents:dataと生意気にもqualifier(修飾子)をつけてみました。

hbaseviewerてのはflash builder 4 お試し(お試し期間残り8日になってたよw)を使って現在作成中のツールです。まあプロジェクト始まっても使えると思うので今のうちに作っておいて損はないとおもってつくってます。

どうやってデータをhbaseviewerにもっていくかとか、そういう話はおいておいて
とにかく、hbaseの内容を専用のサーバを立ててsocket使ってクライアントのhbaseviewerで読む

そこでの話しなんですが

hbaseviewerは転送されてきたデータ(XMLだとだけいっておきましょう)からテーブル構造を把握して
今回の場合だと、rowidとcolumnfamily(contents)の2つをカラムに持ったDataGridにキー(日時)とカラムcontents:data(TCPヘッダ(長いよ1日分はw))の値をrowとして表示する。
要するに1行が激しく縦に長いリストができるわけです。

いや、それを想定していました。

ところがですよ・・・・

ん?見切れてないかい?

およよよ

確かに見切れている。

ていうかどう見ても1行しか、1ヘッダのそれも先頭の一行だけしかないじゃない?

なぜ?

デバッガで1行ずつとめてみて、調べること小一時間・・・・

行数を計算しているところ発見。

DataGrid.as内のcommitProperties()

rowHeightを決定しているのはどうもここらしい。

ところが、100件ずつレコードを読むようにしていたのに一度しかとおらない。

あ。。。もしかして最初に1回だけ?

う。。。まじすか?

じゃあ、先頭が1行だったら2レコード目とかが何行でも1行?

ぐはああああ

てか、バグじゃね?

しょうがないから
override protected function commitProperties() : voidっすよ(あ、DataGrid継承して作ったくらすですよ)

もともとのやつはiterator.currentで1レコードだけ見ているように(多分先頭(ほんとに先頭かはちょっとあやしいーー;))
なってたから
var maxRowHeight : uint = 0;
while(iterator.next())
{
super.commitProperties();
maxRowHeight = Math.max(maxRowHeight,rowHeight);
}
setRowHeight(maxRowHeigth);

で全部まわして最大値を最終的なrowHeightにするっすよ
そうすると最大値で全レコードの高さが決るので

めでたし、めでたし

いや、でも1行しかない行は1行でいいような。。。
ま・・・その辺がへっぽこということでw



まあ、いろいろあって
試験的にPC4台でHadoop/HBase構成してます。

PC4台起動して
#start-all.sh
#start-hbase.sh

hadoop jar xmlserver.jar ← xmlserver.jarはflashbuilder(のこり10日きってますw)で作ったhbaseviewerの相手のサーバ

ってやって

hbaseviewer起動

サーバのIPうって、テーブルリストだして
中身を確認しましたよ。

おや?
ないじゃない?

あれ?またsafemode?
そういえば昨日もあがんなかったんだった。

またかよと思って。
#stop-hbase.sh
#hadoop dfsadmin -safemode leave

で、safemode解除

再び
#start-hbase.sh
で起動して

hbaseview(自作ね)起動

・・・・
むむ・・・

こないじゃん。。。

namenodeのログ見るとなにやらExceptionが・・・

Cannot delete /tmp/hadoop-root/mapred/system. Name node is in safe mode.
The ratio of reported block 0.???? has not reached threshold 0.9990 

みたいなのがでてる。。。。
ずーっとでる
小一時間出る(でている間仕事さぼるw)

ちなみに/tmp/hadoop-root/mapred./systemは
/tmp/hadoop-root/mapredまではあるんだけどsystemが存在しない。

4台とも確認したけどない。。。。

なんじゃろか?

そういえば、最近面倒でhbaseもhadoopもデーモンあげたままで
shutdown nowやっちまってたけど
そのせいかな?(多分間違いないw)

いろいろぐぐってみたけど
確かにこういう現象は起こってるみたいだけど
FWのせいじゃないかとか、slaveにはつながっているかとか
一応は確認してみたよ、slaveはmasterからみえてるし、FWもきっていることは
#service iptables statusで確認した。

無いものを消しにいくのはなぜだろう?

あ、そうか、ソースあるんだから/tmp/hadoop-root/mapred/system
はどこから拾ってきたか探せば
なんでこれがずっとでるかわかるってもんか!

でも解析がへたれな私は
#rm -fr /tmp/hadoop-root (PC4台とも)

で初期化しましたとさ

めでたし、めでたし(あははははは