Ищите docker изображение для контейнерных потоков моих искр scala потоковых заданий - PullRequest
0 голосов
/ 07 января 2020

Я новичок в Spark (3.0.0_preview) и Scala (SBT). Я написал задание потоковой передачи, которое я могу успешно запустить на своем локальном компьютере из своей среды IDE

. Теперь я ищу способ докернизировать код, чтобы я мог запустить его с моим docker -составить создает искровой кластер

Мой docker -композит:

version: "3.3"
services:
  spark-master:
    image: rd/spark:latest
    container_name: spark-master
    hostname: spark-master
    ports:
    - "8080:8080"
    - "7077:7077"
    networks:
    - spark-network
    environment:
    - "SPARK_LOCAL_IP=spark-master"
    - "SPARK_MASTER_PORT=7077"
    - "SPARK_MASTER_WEBUI_PORT=8080"
    command: "/start-master.sh"
  spark-worker:
    image: rd/spark:latest
    depends_on:
    - spark-master
    ports:
    - 8080
    networks:
    - spark-network
    environment:
    - "SPARK_MASTER=spark://spark-master:7077"
    - "SPARK_WORKER_WEBUI_PORT=8080"
    command: "/start-worker.sh"
networks:
  spark-network:
    driver: bridge
    ipam:
      driver: default

Docker Файлы:

FROM openjdk:8-alpine

RUN apk --update add wget tar bash

RUN wget http://apache.mirror.anlx.net/spark/spark-3.0.0-preview2/spark-3.0.0-preview2-bin-hadoop2.7.tgz


RUN tar -xzf spark-3.0.0-preview2-bin-hadoop2.7.tgz && \
    mv spark-3.0.0-preview2-bin-hadoop2.7 /spark && \
    rm spark-3.0.0-preview2-bin-hadoop2.7.tgz

COPY start-master.sh /start-master.sh
COPY start-worker.sh /start-worker.sh

Это простой запрос, но у меня трудно найти хорошую документацию по нему.

1 Ответ

0 голосов
/ 16 января 2020

Работает со следующим:

структура проекта:

project
src
build.sbt
Dockerfile
Dockerfile-app
docker-compose.yml

docker -compose.yml

version: "3.3"
services:
  spark-scala-env:
    image: app/spark-scala-env:latest
    build:
      context: .
      dockerfile: Dockerfile
  app-spark-scala:
    image: app/app-spark-scala:latest
    build:
      context: .
      dockerfile: Dockerfile-app
  spark-master:
    image: app/app-spark-scala:latest
    container_name: spark-master
    hostname: localhost
    ports:
    - "8080:8080"
    - "7077:7077"
    networks:
    - spark-network
    environment:
    - "SPARK_LOCAL_IP=spark-master"
    - "SPARK_MASTER_PORT=7077"
    - "SPARK_MASTER_WEBUI_PORT=8080"
    command: ["sh", "-c", "/spark/bin/spark-class org.apache.spark.deploy.master.Master --ip $${SPARK_LOCAL_IP} --port $${SPARK_MASTER_PORT} --webui-port $${SPARK_MASTER_WEBUI_PORT}"]
  spark-worker:
    image: app/app-spark-scala:latest
    hostname: localhost
    depends_on:
    - spark-master
    ports:
    - 8080
    networks:
    - spark-network
    #network_mode: host
    environment:
    - "SPARK_MASTER=spark://spark-master:7077"
    - "SPARK_WORKER_WEBUI_PORT=8080"
    - "SPARK_WORKER_CORES=2"
    command: ["sh", "-c", "/spark/bin/spark-class org.apache.spark.deploy.worker.Worker --webui-port $${SPARK_WORKER_WEBUI_PORT} $${SPARK_MASTER}"]
  app-submit-job:
    image: app/app-spark-scala:latest
    ports:
    - "4040:4040"
    environment:
    - "SPARK_APPLICATION_MAIN_CLASS=com.app.spark.TestAssembly"
    - "SPARK_MASTER=spark://spark-master:7077"
    - "APP_PACKAGES=org.apache.spark:spark-sql-kafka-0-10_2.12:3.0.0-preview2"
    - "APP_JAR_LOC=/app/target/scala-2.12/app_spark_scala-assembly-0.2.jar"
    hostname: localhost
    networks:
    - spark-network
    volumes:
    - ./appdata:/appdata
    command: ["sh", "-c", "/spark/bin/spark-submit --packages $${APP_PACKAGES} --class $${SPARK_APPLICATION_MAIN_CLASS} --master $${SPARK_MASTER} $${APP_JAR_LOC}"]
