Imansible eseguire H2O Flow utilizzando il parcheggio automatico da un contenitore docker

Context:

Ho un ambiente locale H2O Sparkling Water installato utilizzando un contenitore docker.

Ho creato un Dockerfile basato sull'image ufficiale di jupyter/all-spark-notebook per installare un ambiente locale con Hadoop e Spark e in cima a quello incluso il seguente codice:

 # Install H2O pysparkling requirements RUN pip install requests && \ pip install tabulate && \ pip install six && \ pip install future && \ pip install colorama # Expose H2O Flow UI ports EXPOSE 54321 EXPOSE 54322 EXPOSE 55555 # Install H2O sparkling water RUN \ cd /home/$NB_USER && \ wget http://h2o-release.s3.amazonaws.com/sparkling-water/rel-2.1/7/sparkling-water-2.1.7.zip && \ unzip sparkling-water-2.1.7.zip && \ cd sparkling-water-2.1.7 

Per eseguire H2O Flow da pysparkling, io faccio quanto segue:

 $ docker exec -it tlh2opyspark_notebook_1 /bin/bash # in the host # /home/jovyan/sparkling-water-2.1.7/bin/pysparkling # in the container >>> from pysparkling import * # pysparkling shell in the container >>> hc = H2OContext.getOrCreate(sc) # pysparkling shell in the container 

Posso quindi aprire H2O Flow nel browser all'indirizzo http://localhost:54321 . Funziona bene e in modo affidabile fino a quando avrò aperto la session di permanenza nel terminal all'interno del contenitore.

Problema

Ho provato diverse alternative per eseguire automaticamente H2O Flow (utilizzando pysparkling) dall'interno del contenitore, ma nessuno sembra funzionare correttamente.

Ho provato a eseguire la seguente CMD nel Dockerfile, ma H2O Flow si blocca sempre dopo alcuni secondi:

 bash -c "echo 'from pyspark import SparkContext; sc = SparkContext(); from pysparkling import *; import h2o; hc = H2OContext.getOrCreate(sc)' | /home/jovyan/sparkling-water-2.1.7/bin/pysparkling" 

Ho anche provato il seguente codice, ma si blocca anche dopo pochi secondi:

 bash -c "/usr/local/spark/bin/spark-submit --py-files ../sparkling-water-2.1.7/py/build/dist/h2o_pysparkling_2.1-2.1.7-py2.7.egg --conf spark.dynamicAllocation.enabled=false ../work/start_h2o.py" 

Dove start_h2o.py contiene:

 # start_h2o.py from pyspark import SparkContext, SparkConf sc =SparkContext() from pysparkling import * hc = H2OContext.getOrCreate(sc) 

Domanda

C'è un modo corretto e affidabile per impostare un Dockerfile in modo che H2O Flow (pysparkling) funzioni automaticamente come un servizio quando il contenitore è in alto, allo stesso modo in cui Jupyter Notebook viene eseguito automaticamente dai contenitori Jupyter?