S-JIS[2016-04-12/2017-12-14] 変更履歴

Asakusa on M3BP 使用方法

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がインストールされている前提。


開発環境の構築(AsakusaFW 0.8)

  1. Shafuの設定で、Gradleのバージョンを2.12にしておく。
  2. 新規プロジェクトを作る場合は、Shafuを使ってM3BP 0.1.0のプロジェクトを作成(テンプレートアーカイブやサンプルアーカイブをダウンロード)する。
    従来のプロジェクトをM3BP用に変更する場合は、AsakusaFW 0.8.0にマイグレーションしておく。
  3. build.gradleを書き換える。
    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は明示しないようになった。
    なお、M3BP 0.1.0に対応しているのはAsakusaFW 0.8.0。
  4. Shafuを使ってEclipseプロジェクトの再構成を行う。

開発環境の構築(AsakusaFW 0.9)

  1. Shafuの設定で、Gradleのバージョンを3.1にしておく。[2016-12-10]
  2. 新規プロジェクトを作る場合は、Shafuを使ってAsakusaFW 0.9.0のプロジェクトを作成(テンプレートアーカイブやサンプルアーカイブをダウンロード)する。
    従来のプロジェクトをM3BP用に変更する場合は、AsakusaFW 0.9.0にマイグレーションしておく。
  3. build.gradleを確認する。(M3BP用のテンプレートやサンプルの場合はデフォルトでAsakusa on M3BPの設定が入っているので、特に変更する必要は無い)
    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'
  4. Shafuを使ってEclipseプロジェクトの再構成を行う。

コンパイル方法

コンパイル環境には以下のものが必要になる。
(必要なバージョンは、Asakusa on M3BPユーザーガイドの開発環境の構築を参照)

  1. JDK1.8(Java8)
  2. GNU make
  3. gcc/g++(4.8.5以降)
  4. CMake(2.8以降)

Windowsでのコンパイル環境の構築


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)を抑制すればいい。

M3BPバッチの生成を抑制する例

$ ./gradlew assemble -x m3bpCompileBatchapps

M3BP用バッチを作る対象クラスを指定することも出来る。
build.gradleにm3bp.incluem3bp.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ユーザーガイドの実行環境を参照)

  1. JDK1.8(Java8)
  2. GNU C++ Library 4.8.5 (libstdc++.so.6)
  3. GNU C Library 2.17 (libc.so.6)
  4. Portable Hardware Locality 1.7 (libhwloc.so.5)

M3BP自体のライブラリーや、Direct I/Oで使用するHadoopライブラリーはデプロイメントアーカイブに含まれているので、特にインストールする必要は無い。


実行環境のHadoopを使うか、AsakusaFWに同梱されているHadoopを使うか

デプロイメントアーカイブに含まれるHadoopライブラリーは、たぶんApache Hadoopのもの。
なので、もしDirect I/Oでアクセスする対象のHadoopクラスター(HDFS)が別のディストリビューションの場合は、同梱されているHadoopライブラリーではHDFSにアクセスできない可能性がある(特にMapR)。

その場合は、実行環境にHadoopクライアントをインストールし、Asakusaアプリケーションで実行環境のHadoopを使用するよう設定する必要がある。[/2017-12-14]

AsakusaFW 0.10.0より前

AsakusaFW 0.10.0より前の場合は、build.gradleに以下の設定を追加すれば、実行環境のHadoopが使われるようになる。

〜
asakusafwOrganizer {
〜
    m3bp {
        useSystemHadoop true
    }
}
〜

m3bp.useSystemHadoopについては、Asakusa on M3BPユーザーガイドのHadoopとの連携およびAsakusa on M3BPリファレンスの規約プロパティ拡張を参照。

AsakusaFW 0.10.0

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からはこのディレクトリー名を指定する)

バッチをHadoopで実行する場合(従来通りのバッチ)

$ cd $ASAKUSA_HOME
$ yaess/bin/yaess-batch.sh example.summarizeSales -A date=2011-04-01

バッチをM3BPで実行する場合

$ cd $ASAKUSA_HOME
$ yaess/bin/yaess-batch.sh m3bp.example.summarizeSales -A date=2011-04-01

実行時に発生する可能性のあるエラー


Asakusa on M3BPへ戻る / AsakusaFW目次へ戻る / 技術メモへ戻る
メールの送信先:ひしだま