networks:
  spark-network:
    driver: bridge
    ipam:
      driver: default

Dockerfile

FROM openjdk:8-alpine

ARG SPARK_VERSION
ARG HADOOP_VERSION
ARG SCALA_VERSION
ARG SBT_VERSION

ENV SPARK_VERSION=${SPARK_VERSION:-3.0.0-preview2}
ENV HADOOP_VERSION=${HADOOP_VERSION:-2.7}
ENV SCALA_VERSION ${SCALA_VERSION:-2.12.8}
ENV SBT_VERSION ${SBT_VERSION:-1.3.4}


RUN apk --update add wget tar bash

RUN \
  echo "$SPARK_VERSION $HADOOP_VERSION" && \
  echo http://apache.mirror.anlx.net/spark/spark-${SPARK_VERSION}/spark-${SPARK_VERSION}-bin-hadoop${HADOOP_VERSION}.tgz && \
  wget http://apache.mirror.anlx.net/spark/spark-${SPARK_VERSION}/spark-${SPARK_VERSION}-bin-hadoop${HADOOP_VERSION}.tgz


RUN tar -xzf spark-${SPARK_VERSION}-bin-hadoop${HADOOP_VERSION}.tgz && \
    mv spark-${SPARK_VERSION}-bin-hadoop${HADOOP_VERSION} /spark && \
    rm spark-${SPARK_VERSION}-bin-hadoop${HADOOP_VERSION}.tgz

RUN \
  echo "$SCALA_VERSION $SBT_VERSION" && \
  mkdir -p /usr/lib/jvm/java-1.8-openjdk/jre && \
  touch /usr/lib/jvm/java-1.8-openjdk/jre/release && \
  apk add -U --no-cache bash curl && \
  curl -fsL http://downloads.typesafe.com/scala/$SCALA_VERSION/scala-$SCALA_VERSION.tgz | tar xfz - -C /usr/local && \
  ln -s /usr/local/scala-$SCALA_VERSION/bin/* /usr/local/bin/ && \
  scala -version && \
  scalac -version

RUN \
  curl -fsL https://github.com/sbt/sbt/releases/download/v$SBT_VERSION/sbt-$SBT_VERSION.tgz | tar xfz - -C /usr/local && \
  $(mv /usr/local/sbt-launcher-packaging-$SBT_VERSION /usr/local/sbt || true) \
  ln -s /usr/local/sbt/bin/* /usr/local/bin/ && \
  sbt sbt-version || sbt sbtVersion || true

Dockerfile-app

FROM app/spark-scala-env:latest

WORKDIR /app

# Pre-install base libraries
ADD build.sbt /app/
ADD project/plugins.sbt /app/project/
ADD src/. /app/src/
RUN sbt update


RUN sbt clean assembly

Команды:

  1. Создание изображения docker с искрой и scala окр. то есть docker -композитная сборка искра- scala -env
  2. Создайте изображение с помощью приложения jar. т. е. docker -компонентная сборка app-spark- scala
  3. Принесите контейнер искрового окружения, т. е. docker -составить up -d --scale spark-worker = 2 искровщик
  4. Отправить работу через docker -создать -d app-submit-job
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...