Asakusa on M3BPの使い方のメモ。
|
|
Asakusa on M3BP用の開発環境自体は、従来のAsakusaFWと同じ。
ただし、Asakusa on
M3BP用のコンパイルを行うと実行環境のネイティブコードを作るので、コンパイル環境にはCMakeおよびg++/gccが必要となる。
CMakeはクロスコンパイル(別環境向けの実行バイナリーを作る)が出来るツール。
g++はGNUのC++コンパイラー。
たぶんWindows上でコンパイルしてLinux向けのバイナリーを作ることも出来るが、環境構築が面倒になる気がするので、実行環境と同じOS上でコンパイルする方が楽だと思う。
実行環境には特定バージョン以降のライブラリーが必要になるので、CentOS7を使うのが一番楽。
(CentOS6だとバージョンが古く、yumで更新することが出来ない)
Asakusa on M3BPのAsakusaアプリケーションを開発するには、build.gradleにAsakusa on M3BPの設定を追加する。
以下、EclipseにShafuがインストールされている前提。
buildscript { repositories { maven { url 'http://asakusafw.s3.amazonaws.com/maven/releases' } } dependencies { classpath group: 'com.asakusafw.spark', name: 'asakusa-spark-gradle', version: '0.3.0' classpath group: 'com.asakusafw.m3bp', name: 'asakusa-m3bp-gradle', version: '0.1.0' //追加 } }
apply plugin: 'asakusafw-sdk' apply plugin: 'asakusafw-organizer' apply plugin: 'asakusafw-mapreduce' apply plugin: 'asakusafw-spark' apply plugin: 'asakusafw-m3bp' //追加 apply plugin: 'eclipse'
dependencies { compile group: 'com.asakusafw.sdk', name: 'asakusa-sdk-core', version: asakusafw.asakusafwVersion compile group: 'com.asakusafw.sdk', name: 'asakusa-sdk-directio', version: asakusafw.asakusafwVersion compile group: 'com.asakusafw.sdk', name: 'asakusa-sdk-windgate', version: asakusafw.asakusafwVersion testRuntime group: 'com.asakusafw.sdk', name: 'asakusa-sdk-test-emulation', version: asakusafw.asakusafwVersion }※AsakusaFW 0.8.0以降は、Asakusa on SparkやAsakusa on M3BPのバージョンに応じたAsakusaFWバージョンが自動的に設定されるようになったので、asakusafwVersionは明示しないようになった。
buildscript {
repositories {
maven { url 'http://asakusafw.s3.amazonaws.com/maven/releases' }
}
dependencies {
//AsakusaFW 0.9以降はディストリビューション方式になったので、M3BP用に書き換える必要は無い
classpath group: 'com.asakusafw.gradle', name: 'asakusa-distribution', version: '0.9.0'
}
}
apply plugin: 'asakusafw-sdk'
apply plugin: 'asakusafw-organizer'
apply plugin: 'asakusafw-mapreduce'
apply plugin: 'asakusafw-spark'
apply plugin: 'asakusafw-m3bp'
apply plugin: 'eclipse'
コンパイル環境には以下のものが必要になる。
(必要なバージョンは、Asakusa on M3BPユーザーガイドの開発環境の構築を参照)
$ yum install make
Gradleを使ってM3BP用のコンパイルを行うコマンドは以下の通り。
$ ./gradlew m3bpCompileBatchapps
コンパイルされたバッチディレクトリー名(バッチ名)は、Batch DSLで付けた名前に接頭辞「m3bp.
」が付いたものになる。
(Batch DSL上の名前が「example.summarizeSales
」の場合、「m3bp.example.summarizeSales
」となる)
Gradleのassemble(あるいはShafuの「Asakusaデプロイメントアーカイブを生成」)を実行すると、
「apply plugin」で指定された環境向けのバッチコンパイルも自動的に行われる。
つまり、pluginの「asakusafw-mapreduce」と「asakusafw-spark」と「asakusafw-m3bp」が含まれている場合、生成されるデプロイメントアーカイブにはHadoop用バッチとSpark用バッチ
とM3BP用バッチ全てが含まれる状態になる。
$ ./gradlew assemble
いずれかのバッチしか作らなくていい場合は、assembleの依存タスクであるコンパイルタスク(mapreduceCompileBatchapps・sparkCompileBatchapps・m3bpCompileBatchapps)を抑制すればいい。
$ ./gradlew assemble -x m3bpCompileBatchapps
M3BP用バッチを作る対象クラスを指定することも出来る。
build.gradleにm3bp.inclue
やm3bp.exclude
を設定する。(規約プロパティ拡張を参照)
asakusafw {
modelgen {
modelgenSourcePackage 'com.example.modelgen'
}
compiler {
compiledSourcePackage 'com.example.batchapp'
}
m3bp {
include 'com.example.batch.SummarizeBatch, *ExampleBatch'
}
}
(build.graldeに書かずに)gradlewの引数で指定することも出来る。[2017-04-30]
$ ./gradlew m3bpCompileBatchapps --update 'com.example.batch.SummarizeBatch, *ExampleBatch'
実行環境(M3BPを稼動させるマシン)には以下のものが必要になる。
(必要なバージョンは、Asakusa on M3BPユーザーガイドの実行環境を参照)
/lib64/libc.so.6
」を実行するとバージョンが確認できる。$ yum install hwloc
M3BP自体のライブラリーや、Direct I/Oで使用するHadoopライブラリーはデプロイメントアーカイブに含まれているので、特にインストールする必要は無い。
デプロイメントアーカイブに含まれるHadoopライブラリーは、たぶんApache Hadoopのもの。
なので、もしDirect I/Oでアクセスする対象のHadoopクラスター(HDFS)が別のディストリビューションの場合は、同梱されているHadoopライブラリーではHDFSにアクセスできない可能性がある(特にMapR)。
その場合は、実行環境にHadoopクライアントをインストールし、Asakusaアプリケーションで実行環境のHadoopを使用するよう設定する必要がある。[/2017-12-14]
AsakusaFW 0.10.0より前の場合は、build.gradleに以下の設定を追加すれば、実行環境のHadoopが使われるようになる。
〜
asakusafwOrganizer {
〜
m3bp {
useSystemHadoop true
}
}
〜
m3bp.useSystemHadoopについては、Asakusa on M3BPユーザーガイドのHadoopとの連携およびAsakusa on M3BPリファレンスの規約プロパティ拡張を参照。
AsakusaFW 0.10.0では、(今までとは逆に)デフォルトで実行環境のHadoopを使用するようになっている。[2017-12-14]
したがって、同梱されているHadoopライブラリーを使用する場合はbuild.graldeを以下のように設定する。
〜
asakusafwOrganizer {
〜
profiles.prod {
hadoop.embed true
}
}
〜
※この設定は、M3BP以外にも有効
※useSystemHadoopは廃止された(設定しても無視される)
あるいは、M3BPマシンにHDFSをNFSマウントし、ローカルファイルのように扱うという方法も考えられる。
その場合は、ASAKUSA_HOME/core/conf/asakusa-resources.xml内のDirect I/Oのパスをローカルパスに変更する。
→データソースの定義方法
デプロイメントアーカイブをM3BP用マシン(運用環境)上で解凍すると、YAESSを使ってM3BPバッチを実行できる。
(example.summarizeSales
というバッチの場合、batchappsディレクトリーの下に「m3bp.example.summarizeSales
」というディレクトリーがある。YAESSからはこのディレクトリー名を指定する)
$ cd $ASAKUSA_HOME $ yaess/bin/yaess-batch.sh example.summarizeSales -A date=2011-04-01
$ cd $ASAKUSA_HOME $ yaess/bin/yaess-batch.sh m3bp.example.summarizeSales -A date=2011-04-01