LoginSignup
0
0

More than 5 years have passed since last update.

Spark History Server by Docker

Last updated at Posted at 2017-02-20

やりたいこと

  • 開発環境を汚さずにSparkのHistoryサーバーを使いたい!
  • Docker使う場合、他のクラスターで実行した結果を、SparkのHistoryにお手軽に食わせられるようにしたい

課題

Dockerを使ってSparkを実行するためのDocker imageは多々あれども、Historyサーバーも含めて自動起動してくれるimageがない!(あっても見つからない)

解決方法

既存のDocker imageを構築するDockerfileをHistoryサーバーも起動するように変更する

ベースとするDockerfile(ビルド対象ソース)

バージョン

構築するDocker imageの内容は以下の通り。
JavaとHadoopのバージョンは、今回はたまたまこれというだけで、おそらく、別のバージョンでも同じ変更でいけると思う(試してないけど)

OS/ミドルウェア バージョン 補足
CentOS 6.5 7系だと色々と動かない
Java Oracle JDK7 Java 8版のimageもあるが、まずはこれ
Apache Hadoop 2.7.2
Apache Spark 1.6.2 2.0.2や2.1.0のimageもあるが、まずはこれ

手順

  1. bootstrap.sh$HADOOP_PREFIX/sbin/start-yarn.sh の次の行に以下の1行を追加する。

    ${SPARK_HOME}/sbin/start-history-server.sh
    
  2. Dockerfile に以下の2行を追加する

    RUN mkdir /tmp/spark-events
    
    EXPOSE 18080
    
  3. docker runの際に -p 18080:18080-v /vagrant/logs/spark:/tmp/spark-events (/vagrant/logs/spark は他のクラスターのHistoryを格納するホスト側のパス)の指定を追加する

結果

bootstrap.sh
#!/bin/bash

: ${HADOOP_PREFIX:=/usr/local/hadoop}

$HADOOP_PREFIX/etc/hadoop/hadoop-env.sh

rm /tmp/*.pid

# installing libraries if any - (resource urls added comma separated to the ACP system variable)
cd $HADOOP_PREFIX/share/hadoop/common ; for cp in ${ACP//,/ }; do  echo == $cp; curl -LO $cp ; done; cd -

# altering the core-site configuration
sed s/HOSTNAME/$HOSTNAME/ /usr/local/hadoop/etc/hadoop/core-site.xml.template > /usr/local/hadoop/etc/hadoop/core-site.xml

# setting spark defaults
echo spark.yarn.jar hdfs:///spark/spark-assembly-1.6.2-hadoop2.6.0.jar > $SPARK_HOME/conf/spark-defaults.conf
cp $SPARK_HOME/conf/metrics.properties.template $SPARK_HOME/conf/metrics.properties

if [ -z "${SPARK_HOME}" ]; then
  export SPARK_HOME="$(cd "`dirname "$0"`"/..; pwd)"
fi

service sshd start
$HADOOP_PREFIX/sbin/start-dfs.sh
$HADOOP_PREFIX/sbin/start-yarn.sh
${SPARK_HOME}/sbin/start-history-server.sh

CMD=${1:-"exit 0"}
if [[ "$CMD" == "-d" ]];
then
    service sshd stop
    /usr/sbin/sshd -D -d
else
    /bin/bash -c "$*"
fi
Dockerfile
FROM poad/docker-spark:1.6.2

USER root

COPY bootstrap.sh /etc/bootstrap.sh
RUN chown root.root /etc/bootstrap.sh
RUN chmod 700 /etc/bootstrap.sh

RUN mkdir /tmp/spark-events

EXPOSE 18080

ENTRYPOINT ["/etc/bootstrap.sh"]

起動コマンド
 docker run -d -h sandbox -p 18080:18080 -p 50010:50010 -p 50020:50020  -p 50070:50070 -p 50075:50075 -p 50090:50090 -p 8020:8020 -p 9000:9000 -p 19888:19888 -p 8030:8030 -p 8031:8031 -p 8032:8032 -p 8033:8033 -p 8040:8040 -p 8042:8042 -p 8088:8088 -p 49707:49707 -p 2122:2122 -v /vagrant/logs/spark:/tmp/spark-events --name spark poad/docker-spark:1.6.2-with-history-server -d

最後に

ちなみに、Historyサーバーの起動は少し時間がかかる(1分くらい?)ため、それまでは成功しているのかわからない状態が続きます

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0