ひしだまの変更履歴

ひしだまHPの更新履歴。
主にTRPGリプレイの元ネタ集、プログラミング技術メモと自作ソフト、好きなゲームや音楽です。

pom.xmlの雛形

2012-07-15 09:46:06 | PG(Java)

Mavenのpom.xmlの作り方(アーキタイプについて)をメモ。

pom.xmlの作り方がよく分からないーと言ったら、「最小限のJavaプロジェクトのアーキタイプがある」と教えてもらったので、試してみた。
やはり0から自習するより、知っている人から教えてもらってから試してみる方が進みが早い。

「mvn package」でビルドする(ファイルが生成される)のは知っていたが(ビルドという用語で合っているかどうかは知らないが^^;)、生成したファイルが「mvn install」でローカルリポジトリーに登録され、別プロジェクトのpom.xmlのdependencyに記述すれば登録したライブラリーを参照できる。
この仕組み自体は非常にシンプルで分かり易い。どのコマンドでそれが出来るのか分からなかっただけだな。


ファイル内容やコマンド結果を変数に入れる

2012-07-14 12:41:30 | PG(DOS)

DOS(バッチファイル)で、ファイルの内容やコマンドの実行結果(標準出力の内容)を環境変数に入れる例を書いてみた。
(コマンドの実行結果の取得は、UNIXなら$( )を使って簡単に出来るんだけどなぁ)

ついでに、現在日付を取得して加工する例も書いてみた。
(UNIXなら、dateコマンドに書式が指定できるんだけどなぁ) 


AsakusaFW シーケンスファイル操作

2012-07-11 23:07:23 | PG(分散処理)

Asakusa Frameworkのバイナリーファイル読み書き方法を書いていて思い出したんだけど、SequenceFileの入出力方法について書いてなかった^^;
という訳で、AsakusaFW0.2.6で使えるようになったSequenceFileFormatのことをメモ。
ドキュメントには最小限のことしか書かれていないけれども、メソッド名を見れば何をするのかは簡単に分かる。ashigeruさん、API設計上手いよなぁ。ほんと感心する(笑) 

SqoopとかはSequenceFileで入出力することが出来る(理屈上は、CSVよりもSequenceFileの方が速いらしい?)ので、これでAsakusaFWともSequenceFileで連携できる。

で、昨日ひっそりとリリースされたAsakusaFW0.4 RC1では(まだ正式リリースではないが)Direct I/Oもちょこちょこ拡張されているので、SequenceFileに関係ありそうな部分は先走って触れてみたw


AsakusaFW バイナリーファイル操作

2012-07-10 01:42:38 | PG(分散処理)

Hadoopは基本的にテキストファイルを扱うようになっている。バイナリーデータを使いたければSequenceFileを使うのが一番簡単だと思う。
InputFormatやRecordReaderやInputSplitを独自実装すればバイナリーファイルを読み込めるだろうけど、面倒だわな^^;

で、Asakusa FrameworkにはBinaryStreamFormatというクラスがあり、これを継承したクラスを作ることでバイナリーファイルを扱うことが出来る。実装しなければならない部分はあるけれど、素のHadoopよりは簡単な気がする。
その実装も、主な部分はバイナリーデータAsakusaFWのデータモデルの各プロパティーとの移送部分のコーディングなので、少々面倒ではあるが、難しくはない。 
(実装の考え方としては、SequenceFileFormatを使って独自SequenceFileを扱うのと同じ)


(ちょっと追記)
バイナリーファイル読み込み部分で、offsetの使い方を勘違いしていたので修正。
streamは既にそのオフセット分スキップされた状態で渡されるので、自分でスキップする必要は無いらしい。
ただしoffsetは(やはり)必ずしもレコードサイズの倍数とは限らないので、レコード境界に合うよう、その分だけはスキップしてやる必要がある。 


Oracle 外部表

2012-07-08 00:00:25 | PG(RDBMS)

Oracle Loader for Hadoopを試していたら外部テーブル(external table)という仕組みがあるのを知ったので、ちょっと調べてみた。

外部テーブルとは、データファイル(CSVやDataPump)をテーブルとして扱うことが出来るもの。(逆説的に、まるでHiveみたいだなw)

外部テーブルを作るのは一瞬だが、その後SELECTする際にデータファイル読み込みが発生するので、実行時間はSQL*Loaderとそんなに差が無いかもなぁ…と思っていたが、インデックスの無いEMPテーブルへのロードを試してみたら、外部テーブルを使う方が3~4倍も速かった。

CSVファイルとDataPumpの外部テーブルによるSELECT-INSERTは、100万件だとDataPumpの方が2倍くらい速かったが、1000万件だと逆にCSVの方が2倍くらい速かった^^;
この辺りは、使っているデータ型の種類やデータ値によって色々変わってきそうな気がする。(要するに、実際に使うテーブルやデータで計測せよ、と)