夜行録 - 酔歩.net
Calendar
Mon | Tue | Wed | Thu | Fri | Sat | Sun |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
Sunday, 31.01.16
osx で spark を動かす
必要なもの
- jdk
- http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html から拾ってきてインストール(8u72 (1.8.0_72))
- spark
- http://spark.apache.org/downloads.html からダウンロードして、適当なところに展開(spark-1.6.0-bin-without-hadoop.tgz)。
- hadoop
- https://hadoop.apache.org/releases.html からダウンロードして、適当なところに展開(hadoop-2.7.1.tar.gz)。
環境変数
## Hadoop export PATH=$HOME/data/hadoop-2.7.1/bin:${PATH} export JAVA_HOME=`/usr/libexec/java_home` ## Spark export PATH=$HOME/data/spark-1.6.0-bin-without-hadoop/bin:${PATH} export SPARK_DIST_CLASSPATH=`hadoop classpath` export HADOOP_CONF_DIR=$HOME/data/hadoop-2.7.1/etc/hadoop
osxでJAVA_HOMEを適切に設定するには、/usr/libexec/java_homeを用いると簡便で良い。 うっとおしいので、spark-1.6.0-bin-without-hadoop/conf/log4j.propertiesを作成し、 log4j.rootCategory=WARN, consoleとしておく。
osxの場合、普通に実行すると snappy が云々という例外投げられて死ぬ。これは
- Sparkは通信の為にデータを圧縮する
- 幾つかのコーデックが使えるがデフォルトがsnappy
- osxのjava環境にはこれがない(pure javaではなくnative libraryが必要)
pyspark --driver-java-options -Dspark.io.compression.codec=lzfとするとエラーとならない
env PYSPARK_PYTHON=ipython-2.7 pyspark --driver-java-options -Dspark.io.compression.codec=lzf --master 'local[*]'として、iPython-2.7 をフロントエンドに、pythonから4並列でデータ処理ができた。
sparkが面白い
話題になってから半年遅れくらいだが、やっと時間が取れて試してみた。
python のフロントエンドがあるわけだが、これをむしろ spark のフロントエンドではなく python に対して spark の RDD が追加されたものと考えると大変使いやすくてよい。
もともと python で分散処理させようと思ったら multiprocssing あたりで明示的に書いてやらないとだめだったところが、
見かけ上一つのオブジェクトである RDD に処理を割り当てて実行すれば、勝手に裏で分散処理される。
しかもノード間でも分散できる、と考えると python で上手くできてなかったところをきれいに埋めてるように見える。
R も分散処理苦手だった気がするけど、 python + RDD でデータ解析環境とすると今時点では最強なんじゃないだろうか?
- hadoopのクラスライブラリは必要だが、hadoop自体は動いている必要はない
- yarnに投げなくても、sshが通れば自前でクラスタ構築できる(standalone mode)
- 1ノードでも、コアの数で分散処理ができる
- iPython とも連携できる