【Hadoop】macOS に YARN 上の Spark 実行環境を構築【HDFS】

| 1件のコメント

今回は macOS で Standalone Mode ではない YARN上の Spark 実行環境を構築するメモです。

  • macOS: 10.12.1
  • Java: 1.8.0_111
  • Apache Hadoop: 2.7.3
  • Apache Spark: 2.0.2

Apache Hadoop 2.7.3

JDKがなければインストールする。

$ java -version
java version "1.8.0_111"
Java(TM) SE Runtime Environment (build 1.8.0_111-b14)
Java HotSpot(TM) 64-Bit Server VM (build 25.111-b14, mixed mode) 

Hadoop2.7.3 をインストールする。

$ wget http://apache.mirrors.tds.net/hadoop/common/hadoop-2.7.3/hadoop-2.7.3.tar.gz
$ tar zxvf ~/tmp/hadoop-2.7.3.tar.gz -C /usr/local/

source からビルドする場合は以下。

$ brew update
$ brew install bzip2 lz4 snappy openssl

環境変数をセットする。

export OPENSSL_ROOT_DIR=$(brew --prefix openssl)
export OPENSSL_INCLUDE_DIR=$OPENSSL_ROOT_DIR/include/
export JAVA_HOME=$(/usr/libexec/java_home -v 1.8)
export HADOOP_HOME=/usr/local/hadoop-2.7.3
export HADOOP_PREFIX=$HADOOP_HOME
export PATH=$PATH:$HADOOP_HOME/bin
export PATH=$PATH:$HADOOP_HOME/sbin
export HADOOP_MAPRED_HOME=$HADOOP_HOME
export HADOOP_COMMON_HOME=$HADOOP_HOME
export HADOOP_HDFS_HOME=$HADOOP_HOME
export YARN_HOME=$HADOOP_HOME
export HADOOP_COMMON_LIB_NATIVE_DIR=$HADOOP_HOME/lib/native
export HADOOP_OPTS="-Djava.library.path=$HADOOP_COMMON_LIB_NATIVE_DIR"

source を取得しビルドする。数回エラーが起きたが対応した。 (対応の詳細はこのページの最後に)

$ git clone https://github.com/apache/hadoop.git
$ cd hadoop
$ git checkout rel/release-2.7.3
$ mvn package -Pdist,native -DskipTests -Dtar -Dmaven.javadoc.skip=true

...
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 03:56 min
[INFO] Finished at: 2016-11-23T11:56:10+09:00
[INFO] Final Memory: 85M/755M
[INFO] ------------------------------------------------------------------------

$ cp -r ~/tmp/hadoop/hadoop-dist/target/hadoop-2.7.3 /usr/local/

native hadoop の確認。 bzip2 が false になっているが取り敢えず先に進む。

$ hadoop checknative -a
2016-11-23 20:10:42,375 WARN  [main] bzip2.Bzip2Factory (Bzip2Factory.java:isNativeBzip2Loaded(73)) - Failed to load/initialize native-bzip2 library system-native, will use pure-Java version
2016-11-23 20:10:42,406 INFO  [main] zlib.ZlibFactory (ZlibFactory.java:(49)) - Successfully loaded & initialized native-zlib library
Native library checking:
hadoop:  true /usr/local/hadoop-2.7.3/lib/native/libhadoop.dylib
zlib:    true /usr/lib/libz.1.dylib
snappy:  true /usr/local/lib/libsnappy.1.dylib
lz4:     true revision:99
bzip2:   false
openssl: false build does not support openssl.
2016-11-23 20:10:42,463 INFO  [main] util.ExitUtil (ExitUtil.java:terminate(124)) - Exiting with status 1

この時点で /usr/local/ 以下に hadoop-2.7.3 が展開されている状態とする。念のため設定ファイルを hadoop-backup に移しておく。

$ mv /usr/local/hadoop-2.7.3/etc/hadoop /usr/local/hadoop-2.7.3/etc/hadoop-backup
$ mkdir /usr/local/hadoop-2.7.3/etc/hadoop
$ cp /usr/local/hadoop-2.7.3/etc/hadoop-backup/core-site.xml /usr/local/hadoop-2.7.3/etc/hadoop/
$ cp /usr/local/hadoop-2.7.3/etc/hadoop-backup/hdfs-site.xml /usr/local/hadoop-2.7.3/etc/hadoop/
$ cp /usr/local/hadoop-2.7.3/etc/hadoop-backup/yarn-site.xml /usr/local/hadoop-2.7.3/etc/hadoop/
$ cp /usr/local/hadoop-2.7.3/etc/hadoop-backup/capacity-scheduler.xml /usr/local/hadoop-2.7.3/etc/hadoop/
$ cp /usr/local/hadoop-2.7.3/etc/hadoop-backup/hadoop-env.sh /usr/local/hadoop-2.7.3/etc/hadoop/

