Hadoopの機械学習をPythonでやりたい
Java以外でもHadoopのJobを書くことが出来るので、
機械学習に強いPythonをHadoopで実装できるようなSkipJackというラッパーをPythonもくもく会と正月で作りました。
GitHubは以下においています。(pipは無し)
GitHub-SkipJack
以下、詳細
- HadoopStreaming
- Scikit-learn
- SkipJack
HadoopStreaming
Hadoopでは、
- スレーブ部分でJavaを実行する(Haoop MR Tutorial)
- スレーブ部分で標準入出力を介してファイルを実行する(Hadoop Streaming Tutorial)
という2つの実行方法があり、
標準入出力を扱える全ての言語でHadoopが使えます。(Hadoop Streaming)
なので、Hadoopで機械学習をするという理由だけでMahoutを使用する必要はなく、
機械学習に強いPythonを使って好きなライブラリで実装することができます。
Hadoopを用意する一通りの流れはHadoop導入とPythonによるMapReduceが参考になります。
Scikit-learn
Pythonで実装された一番メジャーな機械学習ライブラリです。
これを使用するためにはNumpy, Scipyもインストールする必要がありますが、pipだけでは簡単にインストールすることが出来ないので、
一通りのライブラリが元から入っているAnacondaの3系をダウンロードして、全スレーブに設置しました。
SkipJack
Hadoop Streaming ではhadoopの実行コマンドは手で打つ必要があり、面倒だったので
pythonを実行することで、
実行するJobを決定→Hadoop実行→結果評価→次に実行するJobを決定→以下、停止までループ
が出来るようなラッパーを作成しました。
mapperとreducer、結果評価の方法を実装すれば、定型作業を書く必要はありません。
中身は、
Hadoopコマンド(実行(run)、ファイル配置(put)、結果読み出し(cat))を実行しているだけの簡単なものです。
サンプルには、
- WordCount+アルファ
- グリッドサーチを使用した絞り込み
の2つを用意しています。