VirtualBox上のUbuntu 14.04でspark-shellを使えるようになるまで

CodeIQのこちらの問題、https://codeiq.jp/q/1587Windows7のPCで行っていました。
spark-shellから一行ずつ入力して、一応それなりの結果を得ることはできた。


が、やっていてなんだかちょっとなあ、と感じた。シェルにコマンドを打ち込むというのがなんとも弱い。しかもテキストファイルに書き込めないので結果をシェルに出してコピー、それをファイルにペ―ストして回答を作るという手段も格好悪い。じゃあ、sbtを使えば動くのだろうか、と思ったものの「All masters are unresponsive!」というエラーが出る。方方調べまわって、spark-master.shを起動させると良いらしいが、起動させてみるも「spark-class: cannot make pipe for process substitution: Function not implemented」と言われてしまい、よくわからない。おそらくWindowsなのがいけないんだ、ではVirtualBoxUbuntu 14.04でやってみよう。


Ubuntu 14.04はこちら仮想ハードディスクイメージのダウンロード | Ubuntu Japanese Teamの仮想イメージをそのまま使う


なおSparkのインストール・設定はこちらがすごく参考になります。分散処理に入門してみた(Hadoop + Spark) | キャスレーコンサルティング株式会社


まずはJDKJREをインストール。バージョン7にする。こちら(HadoopJavaVersions - Hadoop Wiki)を見るとJava8はチェックされていないため。(多分動くだろうけど)その後.bashrcにJAVA_HOMEを設定。

sudo apt-get install openjdk-7-jdk openjdk-7-jre openjdk-7-jre-headless 


hadoop-2.6.0をダウンロード。2.7.0もあるが、sparkはHadoopの2.6.0までの対応のため。

wget http://ftp.meisei-u.ac.jp/mirror/apache/dist/hadoop/common/hadoop-2.6.0/hadoop-2.6.0.tar.gz
tar zxvf hadoop-2.6.0.tar.gz
sudo mv hadoop-2.6.0 /usr/local/
cd /usr/local
sudo ln -sv hadoop-2.6.0 hadoop


.bashrcを編集して、Hadoop関連の設定。

export JAVA_HOME=/usr/lib/jvm/java-7-openjdk-amd64/jre
export HADOOP_HOME=/usr/local/hadoop
export HADOOP_COMMON_LIB_NATIVE_DIR=$HADOOP_HOME/lib/native
export HADOOP_OPTS="-Djava.library.path=$HADOOP_HOME/lib/native"
export PATH=$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$JAVA_HOME/bin:$PATH


scalaのインストール、および設定。2.10.4を使う。

wget http://www.scala-lang.org/files/archive/scala-2.10.4.tgz
tar zxvf scala-2.10.4.tgz
sudo mv scala-2.10.4 /usr/local
cd /usr/local
ln -sv scala-2.10.4 scala
echo "export SCALA_HOME=/usr/local/scala" >> ~./bashrc


sparkのインストール、および設定。1.4.0のHadoop2.6のを使う。

wget http://ftp.yz.yamagata-u.ac.jp/pub/network/apache/spark/spark-1.4.0/spark-1.4.0-bin-hadoop2.6.tgz
tar zxvf spark-1.4.0-bin-hadoop2.6.tgz
sudo mv spark-1.4.0-bin-hadoop2.6 /usr/local
cd /usr/local
ln -sv spark-1.4.0-bin-hadoop2.6 spark
echo "export SPARK_HOME=/usr/local/spark" >> ~/.bashrc
echo "export PATH=\$SPARK_HOME/bin:\$SCALA_HOME/bin:\$PATH" >> ~/.bashrc
source ~/.bashrc

sparkの動作確認。

spark-shell
:
:
scala> val a = sc.textFile("/usr/local/spark/README.md")
:
:
a: org.apache.spark.rdd.RDD[String] = MapPartitionsRDD[1] at textFile at <console>:21
scala> a.count
res0: Long = 98


ちゃんと動く。