HiveをDockerで動かす
公式ドキュメントに従ってHiveのDockerイメージをつくっていく。今回は2系を動かす。
すべてのコードはnaoty/hello-hiveにある。
Java
Java 1.8への移行が推奨されているので、openjdk:8
をベースイメージに使う。
+FROM openjdk:8
Hadoop
Hive 2系に合わせてHadoopも2系をインストールする。以前のブログで紹介したとおり、HadoopをDockerコンテナで動かすには下のようなことが必要になる。
- sshdのセットアップ
- Hadoopのダウンロード
- HDFSのフォーマット
FROM openjdk:8
+# sshd
+RUN apt-get update \
+ && apt-get install -y --no-install-recommends ssh \
+ && apt-get clean \
+ && rm -rf /var/lib/apt/lists/*
+RUN mkdir /run/sshd \
+ && ssh-keygen -t rsa -P '' -f ~/.ssh/id_rsa \
+ && cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys \
+ && chmod 0600 ~/.ssh/authorized_keys
+
+# Hadoop
+RUN wget -q -O - http://ftp.tsukuba.wide.ad.jp/software/apache/hadoop/common/hadoop-2.9.2/hadoop-2.9.2.tar.gz | tar zxf -
+ENV PATH=/hadoop-2.9.2/bin:/hadoop-2.9.2/sbin:$PATH
+COPY config/hadoop /hadoop-2.9.2/etc/hadoop/
+RUN hdfs namenode -format
Hive
FROM openjdk:8
# sshd
RUN apt-get update \
&& apt-get install -y --no-install-recommends ssh \
&& apt-get clean \
&& rm -rf /var/lib/apt/lists/*
RUN mkdir /run/sshd \
&& ssh-keygen -t rsa -P '' -f ~/.ssh/id_rsa \
&& cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys \
&& chmod 0600 ~/.ssh/authorized_keys
# Hadoop
RUN wget -q -O - http://ftp.tsukuba.wide.ad.jp/software/apache/hadoop/common/hadoop-2.9.2/hadoop-2.9.2.tar.gz | tar zxf -
ENV PATH=/hadoop-2.9.2/bin:/hadoop-2.9.2/sbin:$PATH
COPY config/hadoop /hadoop-2.9.2/etc/hadoop/
RUN hdfs namenode -format
+# Hive
+RUN wget -q -O - http://ftp.tsukuba.wide.ad.jp/software/apache/hive/hive-2.3.6/apache-hive-2.3.6-bin.tar.gz | tar zxf -
+ENV HIVE_HOME=/apache-hive-2.3.6-bin PATH=/apache-hive-2.3.6-bin/bin:$PATH
+COPY config/hive /apache-hive-2.3.6-bin/conf/
起動スクリプト
コンテナの起動スクリプトを追加し、下のようなことを起動時におこなうようにする。
- sshdの起動(Hadoopの起動に必要)
- HadoopのNameNodeとDataNodeデーモンの起動
- Hiveが使うHDFSの初期化
- Hive metastoreの初期化(今回は埋め込み型のmetastoreを使う)
- hiveserver2の起動(コンテナ外部から接続してHiveQLを利用できるようにするため)
#!/bin/bash -ex
/usr/sbin/sshd
start-dfs.sh
hdfs dfs -mkdir -p /tmp
hdfs dfs -mkdir -p /user/hive/warehouse
hdfs dfs -chmod g+w /tmp
hdfs dfs -chmod g+w /user/hive/warehouse
schematool -dbType derby -initSchema
hiveserver2
FROM openjdk:8
# sshd
RUN apt-get update \
&& apt-get install -y --no-install-recommends ssh \
&& apt-get clean \
&& rm -rf /var/lib/apt/lists/*
RUN mkdir /run/sshd \
&& ssh-keygen -t rsa -P '' -f ~/.ssh/id_rsa \
&& cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys \
&& chmod 0600 ~/.ssh/authorized_keys
# Hadoop
RUN wget -q -O - http://ftp.tsukuba.wide.ad.jp/software/apache/hadoop/common/hadoop-2.9.2/hadoop-2.9.2.tar.gz | tar zxf -
ENV PATH=/hadoop-2.9.2/bin:/hadoop-2.9.2/sbin:$PATH
COPY config/hadoop /hadoop-2.9.2/etc/hadoop/
RUN hdfs namenode -format
# Hive
RUN wget -q -O - http://ftp.tsukuba.wide.ad.jp/software/apache/hive/hive-2.3.6/apache-hive-2.3.6-bin.tar.gz | tar zxf -
ENV HIVE_HOME=/apache-hive-2.3.6-bin PATH=/apache-hive-2.3.6-bin/bin:$PATH
COPY config/hive /apache-hive-2.3.6-bin/conf/
+WORKDIR /root
+COPY start /root/
+CMD ["./start"]
動作確認
hiveserver2を起動する。
% docker build -t naoty/hello-hive .
% docker run --rm -it naoty/hello-hive
beelineを使ってhiveserver2に接続する。
% docker exec xxxxxxxx -it beeline -u jdbc:hive2://localhost:10000
0: jdbc:hive2://localhost:10000>