Spark Streaming с Neo4j зависает при работе с Docker - PullRequest
0 голосов
/ 27 июня 2018

Я создал образ докера моего приложения, когда я просто запускаю его из скрипта bash, он работает правильно. Однако, когда я запускаю его как часть файла docker-compose, приложение зависает в сообщении:

18/06/27 13:17:18 INFO StateStoreCoordinatorRef: Registered StateStoreCoordinator endpoint

И даже после того, как я немного подожду, истечет время сердцебиения В чем может быть причина такой производительности приложения Spark Streaming + Neo4j с Docker и как ее можно улучшить?

Файл docker-compose для моего приложения:

version: '3.3'
services:
  consumer-demo:
    build:
      context: .
      dockerfile: Dockerfile
      args:
        - ARG_CLASS=consumer
        - HOST=neo4jdb
    volumes:
      - ./:/workdir
    working_dir: /workdir
    restart: always

Общий файл docker-compose для всех приложений:

version: '3.3'
services:
  kafka:
    image: spotify/kafka
    ports:
     - "9092:9092"
    networks:
      - docker_elk
    environment:
    - ADVERTISED_HOST=localhost
  neo4jdb:
    image: neo4j:latest
    container_name: neo4jdb
    ports:
      - "7474:7474"
      - "7473:7473"
      - "7687:7687"
    networks:
      - docker_elk
    volumes:
      - /var/lib/neo4j/import:/var/lib/neo4j/import
      - /var/lib/neo4j/data:/data
      - /var/lib/neo4j/conf:/conf
    environment:
      - NEO4J_dbms_active__database=graphImport.db
  elasticsearch:
    image: elasticsearch:latest
    ports:
      - "9200:9200"
      - "9300:9300"
    networks:
      - docker_elk
    volumes:
        - esdata1:/usr/share/elasticsearch/data
  kibana:
    image: kibana:latest
    ports:
      - "5601:5601"
    networks:
      - docker_elk
volumes:
  esdata1:
    driver: local

networks:
  docker_elk:
    driver: bridge

Скрипт bash, с помощью которого приложение работает правильно:

#!/usr/bin/env bash
if [ "$1" = "consumer" ]
then
    java -cp "jars/spark_consumer.jar" consumer.SparkConsumer 
else
    echo "Wrong parameter. It should be consumer or producer, but it is $1"
fi

Application Dockerfile, который может быть причиной замедления выполнения приложения:

FROM java:8
ARG ARG_CLASS
ARG HOST
ENV MAIN_CLASS $ARG_CLASS
ENV SCALA_VERSION 2.11.8
ENV SBT_VERSION 1.1.1
ENV SPARK_VERSION 2.2.0
ENV SPARK_DIST spark-$SPARK_VERSION-bin-hadoop2.6
ENV SPARK_ARCH $SPARK_DIST.tgz
ENV HOSTNAME bolt://$HOST:7687
VOLUME /workdir

WORKDIR /opt

# Install Scala
RUN \
  cd /root && \
  curl -o scala-$SCALA_VERSION.tgz http://downloads.typesafe.com/scala/$SCALA_VERSION/scala-$SCALA_VERSION.tgz && \
  tar -xf scala-$SCALA_VERSION.tgz && \
  rm scala-$SCALA_VERSION.tgz && \
  echo >> /root/.bashrc && \
  echo 'export PATH=~/scala-$SCALA_VERSION/bin:$PATH' >> /root/.bashrc

# Install SBT
RUN \
  curl -L -o sbt-$SBT_VERSION.deb https://dl.bintray.com/sbt/debian/sbt-$SBT_VERSION.deb && \
  dpkg -i sbt-$SBT_VERSION.deb && \
  rm sbt-$SBT_VERSION.deb


# Install Spark
RUN \
    cd /opt && \
    curl -o $SPARK_ARCH http://d3kbcqa49mib13.cloudfront.net/$SPARK_ARCH && \
    tar xvfz $SPARK_ARCH && \
    rm $SPARK_ARCH && \
    echo 'export PATH=$SPARK_DIST/bin:$PATH' >> /root/.bashrc

EXPOSE 9851 9852 4040 9092 9200 9300 5601 7474 7687 7473

CMD /workdir/runDemo.sh "$MAIN_CLASS" 

1 Ответ

0 голосов
/ 13 июля 2018

Проблема заключалась в том, что на машине выполнялся другой процесс Spark, блокирующий потоковую передачу данных Spark. Я проверил все процессы с помощью ps aux | grep spark и нашел другой запущенный процесс. Простое завершение этого процесса и перезапуск приложения Spark Streaming решили проблему.

...