2
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

dockerでローカルSpark実行環境を構築

Last updated at Posted at 2019-12-07
  • ソースはこちら => Github
  • ローカルの開発環境構築が目的

実行環境

  • Hadoop: version 2.7.7
  • Spark: version 2.4.4
  • Hive: version 2.0.1

Dockerfile

FROM openjdk:8-jdk
MAINTAINER yoshiyu0922

### Versions
ENV HADOOP_MAJOR_VERSION 2.7
ENV HADOOP_VERSION $HADOOP_MAJOR_VERSION.7
ENV HIVE_VERSION 2.0.1
ENV SPARK_VERSION 2.4.4

# apt upgrade & Install netstat
RUN apt update
RUN apt install net-tools -y
RUN apt install vim -y

## Install Hadoop
ENV HADOOP_HOME /opt/hadoop-$HADOOP_VERSION
ENV HADOOP_CONF_DIR $HADOOP_HOME/conf
ENV PATH $PATH:$HADOOP_HOME/bin
RUN curl -sL \
  "https://archive.apache.org/dist/hadoop/common/hadoop-$HADOOP_VERSION/hadoop-$HADOOP_VERSION.tar.gz" \
    | gunzip \
    | tar -x -C /opt/ \
  && rm -rf $HADOOP_HOME/share/doc \
  && chown -R root:root $HADOOP_HOME \
  && mkdir -p $HADOOP_HOME/logs \
  && mkdir -p $HADOOP_CONF_DIR \
  && chmod 777 $HADOOP_CONF_DIR \
  && chmod 777 $HADOOP_HOME/logs

# Install MySQL メタストア管理用DB
RUN apt install mysql-server -y
RUN service mysql start && \
    mysql -e'CREATE DATABASE metastore;' && \
    mysql -e'CREATE USER hive@localhost IDENTIFIED BY "hive";' && \
    mysql -e'GRANT ALL PRIVILEGES ON metastore.* TO hive@localhost;'

## install Hive
ENV HIVE_HOME /opt/apache-hive-${HIVE_VERSION}-bin
ENV HIVE_CONF_DIR $HIVE_HOME/conf
ENV PATH $PATH:$HIVE_HOME/bin
RUN curl -sL \
  "https://archive.apache.org/dist/hive/hive-$HIVE_VERSION/apache-hive-$HIVE_VERSION-bin.tar.gz" \
    | gunzip \
    | tar -x -C /opt/ \
  && chown -R root:root $HIVE_HOME \
  && mkdir -p $HIVE_HOME/hcatalog/var/log \
  && mkdir -p $HIVE_HOME/var/log \
  && mkdir -p /data/hive/ \
  && chmod 777 /data/hive/ \
  && mkdir -p /tmp/hive/ \
  && chmod -R 777 /tmp/hive/ \
  && mkdir -p $HIVE_CONF_DIR \
  && chmod 777 $HIVE_HOME/hcatalog/var/log \
  && chmod 777 $HIVE_HOME/var/log

RUN ln -s $HADOOP_HOME/share/hadoop/tools/lib/aws-java-sdk-1.7.4.jar $HIVE_HOME/lib/.
RUN ln -s $HADOOP_HOME/share/hadoop/tools/lib/hadoop-aws-2.7.3.jar $HIVE_HOME/lib/.

# install Spark
ENV SPARK_HOME=/opt/spark-$SPARK_VERSION-bin-hadoop2.7
ENV SPARK_CONF_DIR=$SPARK_HOME/conf
ENV PATH $PATH:$SPARK_HOME/bin
RUN curl -sL \
  "https://archive.apache.org/dist/spark/spark-$SPARK_VERSION/spark-$SPARK_VERSION-bin-hadoop$HADOOP_MAJOR_VERSION.tgz" \
    | gunzip \
    | tar -x -C /opt/ \
  && chown -R root:root $SPARK_HOME \
  && mkdir -p /data/spark/ \
  && mkdir -p $SPARK_HOME/logs \
  && mkdir -p $SPARK_CONF_DIR \
  && chmod 777 $SPARK_HOME/logs

# Install Readline Wrapper
RUN apt-get update && apt-get install -y rlwrap \
 && rm -rf /var/lib/apt/lists/*

RUN ln -s $HADOOP_HOME/share/hadoop/tools/lib/aws-java-sdk-1.7.4.jar $SPARK_HOME/jars/.
RUN ln -s $HADOOP_HOME/share/hadoop/tools/lib/hadoop-aws-2.7.3.jar $SPARK_HOME/jars/.

# Configure
ADD files/hive-site.xml $HIVE_CONF_DIR/
ADD files/hive-site.xml $SPARK_CONF_DIR/

# initialize schema in HIVE
ADD jars/*.jar $HIVE_HOME/lib/
RUN service mysql start && \
    schematool -dbType mysql -initSchema -verbose

ENV BASE_PATH=/sample/
RUN mkdir $BASE_PATH
RUN mkdir $BASE_PATH/shells
RUN mkdir $BASE_PATH/ddl
ADD files/*.sh $BASE_PATH/shells/
RUN chmod +x $BASE_PATH/shells/*.sh
ADD files/ddl/*.hql $BASE_PATH/ddl/

EXPOSE 10000

CMD ["/sample/shells/start.sh"]

つまづいたこと

Hiveが起動したがクエリが実行できなかった

  • なぜかメタストア管理用のDBをderbyからmysqlにしたら成功した。
  • おそらくhive-site.xmlの設定が原因なのかもと思っているので、derbyでも再度トライする

beelineでjdbcによるHiveへの接続ができなかった(ClassNotFoundExceptionが発生)

  • jdbcのjarを環境変数CLASSPATHに追加しても失敗した。
  • 環境変数として定義したHIVE_HOMEのconfフォルダにjarをおけばClassNotFoundExceptionが消えた

dockerコンテナ起動しようとしてもすぐに終了してしまう

  • 起動時に実行するshellが原因だった
  • 実行状態で終了させないといけないらしい
  • shellの最後に以下のコマンドで実行状態を保つように修正
/usr/bin/tail -f /dev/null

Hiveでデータを作成してもspark-shellで確認できなかった

  • SparkのThriftServerを起動する必要があった
  • Sparkのstart-thriftserver.shを実行するだけで起動できる

上記問題をクリアしてもうまくいかなかった

  • JDBCによる接続ができない
  • Spark-shellでも接続できない
  • 原因はSparkとHiveのバージョンの互換性だった
2
3
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
2
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?