1. 环境准备

主机:虚拟机Ubuntu 16.04 内存2G 硬盘20GB
Docker镜像:zookeeper版本3.4.6 Storm版本1.0.2

2. 安装

2.1 docker file

zookeeper的dockerfile

FROM java:openjdk-8-jre-alpine
ARG MIRROR=http://mirrors.aliyun.com/
ARG VERSION=3.4.6
LABEL name="zookeeper" version=$VERSION
RUN apk update && apk add ca-certificates && \
    apk add tzdata && \
    ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && \
    echo "Asia/Shanghai" > /etc/timezone

RUN apk add --no-cache wget bash \
    && mkdir /opt \
    && wget -q -O - $MIRROR/apache/zookeeper/zookeeper-$VERSION/zookeeper-$VERSION.tar.gz | tar -xzf - -C /opt \
    && mv /opt/zookeeper-$VERSION /opt/zookeeper \
    && cp /opt/zookeeper/conf/zoo_sample.cfg /opt/zookeeper/conf/zoo.cfg \
    && mkdir -p /tmp/zookeeper

EXPOSE 2181
WORKDIR /opt/zookeeper
VOLUME ["/opt/zookeeper/conf", "/tmp/zookeeper"]
ENTRYPOINT ["/opt/zookeeper/bin/zkServer.sh"]
CMD ["start-foreground"]`</pre>

Storm的dockerfile

FROM openjdk:8-jre-alpine
# Install required packages
RUN apk add --no-cache \
    bash \
    python \
    su-exec
ENV STORM_USER=storm \
    STORM_CONF_DIR=/conf \
    STORM_DATA_DIR=/data \
    STORM_LOG_DIR=/logs
# Add a user and make dirs
RUN set -x \
    && adduser -D "$STORM_USER" \
    && mkdir -p "$STORM_CONF_DIR" "$STORM_DATA_DIR" "$STORM_LOG_DIR" \
    && chown -R "$STORM_USER:$STORM_USER" "$STORM_CONF_DIR" "$STORM_DATA_DIR" "$STORM_LOG_DIR"
ARG GPG_KEY=ACEFE18DD2322E1E84587A148DE03962E80B8FFD
ARG DISTRO_NAME=apache-storm-1.0.2
# Download Apache Storm, verify its PGP signature, untar and clean up
RUN set -x \
    && apk add --no-cache --virtual .build-deps \
        gnupg \
    && wget -q "http://www.apache.org/dist/storm/$DISTRO_NAME/$DISTRO_NAME.tar.gz" \
    && wget -q "http://www.apache.org/dist/storm/$DISTRO_NAME/$DISTRO_NAME.tar.gz.asc" \
    && export GNUPGHOME="$(mktemp -d)" \
    && gpg --keyserver ha.pool.sks-keyservers.net --recv-key "$GPG_KEY" \
    && gpg --batch --verify "$DISTRO_NAME.tar.gz.asc" "$DISTRO_NAME.tar.gz" \
    && tar -xzf "$DISTRO_NAME.tar.gz" \
    && chown -R "$STORM_USER:$STORM_USER" "$DISTRO_NAME" \
    && rm -r "$GNUPGHOME" "$DISTRO_NAME.tar.gz" "$DISTRO_NAME.tar.gz.asc" \
    && apk del .build-deps
WORKDIR $DISTRO_NAME
ENV PATH $PATH:/$DISTRO_NAME/bin
COPY docker-entrypoint.sh /
ENTRYPOINT ["/docker-entrypoint.sh"]`</pre>

2.2 启动

step1 启动zookeeper

docker run -d --restart always --name zookeeper zookeeper:3.4.6`</pre>

step2 启动Nimbus

docker run -d --restart always --name nimbus --link zookeeper storm:1.0.2 storm nimbus

step3 启动Storm UI

docker run -d -p 8080:8080 --restart always --name ui --link nimbus storm:1.0.2 storm ui

此时进入127.0.0.1:8080,我们看到nimbus已启动。


step4 启动Supervisor

docker run -d --restart always --name supervisor1 --link zookeeper --link nimbus storm:1.0.2 storm supervisor

我们看到Supervisor1已正常启动,如果需要我们可以启动多个Supervisor,至此简单Storm集群环境安装完毕。

3. 提交Topology

进入nimbus的docker,使用storm的example WordCountTopology提交Topology

docker exec -it nimbus bash
cd examples/storm-starter
storm jar storm-starter-topologies-1.0.2.jar org.apache.storm.starter.WordCountTopology first-topology

运行情况

详细信息