夢とガラクタの集積場

落ちこぼれ三流エンジニアである管理人の夢想=『夢』と、潰えた夢=『ガラクタ』の集積場です。

SparkのサンプルをMesosの上で動作させる(REPL) → 動作せず・・・(汗

こんにちは。

ここまででSparkのローカルアプリケーションとMesosの環境構築が完了したため、
ついに実際にSparkのクラスタをMesosの上で動作させてみます。

まずはHDFSは使わず、ローカルのファイルを読み込ませる形で動作させます。

尚、分散クラスタ上で動作させる必要が出た段階で、
「Sparkの分散配置用アーカイブを生成して、HDFS等の上に配置する」ということが必要になってきます。
で、分散配置用アーカイブを生成するためにはsparkのソースコードをダウンロードした配下にある
「make-distribution.sh」が必要です。

というわけで、今回からビルドも含めて仮想マシン上で行う形になります。

そのため、改めてビルド環境から再構築します。

1.Apache Sparkの配置用アーカイブ作成

1-1.Gitインストール

「spark-0.8.0-incubating-bin-cdh4.tgz」を用いてビルドを行う場合、Gitコマンドも必要となるため、
予めインストールしておきます。

# yum install git

1-2.Apache Sparkのビルド

では、Apache Sparkのビルドを行います。
尚、今回はcdh4系ともう確定しているため、それに取得するファイルもあわせています。

# wget http://spark-project.org/download/spark-0.8.0-incubating-bin-cdh4.tgz
# tar xzf spark-0.8.0-incubating-bin-cdh4.tgz 
# cd spark-0.8.0-incubating-bin-cdh4
# SPARK_HADOOP_VERSION=2.0.0-mr1-cdh4.4.0 sbt/sbt clean assembly
(省略)
[warn] Strategy 'concat' was applied to 2 files
[warn] Strategy 'discard' was applied to 2 files
[warn] Strategy 'first' was applied to 851 files
[info] Checking every *.class/*.jar file's SHA-1.
[info] SHA-1: 578ea40714bc9a79d870bf73b6db8be2e9b10b80
[info] Packaging /usr/local/src/spark-0.8.0-incubating-bin-cdh4/examples/target/scala-2.9.3/spark-examples-assembly-0.8.0-incubating.jar ...
[info] Done packaging.
[success] Total time: 1512 s, completed 2013/11/20 8:35:50
>

これでSparkのビルドは完了しました。次はSparkの実行アーカイブを生成します。
Sparkの実行アーカイブは「./make-distribution.sh」のコマンドで生成可能です。

# ./make-distribution.sh --hadoop 2.0.0-mr1-cdh4.4.0
 → distディレクトリ配下に実行アーカイブファイル群が生成
# mv dist spark-0.8.0-2.0.0-mr1-cdh4.4.0
# tar cvzf spark-0.8.0-2.0.0-mr1-cdh4.4.0.tgz spark-0.8.0-2.0.0-mr1-cdh4.4.0
 → Spark実行アーカイブが生成
# tar tvzf spark-0.8.0-2.0.0-mr1-cdh4.4.0.tgz
drwxr-xr-x root/root         0 2013-11-21 08:47 spark-0.8.0-2.0.0-mr1-cdh4.4.0/
-rwxr-xr-x root/root      2128 2013-11-21 08:47 spark-0.8.0-2.0.0-mr1-cdh4.4.0/pyspark
drwxr-xr-x root/root         0 2013-11-21 08:47 spark-0.8.0-2.0.0-mr1-cdh4.4.0/jars/
-rw-r--r-- root/root  88136092 2013-11-21 08:47 spark-0.8.0-2.0.0-mr1-cdh4.4.0/jars/spark-assembly-0.8.0-incubating-hadoop2.0.0-mr1-cdh4.4.0.jar
-rwxr-xr-x root/root       946 2013-11-21 08:47 spark-0.8.0-2.0.0-mr1-cdh4.4.0/spark-executor
-rwxr-xr-x root/root      2440 2013-11-21 08:47 spark-0.8.0-2.0.0-mr1-cdh4.4.0/spark-shell
drwxr-xr-x root/root         0 2013-11-21 08:47 spark-0.8.0-2.0.0-mr1-cdh4.4.0/bin/
-rwxr-xr-x root/root      4177 2013-11-21 08:47 spark-0.8.0-2.0.0-mr1-cdh4.4.0/bin/spark-daemon.sh
-rwxr-xr-x root/root      1637 2013-11-21 08:47 spark-0.8.0-2.0.0-mr1-cdh4.4.0/bin/start-slaves.sh
-rwxr-xr-x root/root      1403 2013-11-21 08:47 spark-0.8.0-2.0.0-mr1-cdh4.4.0/bin/spark-config.sh
-rwxr-xr-x root/root      1292 2013-11-21 08:47 spark-0.8.0-2.0.0-mr1-cdh4.4.0/bin/stop-slaves.sh
-rwxr-xr-x root/root      2158 2013-11-21 08:47 spark-0.8.0-2.0.0-mr1-cdh4.4.0/bin/slaves.sh
-rwxr-xr-x root/root      1005 2013-11-21 08:47 spark-0.8.0-2.0.0-mr1-cdh4.4.0/bin/stop-master.sh
-rwxr-xr-x root/root      1516 2013-11-21 08:47 spark-0.8.0-2.0.0-mr1-cdh4.4.0/bin/start-slave.sh
-rwxr-xr-x root/root      1041 2013-11-21 08:47 spark-0.8.0-2.0.0-mr1-cdh4.4.0/bin/stop-all.sh
-rwxr-xr-x root/root      1100 2013-11-21 08:47 spark-0.8.0-2.0.0-mr1-cdh4.4.0/bin/start-all.sh
-rwxr-xr-x root/root      1190 2013-11-21 08:47 spark-0.8.0-2.0.0-mr1-cdh4.4.0/bin/spark-daemons.sh
-rwxr-xr-x root/root      1901 2013-11-21 08:47 spark-0.8.0-2.0.0-mr1-cdh4.4.0/bin/start-master.sh
-rw-r--r-- root/root      2620 2013-11-21 08:47 spark-0.8.0-2.0.0-mr1-cdh4.4.0/bin/compute-classpath.cmd
-rwxr-xr-x root/root      2372 2013-11-21 08:47 spark-0.8.0-2.0.0-mr1-cdh4.4.0/bin/compute-classpath.sh
-rw-r--r-- root/root        59 2013-11-21 08:47 spark-0.8.0-2.0.0-mr1-cdh4.4.0/RELEASE
drwxr-xr-x root/root         0 2013-11-21 08:47 spark-0.8.0-2.0.0-mr1-cdh4.4.0/conf/
drwxr-xr-x root/root         0 2013-11-21 08:47 spark-0.8.0-2.0.0-mr1-cdh4.4.0/python/
drwxr-xr-x root/root         0 2013-11-21 08:47 spark-0.8.0-2.0.0-mr1-cdh4.4.0/python/pyspark/
-rw-r--r-- root/root     12866 2013-11-21 08:47 spark-0.8.0-2.0.0-mr1-cdh4.4.0/python/pyspark/context.py
-rw-r--r-- root/root      2099 2013-11-21 08:47 spark-0.8.0-2.0.0-mr1-cdh4.4.0/python/pyspark/storagelevel.py
-rw-r--r-- root/root      7273 2013-11-21 08:47 spark-0.8.0-2.0.0-mr1-cdh4.4.0/python/pyspark/tests.py
-rw-r--r-- root/root      1931 2013-11-21 08:47 spark-0.8.0-2.0.0-mr1-cdh4.4.0/python/pyspark/shell.py
-rw-r--r-- root/root      1896 2013-11-21 08:47 spark-0.8.0-2.0.0-mr1-cdh4.4.0/python/pyspark/files.py
-rw-r--r-- root/root      1917 2013-11-21 08:47 spark-0.8.0-2.0.0-mr1-cdh4.4.0/python/pyspark/broadcast.py
-rw-r--r-- root/root      4139 2013-11-21 08:47 spark-0.8.0-2.0.0-mr1-cdh4.4.0/python/pyspark/rddsampler.py
-rw-r--r-- root/root      2650 2013-11-21 08:47 spark-0.8.0-2.0.0-mr1-cdh4.4.0/python/pyspark/java_gateway.py
-rw-r--r-- root/root     34089 2013-11-21 08:47 spark-0.8.0-2.0.0-mr1-cdh4.4.0/python/pyspark/rdd.py
-rw-r--r-- root/root      5913 2013-11-21 08:47 spark-0.8.0-2.0.0-mr1-cdh4.4.0/python/pyspark/daemon.py
-rw-r--r-- root/root      1812 2013-11-21 08:47 spark-0.8.0-2.0.0-mr1-cdh4.4.0/python/pyspark/__init__.py
-rw-r--r-- root/root     35668 2013-11-21 08:47 spark-0.8.0-2.0.0-mr1-cdh4.4.0/python/pyspark/cloudpickle.py
-rw-r--r-- root/root      3782 2013-11-21 08:47 spark-0.8.0-2.0.0-mr1-cdh4.4.0/python/pyspark/worker.py
-rw-r--r-- root/root      3694 2013-11-21 08:47 spark-0.8.0-2.0.0-mr1-cdh4.4.0/python/pyspark/statcounter.py
-rw-r--r-- root/root      2736 2013-11-21 08:47 spark-0.8.0-2.0.0-mr1-cdh4.4.0/python/pyspark/serializers.py
-rw-r--r-- root/root      6917 2013-11-21 08:47 spark-0.8.0-2.0.0-mr1-cdh4.4.0/python/pyspark/accumulators.py
-rw-r--r-- root/root      3346 2013-11-21 08:47 spark-0.8.0-2.0.0-mr1-cdh4.4.0/python/pyspark/join.py
-rw-r--r-- root/root      1380 2013-11-21 08:47 spark-0.8.0-2.0.0-mr1-cdh4.4.0/python/epydoc.conf
drwxr-xr-x root/root         0 2013-11-21 08:47 spark-0.8.0-2.0.0-mr1-cdh4.4.0/python/lib/
-rw-r--r-- root/root      1445 2013-11-21 08:47 spark-0.8.0-2.0.0-mr1-cdh4.4.0/python/lib/PY4J_LICENSE.txt
-rw-r--r-- root/root        41 2013-11-21 08:47 spark-0.8.0-2.0.0-mr1-cdh4.4.0/python/lib/PY4J_VERSION.txt
-rw-r--r-- root/root    191756 2013-11-21 08:47 spark-0.8.0-2.0.0-mr1-cdh4.4.0/python/lib/py4j0.7.egg
drwxr-xr-x root/root         0 2013-11-21 08:47 spark-0.8.0-2.0.0-mr1-cdh4.4.0/python/examples/
-rwxr-xr-x root/root      1382 2013-11-21 08:47 spark-0.8.0-2.0.0-mr1-cdh4.4.0/python/examples/pi.py
-rwxr-xr-x root/root      1319 2013-11-21 08:47 spark-0.8.0-2.0.0-mr1-cdh4.4.0/python/examples/wordcount.py
-rwxr-xr-x root/root      2307 2013-11-21 08:47 spark-0.8.0-2.0.0-mr1-cdh4.4.0/python/examples/transitive_closure.py
-rwxr-xr-x root/root      2737 2013-11-21 08:47 spark-0.8.0-2.0.0-mr1-cdh4.4.0/python/examples/logistic_regression.py
-rwxr-xr-x root/root      2247 2013-11-21 08:47 spark-0.8.0-2.0.0-mr1-cdh4.4.0/python/examples/kmeans.py
-rwxr-xr-x root/root      2588 2013-11-21 08:47 spark-0.8.0-2.0.0-mr1-cdh4.4.0/python/examples/pagerank.py
-rwxr-xr-x root/root      3049 2013-11-21 08:47 spark-0.8.0-2.0.0-mr1-cdh4.4.0/python/examples/als.py
-rwxr-xr-x root/root      1691 2013-11-21 08:47 spark-0.8.0-2.0.0-mr1-cdh4.4.0/python/run-tests
-rw-r--r-- root/root        12 2013-11-21 08:47 spark-0.8.0-2.0.0-mr1-cdh4.4.0/python/.gitignore
drwxr-xr-x root/root         0 2013-11-21 08:47 spark-0.8.0-2.0.0-mr1-cdh4.4.0/python/test_support/
-rw-r--r-- root/root      1945 2013-11-21 08:47 spark-0.8.0-2.0.0-mr1-cdh4.4.0/python/test_support/userlib-0.1-py2.7.egg
-rwxr-xr-x root/root        13 2013-11-21 08:47 spark-0.8.0-2.0.0-mr1-cdh4.4.0/python/test_support/hello.txt
-rwxr-xr-x root/root       158 2013-11-21 08:47 spark-0.8.0-2.0.0-mr1-cdh4.4.0/python/test_support/userlibrary.py
-rwxr-xr-x root/root      3837 2013-11-21 08:47 spark-0.8.0-2.0.0-mr1-cdh4.4.0/spark-class

Jarファイルは全て1ファイルにまとめてビルドされるみたいですね。

1-3.Apache Sparkの実行アーカイブ配置/環境設定

次はApache Sparkの実行アーカイブをHDFSに配置します。
尚、配置する場所自体は別にHDFSでなくてもよくて、クラスタ内のどこからでも共通的にアクセスできればいいそうです。

# sudo -u hdfs hdfs dfs -mkdir /sparkarchive
# sudo -u hdfs hdfs dfs -put spark-0.8.0-2.0.0-mr1-cdh4.4.0.tgz /sparkarchive

次は配置した場所とMesosのライブラリの位置の設定を行います。
REPL起動の時に必要となるようです。
このあたりはREPLではなくバッチとして起動する場合には色々事情が変わってきそうですね。

# cd ../
# mv spark-0.8.0-incubating-bin-cdh4 /opt/
# cd /opt/spark-0.8.0-incubating-bin-cdh4/
# cd conf
# cp -p spark-env.sh.template spark-env.sh
# vi spark-env.sh
(以下の内容を追記)
=====
export MESOS_NATIVE_LIBRARY=/usr/local/lib/libmesos.so
export SPARK_EXECUTOR_URI=hdfs://spark1/sparkarchive/spark-0.8.0-2.0.0-mr1-cdh4.4.0.tgz
export MASTER=zk://spark1:2181/mesos
=====

これでREPLをクラスタ上で動作させる設定は完了です。

1-4.REPL起動

では、実際にクラスタ上でREPLを起動してみます。
前回ローカルモードでREPLを起動した時と違い、ZooKeeperに接続し、3台のmesos-masterを認識した状態になっています。
WARNメッセージが微妙に大丈夫かと気になりますが、それはおいおい。

# cd /opt/spark-0.8.0-incubating-bin-cdh4/
# ./spark-shell
Welcome to
      ____              __
     / __/__  ___ _____/ /__
    _\ \/ _ \/ _ `/ __/  '_/
   /___/ .__/\_,_/_/ /_/\_\   version 0.8.0
      /_/

Using Scala version 2.9.3 (OpenJDK 64-Bit Server VM, Java 1.7.0_45)
(省略)
13/11/22 07:21:52 INFO ui.SparkUI: Started Spark Web UI at http://spark1:4040
13/11/22 07:21:52 WARN spark.SparkContext: Master zk://spark1:2181/mesos does not match expected format, parsing as Mesos URL
I1122 07:21:52.924057 22004 detector.cpp:234] Master detector (scheduler(1)@192.168.100.246:41629) connected to ZooKeeper ...
I1122 07:21:52.924502 22004 detector.cpp:251] Trying to create path '/mesos' in ZooKeeper
I1122 07:21:52.925426 22004 detector.cpp:420] Master detector (scheduler(1)@192.168.100.246:41629)  found 3 registered masters
I1122 07:21:52.925734 22004 detector.cpp:467] Master detector (scheduler(1)@192.168.100.246:41629)  got new master pid: master@192.168.100.247:5050
13/11/22 07:21:52 INFO mesos.MesosSchedulerBackend: Registered as framework ID 201311130859-4150569152-5050-15300-0000
Spark context available as sc.
Type in expressions to have them evaluated.
Type :help for more information.

scala>

あとはWeb UIをきちんと見てみると以下のようなSpark Propertiesも。
複数のポートで待ち受けを行っているようではありますね。

1-5.REPLからサンプル起動

では、特に依存を必要としないSpark REPLのサンプルを動作させてみます。
すると・・・

scala> val data = 1 to 100000
※1から100000のデータセットを生成
data: scala.collection.immutable.Range.Inclusive = Range(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, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170...
scala> val paraData = sc.parallelize(data)
※生成したデータをRDD化
paraData: org.apache.spark.rdd.RDD[Int] = ParallelCollectionRDD[0] at parallelize at <console>:14
scala> paraData.filter(_< 1000).collect()
(省略)
13/11/22 07:38:55 INFO scheduler.DAGScheduler: Host gained which was in lost list earlier: spark3
13/11/22 07:38:55 INFO cluster.ClusterTaskSetManager: Starting task 0.0:1 as TID 870 on executor 201311130859-4133791936-5050-15712-0: spark3 (PROCESS_LOCAL)
13/11/22 07:38:55 INFO cluster.ClusterTaskSetManager: Serialized task 0.0:1 as 1353 bytes in 0 ms
13/11/22 07:38:55 INFO cluster.ClusterTaskSetManager: Starting task 0.0:0 as TID 871 on executor 201311130859-4133791936-5050-15712-0: spark3 (PROCESS_LOCAL)
13/11/22 07:38:55 INFO cluster.ClusterTaskSetManager: Serialized task 0.0:0 as 1353 bytes in 0 ms
13/11/22 07:38:56 INFO cluster.ClusterTaskSetManager: Re-queueing tasks for 201311130859-4133791936-5050-15712-2 from TaskSet 0.0
13/11/22 07:38:56 INFO cluster.ClusterTaskSetManager: Lost TID 867 (task 0.0:2)
13/11/22 07:38:56 INFO cluster.ClusterTaskSetManager: Lost TID 866 (task 0.0:4)
13/11/22 07:38:56 INFO scheduler.DAGScheduler: Executor lost: 201311130859-4133791936-5050-15712-2 (epoch 463)
13/11/22 07:38:56 INFO storage.BlockManagerMasterActor: Trying to remove executor 201311130859-4133791936-5050-15712-2 from BlockManagerMaster.
13/11/22 07:38:56 INFO storage.BlockManagerMaster: Removed 201311130859-4133791936-5050-15712-2 successfully in removeExecutor
13/11/22 07:38:56 INFO cluster.ClusterTaskSetManager: Starting task 0.0:4 as TID 872 on executor 201311130859-4133791936-5050-15712-2: spark1 (PROCESS_LOCAL)
13/11/22 07:38:56 INFO cluster.ClusterTaskSetManager: Serialized task 0.0:4 as 1353 bytes in 0 ms
13/11/22 07:38:56 INFO cluster.ClusterTaskSetManager: Starting task 0.0:2 as TID 873 on executor 201311130859-4133791936-5050-15712-2: spark1 (PROCESS_LOCAL)
13/11/22 07:38:56 INFO cluster.ClusterTaskSetManager: Serialized task 0.0:2 as 1353 bytes in 0 ms
13/11/22 07:38:56 INFO scheduler.DAGScheduler: Host gained which was in lost list earlier: spark1
13/11/22 07:38:57 INFO cluster.ClusterTaskSetManager: Re-queueing tasks for 201311130859-4133791936-5050-15712-1 from TaskSet 0.0
13/11/22 07:38:57 INFO cluster.ClusterTaskSetManager: Lost TID 869 (task 0.0:3)
13/11/22 07:38:57 INFO cluster.ClusterTaskSetManager: Lost TID 868 (task 0.0:5)
13/11/22 07:38:57 INFO scheduler.DAGScheduler: Executor lost: 201311130859-4133791936-5050-15712-1 (epoch 464)
13/11/22 07:38:57 INFO storage.BlockManagerMasterActor: Trying to remove executor 201311130859-4133791936-5050-15712-1 from BlockManagerMaster.
13/11/22 07:38:57 INFO storage.BlockManagerMaster: Removed 201311130859-4133791936-5050-15712-1 successfully in removeExecutor
13/11/22 07:38:57 INFO scheduler.DAGScheduler: Host gained which was in lost list earlier: spark2
13/11/22 07:38:57 INFO cluster.ClusterTaskSetManager: Starting task 0.0:5 as TID 874 on executor 201311130859-4133791936-5050-15712-1: spark2 (PROCESS_LOCAL)
13/11/22 07:38:57 INFO cluster.ClusterTaskSetManager: Serialized task 0.0:5 as 1353 bytes in 0 ms
13/11/22 07:38:57 INFO cluster.ClusterTaskSetManager: Starting task 0.0:3 as TID 875 on executor 201311130859-4133791936-5050-15712-1: spark2 (PROCESS_LOCAL)
13/11/22 07:38:57 INFO cluster.ClusterTaskSetManager: Serialized task 0.0:3 as 1353 bytes in 1 ms
13/11/22 07:38:57 INFO cluster.ClusterTaskSetManager: Re-queueing tasks for 201311130859-4133791936-5050-15712-0 from TaskSet 0.0
13/11/22 07:38:57 INFO cluster.ClusterTaskSetManager: Lost TID 871 (task 0.0:0)
13/11/22 07:38:57 INFO cluster.ClusterTaskSetManager: Lost TID 870 (task 0.0:1)
13/11/22 07:38:57 INFO scheduler.DAGScheduler: Executor lost: 201311130859-4133791936-5050-15712-0 (epoch 465)
13/11/22 07:38:57 INFO storage.BlockManagerMasterActor: Trying to remove executor 201311130859-4133791936-5050-15712-0 from BlockManagerMaster.
13/11/22 07:38:57 INFO storage.BlockManagerMaster: Removed 201311130859-4133791936-5050-15712-0 successfully in removeExecutor
13/11/22 07:38:57 INFO scheduler.DAGScheduler: Host gained which was in lost list earlier: spark3
13/11/22 07:38:57 INFO cluster.ClusterTaskSetManager: Starting task 0.0:1 as TID 876 on executor 201311130859-4133791936-5050-15712-0: spark3 (PROCESS_LOCAL)
13/11/22 07:38:57 INFO cluster.ClusterTaskSetManager: Serialized task 0.0:1 as 1353 bytes in 0 ms
13/11/22 07:38:57 INFO cluster.ClusterTaskSetManager: Starting task 0.0:0 as TID 877 on executor 201311130859-4133791936-5050-15712-0: spark3 (PROCESS_LOCAL)
13/11/22 07:38:57 INFO cluster.ClusterTaskSetManager: Serialized task 0.0:0 as 1353 bytes in 0 ms
13/11/22 07:38:58 INFO cluster.ClusterTaskSetManager: Re-queueing tasks for 201311130859-4133791936-5050-15712-2 from TaskSet 0.0
13/11/22 07:38:58 INFO cluster.ClusterTaskSetManager: Lost TID 872 (task 0.0:4)
13/11/22 07:38:58 INFO cluster.ClusterTaskSetManager: Lost TID 873 (task 0.0:2)
(省略)

どうやら正常に動作出来ていないようなので、一度「Ctrl+C」を押して終了させます。あらら。
その上でmesos-masterのUIを見てみると、以下のような大量のエラーが。

仕方がないのでsandboxをクリックして出力を追ってみると、以下のような標準出力/標準エラーとなっていました。
どうやら、HDFSからファイルの取得に失敗しているようです。

  • stdout
Fetching resources into '/var/run/mesos/slaves/201311130859-4133791936-5050-15712-1/frameworks/201311130859-4150569152-5050-15300-0000/executors/201311130859-4133791936-5050-15712-1/runs/aa6a544e-efbc-491b-886e-e8983ec29939'
Fetching resource 'hdfs://spark1/sparkarchive/spark-0.8.0-2.0.0-mr1-cdh4.4.0.tgz'
Downloading resource from 'hdfs://spark1/sparkarchive/spark-0.8.0-2.0.0-mr1-cdh4.4.0.tgz'
HDFS command: hadoop fs -copyToLocal 'hdfs://spark1/sparkarchive/spark-0.8.0-2.0.0-mr1-cdh4.4.0.tgz' './spark-0.8.0-2.0.0-mr1-cdh4.4.0.tgz'
  • stderr
copyToLocal: Call From spark2/192.168.100.247 to spark1:8020 failed on connection exception: java.net.ConnectException: 接続を拒否されました; For more details see:  http://wiki.apache.org/hadoop/ConnectionRefused
HDFS copyToLocal failed: return code 256
Failed to fetch executors

実際にローカルでコマンドを実行してみても同様の結果となり、ファイルの取得に失敗します。

# hadoop fs -copyToLocal 'hdfs://spark1/sparkarchive/spark-0.8.0-2.0.0-mr1-cdh4.4.0.tgz' './spark-0.8.0-2.0.0-mr1-cdh4.4.0.tgz'
copyToLocal: Call From spark2/192.168.100.247 to spark1:8020 failed on connection exception: java.net.ConnectException: 接続 を拒否されました; For more details see:  http://wiki.apache.org/hadoop/ConnectionRefused

尚、lsコマンドを実行するとファイルが表示されるあたり、HDFS自体が動いていないということもなさそうです。

# hadoop fs -ls '/sparkarchive'
Found 1 items
-rw-r--r--   3 hdfs supergroup   82038600 2013-11-21 08:57 /sparkarchive/spark-0.8.0-2.0.0-mr1-cdh4.4.0.tgz

後は確認してみたところ、spark1、spark2、spark3で8020番ポートは開かれていませんでした。

# netstat -an | grep 8020
(何も表示されない)

HDFSで8020ポート(NameNodeの「Filesystem metadata operations.」)が開かれていないのが原因のようです。
どうやらHDFSの設定が誤っているようですねぇ・・・

ともあれ、長くなってきたので一度切って、設定を見直してみることにします。