LoginSignup
4
4

More than 5 years have passed since last update.

Parkour(Clojure版Hadoop実行モデルのニューフェイス)をOSX上で試す

Posted at

概要

2013年12月付けのClouderaブログを読んで気になったので試してみた。

Parkour作成した動機によると、Crackle(効率的なMapReduceフレームワークのGoogle’s Flumeを参考にしたApache Crunchのラッパー)、Cascalog(Cascadingのラッパー)よりClojureの文法を生かした動作モデルで設計しているらしい。

詳しくは、各ドキュメントを参照のこと。

文法は、ネームスペースガイドMapReduce詳細あたりが参考になる。

SequenceではなくReducerをなぜ使っているかという点についても記述がある。
(この点に関しては、日本語の考察資料も複数ある)
ここは、効率的なMapReduce実行のポイントになっているかも。

対応環境

java 1.6 向けで試した。
(java 1.7 向けに調整したら一応動いたが、調整内容は未記載)

leiningenプロジェクトをクローン

$ git clone https://github.com/damballa/parkour.git
$ cd parkour

単体で試す

Parkour(Hadoop関連)の環境変数

java 1.6を用意しておく。

java 1.6、realm、heap関連で問題が起きたので対処。
一時的な環境変数として設定した。

# 環境変数を設定
# java6
$ export JAVA_CMD="$(/usr/libexec/java_home -v 1.6)/bin/java"
# heap, utf8, realm対策
$ export JVM_OPTS="-server -Xmx1024m -Dfile.encoding=UTF-8 -Djava.security.krb5.realm= -Djava.security.krb.kdc="

テスト実行

# project.clj変更時に実行する
$ lein clean

# 依存ファイルのダウンロード
$ lein deps
# テスト
$ lein test

問題なければ、サンプルの実行へ

サンプルをためす

examples以下にある、word-count(word_count.clj)を試す。
ファイル名で「_」を使っている場合の、ネームスペースは「-」になっている場合が多いので気をつける。

# サンプル実行
$ lein run -m parkour.examples.word-count outputs README.md
# 結果は、標準出力

# フォルダ削除
$ rm -Rf ./outputs
# サンプル、log4j,slf4j,slf4j12,jsr166yをuberjarに追加
$ lein with-profile "examples,provided,java6" uberjar

provided追加は、slf4jのバージョン問題のため
providedを外して、「/usr/local/Cellar/hadoop/1.2.1/libexec/lib」以下の
slf4jとslj4j12を1.6.5に上げても良さそう。

Hadoopスタンドアローン環境設定

OSXにApache Hadoopをインストールを参考に簡潔な設定にした。

# hadoopをインストール
$ brew install hadoop

以下、hadoop 1.2.1の場合。

参照先に追加した変更点

/usr/local/Cellar/hadoop/1.2.1/libexec/conf/hadoop-env.sh
export JAVA_HOME="$(/usr/libexec/java_home -v 1.6)"

export HADOOP_OPTS="-server -Dfile.encoding=UTF-8 -Djava.security.krb5.realm= -Djava.security.krb.kdc="
# Hadoopサービスの起動
$ start-all.sh
# HDFSにファイル配備
$ hadoop fs -put README.md

# サンプルを実行
# 入出力ともにHDFS上の空間
$ hadoop jar /usr/local/Cellar/hadoop/1.2.1/libexec/hadoop-1.2.1-examples.jar wordcount README.md outputs
# 結果はoutputs/part-r-00000に書き出し

$ hadoop fs -ls .
# 実行結果をHDFSから取得
$ hadoop fs -get outputs/part-r-00000 .

# 確認
$ cat part-r-00000

# フォルダ削除(再実行前に削除が必要)
$ hadoop fs -rmr outputs
# Hadoopサービスの停止(この後使うので必要なし)
$ stop-all.sh

Hadoopスタンドアローン環境でのparkour

デプロイに関する資料など参考にサンプルを動かした。

# Hadoopサービスの起動
$ start-all.sh

gen-class化とaotが未実施のため、clojure.mainから実行する。

# (上で実施済み)
$ hadoop fs -put README.md

# サンプルを実行
# 入出力ともにHDFS上の空間
$ hadoop jar ./target/parkour-0.5.3-SNAPSHOT-standalone.jar clojure.main -m parkour.examples.word-count outputs-parkour README.md
# 結果は、標準出力

# ls
$ hadoop fs -ls .
# ファイル削除
$ hadoop fs -rmr outputs-parkour
# Hadoopサービスの停止
$ stop-all.sh

今回はここまで。

その他参考資料

slf4のエラーについて
Hadoopインストール

4
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
4