Hadoop HDFSと連携するためApache Sparkをインストールしてみた。
インストール手順
■ハード構成
・自作無線ルータ(Raspberry Pi)
・CubieTruck (Fedora 19) * 4
■ミドル構成
・Oracle JDK 1.7 for ARM
・Hadoop 2.2.0
・Apache Spark 1.0.2
Hadoop構築時に行った、hosts設定、Javaのインストール、SSHノンパス処理は割愛します。
【Hadoop構築手順】
http://qiita.com/tsunaki/items/41b9ea36ae99b7702ae3
Sparkのインストール
# cd /usr/local/src
# wget http://ftp.riken.jp/net/apache/spark/spark-1.0.2/spark-1.0.2-bin-hadoop2.tgz
# tar zxf spark-1.0.2-bin-hadoop2.tgz
# mv spark-1.0.2-bin-hadoop2 /opt/
これで既にStandalone modeで動きます。
ここから、cluster設定を行います。
# mv spark-1.0.2-bin-hadoop2 /opt/
# cd /opt/spark-1.0.2-bin-hadoop2
# cp conf/spark-env.sh.template conf/spark-env.sh
# vi conf/spark-env.sh.template
一番下にmasterのIPを追記します。
#!/usr/bin/env bash
# This file is sourced when running various Spark programs.
# Copy it as spark-env.sh and edit that to configure Spark for your site.
# Options read when launching programs locally with
# ./bin/run-example or ./bin/spark-submit
# - HADOOP_CONF_DIR, to point Spark towards Hadoop configuration files
# - SPARK_LOCAL_IP, to set the IP address Spark binds to on this node
# - SPARK_PUBLIC_DNS, to set the public dns name of the driver program
# - SPARK_CLASSPATH, default classpath entries to append
# Options read by executors and drivers running inside the cluster
# - SPARK_LOCAL_IP, to set the IP address Spark binds to on this node
# - SPARK_PUBLIC_DNS, to set the public DNS name of the driver program
# - SPARK_CLASSPATH, default classpath entries to append
# - SPARK_LOCAL_DIRS, storage directories to use on this node for shuffle and RDD data
# - MESOS_NATIVE_LIBRARY, to point to your libmesos.so if you use Mesos
# Options read in YARN client mode
# - HADOOP_CONF_DIR, to point Spark towards Hadoop configuration files
# - SPARK_EXECUTOR_INSTANCES, Number of workers to start (Default: 2)
# - SPARK_EXECUTOR_CORES, Number of cores for the workers (Default: 1).
# - SPARK_EXECUTOR_MEMORY, Memory per Worker (e.g. 1000M, 2G) (Default: 1G)
# - SPARK_DRIVER_MEMORY, Memory for Master (e.g. 1000M, 2G) (Default: 512 Mb)
# - SPARK_YARN_APP_NAME, The name of your application (Default: Spark)
# - SPARK_YARN_QUEUE, The hadoop queue to use for allocation requests (Default: ‘default’)
# - SPARK_YARN_DIST_FILES, Comma separated list of files to be distributed with the job.
# - SPARK_YARN_DIST_ARCHIVES, Comma separated list of archives to be distributed with the job.
# Options for the daemons used in the standalone deploy mode:
# - SPARK_MASTER_IP, to bind the master to a different IP address or hostname
# - SPARK_MASTER_PORT / SPARK_MASTER_WEBUI_PORT, to use non-default ports for the master
# - SPARK_MASTER_OPTS, to set config properties only for the master (e.g. "-Dx=y")
# - SPARK_WORKER_CORES, to set the number of cores to use on this machine
# - SPARK_WORKER_MEMORY, to set how much total memory workers have to give executors (e.g. 1000m, 2g)
# - SPARK_WORKER_PORT / SPARK_WORKER_WEBUI_PORT, to use non-default ports for the worker
# - SPARK_WORKER_INSTANCES, to set the number of worker processes per node
# - SPARK_WORKER_DIR, to set the working directory of worker processes
# - SPARK_WORKER_OPTS, to set config properties only for the worker (e.g. "-Dx=y")
# - SPARK_HISTORY_OPTS, to set config properties only for the history server (e.g. "-Dx=y")
# - SPARK_DAEMON_JAVA_OPTS, to set config properties for all daemons (e.g. "-Dx=y")
# - SPARK_PUBLIC_DNS, to set the public dns name of the master or workers
# ADD master00
SPARK_MASTER_IP=192.168.100.2
次にslavesを設定します。
# vi conf/slaves
localhostの記述をいかに変更します。
master00
slave01
slave02
slave03
このディレクトリを各slaveに展開します。
※masterと同じにすること。
展開後にmaster00で起動処理
# su - hduser
$ /opt/spark-1.0.2-bin-hadoop2/start-all.sh
これで完了です。
WEBで起動の確認
クラスターで動いてることを確認できます。
確認できたらHadoopと連結して動作確認してみます。
先ずテストデータを準備します。ここでは郵便番号を使用します。
(処理はすべてmaster00で行ってます)
# su - hduser
$ wget http://www.post.japanpost.jp/zipcode/dl/oogaki/zip/ken_all.zip
$ unzip ken_all.zip
$ nkf -w KEN_ALL.CSV > KEN_ALL.CSV.utf
### UTFに変換します。
$ mv KEN_ALL.CSV.utf KEN_ALL.CSV
### HFDSに登録
$ hdfs dfs -put KEN_ALL.CSV /user/
$ hdfs dfs -ls /user
[hduser@master00 ~]$ hdfs dfs -ls /user
14/08/29 21:55:26 WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable
Found 1 items
-rw-r--r-- 4 hduser supergroup 12232566 2014-08-29 21:07 /user/KEN_ALL.CSV
Spark-shellを起動させてます。
$ /opt/spark-1.0.2-bin-hadoop2/bin/spark-shell
Hadoopのテキストを読み込みます。
scala> val file = sc.textFile("hdfs://master00:9000/user/KEN_ALL.CSV")
読み込んだことを確認してみます。
scala> file.count()
次に横浜という文字を検索してみます
scala> file.filter(line => line.contains("横浜")).foreach(println)
検索できたことが確認できます。
以上
HadoopのMapReduceに比べると、ものすごく早くなりました。
これならARMのCPUボードでも十分活用できそうです。