ひしだまの変更履歴

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

Huahin FrameworkでWordCount

2012-06-30 02:25:37 | PG(分散処理)

Huahin(ほあひん) FrameworkというHadoopをラップしたフレームワークをryu_kobayashiさんが公開されたので、早速WordCountを作ってみた

2011年のHadoop Conference Japanのryu_kobayashiさんのLTで「Pig/HiveAsakusaFWの中間のフレームワークが欲しい」(確かあの当時、新しいフレームワークか何かが出そうって話があって、それが望むものかどうか様子を見る)と言っていたような気がするけど、結局自分で作っちゃったんだなw すごい。

レコードを区切り文字で区切って各フィールドに名前を付けて値を取得する、という考え方はCascadingと似ている気がするけど、実際にコーディングしてみると、Cascadingよりずっとシンプル。
MapReduceの薄いラッパーなのでどう動作するかイメージしやすいし、CSVやTSVファイルを対象にした簡単なMapReduceをちょろっと作りたいようなときには、確かに便利そう。

コメント
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

Oracle Loader for Hadoop

2012-06-28 00:42:19 | PG(分散処理)

Oracle Loader for Hadoopをいじってみた。
Oracle Loader for Hadoop(OLH)は、Oracle Big Data Connectorsのひとつ。本番運用は有料だけど、開発版(試用)は無料らしい。
HDFS上のファイルをOracle(RDB)のテーブルへロードするツール。(DBからHDFSへの転送はサポートしていないので、)要するにSqoopのexportに相当する。

MapReduceでHDFS上のファイルを読み込み、Mapタスクで分散して並列にJDBCでINSERTする…って、本当にSqoop exportのバッチモードと同じ原理だよ^^;
Sqoopと比べて劇的に速いということは無さそう。 

しかしさすがにOracle社が自ら出しているだけあって、それだけではない。
OCIでパーティションテーブルにダイレクト・パス・ロードすることも出来る。(その分、制約も多いが…)
また、SQL*Loaderでロードする為のCSVファイル・コントロールファイルを生成したり、Data Pump形式のバイナリーファイルを生成したりすることも出来る。

速度は計っていないから分からないけど、バイナリー形式でデータファイルを作り、external table(初めて知った)を使ってテーブル化するのは、速そうな気がする。 

コメント
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

OraOop1.5.0 orz

2012-06-22 23:52:16 | PG(分散処理)

SqoopOracle用の拡張を行うOraOop(現在の正式名称は「Quest Data connector for Oracle and Hadoop」らしいが、長いのでOraOopって呼んじゃう)だが、なんだかいけてない…。

よく分からない制約が多いし、エラーメッセージも同じようなのばっかりで、原因が分かりづらい。(Sqoop全般がそうだけどね(苦笑))

それはまだ原因が分かれば何とかなるけど、TIMESTAMPやDATE型のカラムを、パース用JavaソースWritable)ではStringで扱うってのはどーなの?
Oracle専用の仕組みでデフォルト版Sqoopより高速化されていることを期待しているのに、もし遅くなってたら、意味無いよ?

テーブル名やユーザー名に小文字が使えるという程度では、(大文字にすれば回避できるんだし、)あまり有意義でないなぁ…。 

コメント (2)
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

Sqoopのソース

2012-06-19 23:51:43 | PG(分散処理)

Sqoopがどういう風にSQLを実行しているのか興味があったので、ちょっと見てみた。

まずはソースのダウンロードだけど、普通にCDH3ダウンロードサイトからダウンロードする。
Hadoopのソースだとyumでダウンロードできるんだけど…まぁ、Sqoopのソースはそこまで需要無い気もするから、仕方ないかw

で、とりあえずexportに関する部分を見てみたんだけど、びっくり!
HDFS上のファイルを読み込む部分と、DBへINSERTする部分が別スレッドになってる!
まさかそんな作りになっているとは思わなかった。けっこう凝ってるんだなぁ。

コメント
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

Sqoop Oracle

2012-06-19 21:12:59 | PG(分散処理)

SqoopOracleを試してみた。

Oracle用Sqoopについて『HADOOP HACKS』に載っていた通り、テーブル名が小文字だと落ちるし(苦笑)
テーブル名とユーザー名を大文字にしたら一応動いたけど、作られるディレクトリーやJavaクラス名が全部大文字なのは、ちと違和感があるな^^;

exportのデフォルトモードでは、MySQLPostgreSQLは複数VALUES INSERTを使うが、Oracleにはそのような構文は無い。バッチモードと同じになるのかな?と思ったが、どうやらSELECT~INSERTを使っているらしい。意外と頑張ってるなw

更新モード(--update-key)では、--update-modeにallowinsertが指定できる。
SQLとしてはMERGE文を使っているようだ。なるほど、MERGEはまさにこういう目的に使うものだな。
(MySQLやPostgreSQLがallowinsertに対応していなかったのは、MERGE文が無い為か。納得)

OraOopも一応インストールしてみた。
確かにテーブル名やユーザー名に小文字が使える。
一緒にダウンロードできるpdfのドキュメントをちらっと見た感じでは、importの範囲分割に関してはROWIDを使っているらしい。Oracleでは最速の方法ですな。

ただ、『HADOOP HACKS』では触れられていなかったが、ユーザーにDBAロール(管理者権限)を付けていないとdba_tab_columns等のテーブルにアクセスできなくてエラーになる。なんでuser系のビュー(uesr_tab_columns)を使わないんだろう…?

コメント
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする