Spark 1.3.0がリリースされたらしいです。
Spark Release 1.3.0 | Apache Spark
でも、いかんせんSpark使ったことなくてよくわかりません。とりあえずインストールくらいはしてみるか、と思ってやったときのメモ。
※いろいろ試して動いたのをまとめてるだけなので、必要な手順が足りてなかったり、関係ない手順が入ってるかもです。あんまり理解できてません。。
Hadoopをインストールする
参考:Apache Hadoop 2.6.0 - Hadoop MapReduce Next Generation 2.6.0 - Setting up a Single Node Cluster.
何はともあれ、まずはHadoopをインストールしてsingle-nodeで動かします。この記事を書く時点での最新バージョンは2.6.0でした。
とりあえずJavaを入れます。
sudo apt-get install openjdk-7-jdk
ミラーのリストから近そうなところをえらんでアーカイブを落としてきます。
wget http://ftp.yz.yamagata-u.ac.jp/pub/network/apache/hadoop/common/hadoop-2.6.0/hadoop-2.6.0.tar.gz # 展開 tar xf hadoop-2.6.0.tar.gz sudo mv hadoop-2.6.0 /usr/local/hadoop # パスを通す echo 'export PATH=$PATH:/usr/local/hadoop/bin:/usr/local/hadoop/sbin' >> .bashrc source .bashrc
hadoopを起動するときには環境変数JAVA_HOME
が参照されます。よくわかりませんが.bashrc
とかに書いただけではうまく引き継がれず、/usr/local/hadoop/etc/hadoop/hadoop-env.sh
に書かないといけないっぽいです。
ということで、元々書いてある行をコメントアウトして書き加えます。(ここで固定のパスを書いてしまうとJavaのバージョンを変えた時にまずい、という話もありますがとりあえず試すだけなので気にしないことにします)
# The java implementation to use. #export JAVA_HOME=${JAVA_HOME} export JAVA_HOME=/usr/lib/jvm/java-7-openjdk-amd64/jre
あと、sshでログインするときパスワードを聞かれないように、鍵の設定をしておきます。
# すでに鍵があるなら不要。ないならつくる。 mkdir -p ~/.ssh ssh-keygen -t rsa -P '' -f ~/.ssh/id_rsa cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
試しに動かしてみるために、/usr/local/hadoop/etc/hadoop/core-site.xml
の<configuration>
タグの間に以下を書き加えます。
<property> <name>fs.default.name</name> <value>hdfs://localhost:9000</value> </property>
で、hdfsを起動してみます。
start-dfs.sh
これがエラーなく起動すれば問題ないはずです。止めます。
stop-dfs.sh
Sparkを動かす
参考:Quick Start - Spark 1.3.0 Documentation
今回は、Hadoop 2.4以降用にビルドされたSparkを使います。ミラーサイトのリストから一番近そうなところを選んでダウンロードしてきます。
wget http://ftp.tsukuba.wide.ad.jp/software/apache/spark/spark-1.3.0/spark-1.3.0-bin-hadoop2.4.tgz
# 展開
tar xf spark-1.3.0-bin-hadoop2.4.tgz
このまま起動すると、INFOレベルのログが出まくって見づらいので、log4j.properties
を用意します。テンプレートをコピーして書き換えるだけです。
cd /spark-1.3.0-bin-hadoop2.4
cp conf/log4j.properties.template log4j.properties
vi log4j.properties
この部分をINFO
からWARN
にします。
# Set everything to be logged to the console #log4j.rootCategory=INFO, console log4j.rootCategory=WARN, console
いよいよ起動してみます。Scalaよく分からないのでPythonの方を使ってみます。
$ bin/pyspark Python 2.7.6 (default, Mar 22 2014, 22:59:56) [GCC 4.8.2] on linux2 Type "help", "copyright", "credits" or "license" for more information. 15/03/15 03:27:51 WARN Utils: Your hostname, test resolves to a loopback address: 127.0.1.1; using 10.0.3.70 instead (on interface eth0) 15/03/15 03:27:51 WARN Utils: Set SPARK_LOCAL_IP if you need to bind to another address 15/03/15 03:27:52 WARN NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable Welcome to ____ __ / __/__ ___ _____/ /__ _\ \/ _ \/ _ `/ __/ '_/ /__ / .__/\_,_/_/ /_/\_\ version 1.3.0 /_/ Using Python version 2.7.6 (default, Mar 22 2014 22:59:56) SparkContext available as sc, HiveContext available as sqlCtx. >>>
例にあるのを試してみます。
>>> textFile = sc.textFile("README.md") >>> textFile.count() 98 >>> textFile.first() u'# Apache Spark' >>> textFile.map(lambda line: len(line.split())).reduce(lambda a, b: a if (a > b) else b) 14
なんか動いてるっぽいのでとりあえずよしとします。