試しに起動するための設定を書く。

$ vim /usr/local/hadoop-2.7.3/etc/hadoop/core-site.xml
<property>
    <name>fs.defaultFS</name>
    <value>hdfs://localhost:9000</value>
</property>

$ vim /usr/local/hadoop-2.7.3/etc/hadoop/hdfs-site.xml
<property>
    <name>dfs.replication</name>
    <value>1</value>
</property>

$ vim /usr/local/hadoop-2.7.3/etc/hadoop/yarn-site.xml
<property>
    <name>yarn.nodemanager.aux-services</name>
    <value>mapreduce_shuffle</value>
</property>

HDFS の NameNode が管理するメタデータを初期化する。

$ hdfs namenode -format

Hadoop を起動する。

/usr/local/hadoop-2.7.3/sbin/hadoop-daemon.sh --config /usr/local/hadoop-2.7.3/etc/hadoop start datanode
/usr/local/hadoop-2.7.3/sbin/hadoop-daemon.sh --config /usr/local/hadoop-2.7.3/etc/hadoop start namenode
/usr/local/hadoop-2.7.3/sbin/yarn-daemon.sh --config /usr/local/hadoop-2.7.3/etc/hadoop start resourcemanager
/usr/local/hadoop-2.7.3/sbin/yarn-daemon.sh --config /usr/local/hadoop-2.7.3/etc/hadoop start nodemanager
/usr/local/hadoop-2.7.3/sbin/mr-jobhistory-daemon.sh --config /usr/local/hadoop-2.7.3/etc/hadoop start historyserver

プロセスを確認する。

$ jps
83763 NameNode
83971 Jps
83938 JobHistoryServer
83879 NodeManager
83702 DataNode
83822 ResourceManager

localhost:50070にアクセスすると HDFS の状態を確認できる。

hadoop-web-ui

Apache Spark 2.0.2

Spark 2.0.2 をダウンロードして展開する。

$ wget http://d3kbcqa49mib13.cloudfront.net/spark-2.0.2-bin-hadoop2.7.tgz
$ tar zxvf ~/tmp/spark-2.0.2-bin-hadoop2.7.tgz -C /usr/local/

spark-env.sh に 先ほどの Hadoop 設定を指定しておく。

$ vim /usr/local/spark-2.0.2-bin-hadoop2.7/conf/spark-env.sh
#!/usr/bin/env bash

HADOOP_CONF_DIR=/usr/local/hadoop-2.7.3/etc/hadoop

master に YARN を指定して起動する。

$ /usr/local/spark-2.0.2-bin-hadoop2.7/bin/pyspark --master yarn
Python 2.7.12 (default, Nov 19 2016, 15:10:12)
[GCC 4.2.1 Compatible Apple LLVM 8.0.0 (clang-800.0.42.1)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
Using Spark's default log4j profile: org/apache/spark/log4j-defaults.properties
Setting default log level to "WARN".
To adjust logging level use sc.setLogLevel(newLevel).
16/11/23 19:39:25 WARN NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable
16/11/23 19:39:43 WARN Client: Neither spark.yarn.jars nor spark.yarn.archive is set, falling back to uploading libraries under SPARK_HOME.
Welcome to
      ____              __
     / __/__  ___ _____/ /__
    _\ \/ _ \/ _ `/ __/  '_/
   /__ / .__/\_,_/_/ /_/\_\   version 2.0.2
      /_/

Using Python version 2.7.12 (default, Nov 19 2016 15:10:12)
SparkSession available as 'spark'.
>>>

localhost:8088 にアクセスすると YARN 上で動いている Spark などの Applications が確認できる。

spark-on-yarn

A. Hadoop の build 時の対応

対応するバージョンの Protocol buffers のインストール。

$ brew tap homebrew/versions
$ brew install protobuf250
$ brew link --force --overwrite protobuf250
$ protoc --version
libprotoc 2.5.0

cmake を DL しインストール。

$ sudo ln -s "/Applications/CMake.app/Contents/bin/cmake" /usr/local/bin/cmake
$ cmake --version
cmake version 3.8.0


[1] Spark Quick Start
[2] OSXで擬似分散モードのApacheHadoop2.7.0を動かす
[3] Hadoop native libraries not found on OS/X

1件のコメント

  1. ピンバック: 【Spark】ml/recommendation/ALS を試したみた【CF】 | FiS Project

コメントを残す

必須欄は * がついています