SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

DeveloperZine(デベロッパージン)- エンジニアの意思決定を支える技術情報メディア ProductZine

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

特集記事

「Jaql」関数を追加する

Jaql(a query language desired for JSON)の使い方 その2

Hadoopクラスターでの実行

 先ほどの例では、jaqlからリテラルで直接呼び出しているため、Hadoopクラスターへは飛んでいきません。大量のデータを処理するなら、HDFSにファイルを置き、transform文を使ってプラグインを呼び出します。

[idcuser@vhost2044 ~]$ jaqlshell

Initializing Jaql - < version: 0.5.2; build time: November 07, 2011, 14:58:20; built for hadoop: 0.20 >

jaql> date = [{"name":"米持", "add":"神奈川"},{"name":"高橋", "add":"東京"}];

jaql> addClassPath("/home/idcuser/scripts/yone.jaql.jar");
true

jaql> toArray = javaudf("yone.jaql.ToArray");

jaql> date -> transform toArray($.name, $.add);
[
  [
    "米持",
    "神奈川"
  ],
  [
    "高橋",
    "東京"
  ]
]

jaql>

 ここで、dataオブジェクトを「read(hdfs("filename.json"))」などから読み込み、HDFSファイルやフォルダーを指定すれば、HDFS上にある大量データを、このオペレーターで処理できます。当然、このオペレーターは各ノードに自動的に配布され、分散処理されます。

外部ライブラリの統合

 Java実装のJaql関数で、外部ライブラリを統合するには、このjarファイルを作っただけでは不十分です。jarに別のjarを入れても、そのjarがロードできないようです。

 そこで、外部jarを使う場合には、Hadoopを実行しているマシン上に、ライブラリ群が利用するリソースファイルをコピーして置いたり、jarが検索できるようにしたりする必要があります。Jaqlは、データ量がとても少ない場合はMapReduceをサブミットせずにローカル実行するため、Masterノードにも同じ構成をする必要があります。

リソース

 外部ライブラリが、特定のフォルダーに準備されたリソースを利用する場合は、そのフォルダー群をすべてのノードに準備します。MapReduceのタスクは、自動的に準備されるフォルダーで実行されるため、「カレントフォルダーにある」という前提で動作するようなライブラリは統合に苦労します。

ライブラリjar

 jarファイルは、jaqlshellの実行フォルダーに置いてもロードできません。Master、Slaveを含め、すべてのノードの、MapReduceタスクが検索できるパスに置く必要があります。MapReduceの実行環境をいじらずにjarを検索しやすい場所としては、jdk/jre/lib/extがあります。ただし、ここに共通ライブラリを置くと、そのライブラリがさらに検索する別のjarもそこに置かないと見つからないという現象が起きるので、必ずしもベストとは言えません。

まとめ

 今回、Jaqlの拡張には、大きくわけて以下の方法があることを解説しました。

  1. Jaql関数の定義とモジュール化
  2. JavaによるJaql関数の実装

 以上を活用して、Jaqlジョブを効率的に開発し、MapReduceが活用しやすい環境を作ってみてください。

この記事は参考になりましたか?

連載通知を行うには会員登録(無料)が必要です。
既に会員の方はを行ってください。
特集記事連載記事一覧

もっと読む

この記事の著者

米持 幸寿(ヨネモチ ユキヒサ)

日本アイ・ビー・エム公認 ソフトウェア・エバンジェリスト。alphaWorks、developerWorks、インキュベーション系製品、アセットなどのテクノロジーの推進をしつつ、テクノロジー戦略、エバンジェリストチームをリードしている。講演や執筆も多数。主な著書に「かんたんサーバーサイドJava」(翔泳社)、「Webサービス完全解説」(翔泳社)がある。developerWorks Japan ブログ 「米持幸寿のブログ

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

CodeZine(コードジン)
https://codezine.jp/article/detail/6422 2012/03/26 14:00

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー