真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

怎么在Docker中運(yùn)行Jupyter/Spark/Mesos服務(wù)

本篇內(nèi)容介紹了“怎么在Docker中運(yùn)行Jupyter/Spark/Mesos服務(wù)”的有關(guān)知識(shí),在實(shí)際案例的操作過(guò)程中,不少人都會(huì)遇到這樣的困境,接下來(lái)就讓小編帶領(lǐng)大家學(xué)習(xí)一下如何處理這些情況吧!希望大家仔細(xì)閱讀,能夠?qū)W有所成!

成都創(chuàng)新互聯(lián)網(wǎng)站建設(shè)公司一直秉承“誠(chéng)信做人,踏實(shí)做事”的原則,不欺瞞客戶,是我們最起碼的底線! 以服務(wù)為基礎(chǔ),以質(zhì)量求生存,以技術(shù)求發(fā)展,成交一個(gè)客戶多一個(gè)朋友!專注中小微企業(yè)官網(wǎng)定制,成都網(wǎng)站制作、成都網(wǎng)站建設(shè),塑造企業(yè)網(wǎng)絡(luò)形象打造互聯(lián)網(wǎng)企業(yè)效應(yīng)。

在Docker中運(yùn)行Jupyter/Spark/Mesos服務(wù)。

Spark on Docker,基于Jupyter Notebook Python, Scala, R, Spark, Mesos技術(shù)棧,提供一個(gè)遠(yuǎn)程操作的模型和任務(wù)編寫(xiě)Web界面,采用Python界著名的Ipython Notebook格式,非常簡(jiǎn)潔、友好。

集成的軟件

  • Jupyter Notebook 4.2.x

  • Conda Python 3.x 和 Python 2.7.x 環(huán)境

  • Conda R 3.2.x 環(huán)境

  • Scala 2.10.x

  • pyspark, pandas, matplotlib, scipy, seaborn, scikit-learn 預(yù)先安裝在Python環(huán)境

  • ggplot2, rcurl 原裝在 R 環(huán)境

  • Spark 1.6.0,運(yùn)行在local模式,或者連接到 Spark workers的集群

  • Mesos client 0.22 binary that can communicate with a Mesos master

  • 非私有用戶名 jovyan (uid=1000, 可配置, 參見(jiàn)相應(yīng)的選項(xiàng)) 在組 users (gid=100) ,擁有控制權(quán)在目錄 /home/jovyan/opt/conda

  • tini 作為容器入口點(diǎn), start-notebook.sh 作為啟動(dòng)命令

  • 腳本 start-singleuser.sh 作為可選命令,運(yùn)行Notebook server的single-user實(shí)例  , 是 JupyterHub 要求的

  • Options for HTTPS, password auth, and passwordless sudo

使用方法

使用下面的命令啟動(dòng)一個(gè)容器,Web服務(wù)在端口 8888,為配置授權(quán)(僅限私網(wǎng)內(nèi)使用,不要配置在互聯(lián)網(wǎng)和其他公共網(wǎng)上)。

docker run -d -p 8888:8888 jupyter/all-spark-notebook

一般情況下,需要訪問(wèn)宿主機(jī)中的數(shù)據(jù)資源,使用-v host-path:docker-path方式映射。

啟動(dòng)后在瀏覽器輸入: http://127.0.0.1:8888即可訪問(wèn)。

啟動(dòng)Spark:Local Mode

使用Spark在小型的本地?cái)?shù)據(jù)環(huán)境下的配置。

在Python Notebook:

  1. 運(yùn)行一個(gè)容器,像上面那樣。

  2. 打開(kāi)一個(gè)Python 2 或 3 notebook。

  3. 創(chuàng)建 SparkContext在 local 模式。

例如,在notebook的第一個(gè)cell中,如下:

import pyspark
sc = pyspark.SparkContext('local[*]')

# do something to prove it works
rdd = sc.parallelize(range(1000))
rdd.takeSample(False, 5)

在 R Notebook:

  1. 運(yùn)行一個(gè)容器,像上面那樣。

  2. 打開(kāi)一個(gè) R notebook。

  3. 初始化 sparkR,在local模式。

  4. 初始化 sparkRSQL。

例如,在 R notebook的第一個(gè)cell中,如下:

library(SparkR)

sc <- sparkR.init("local[*]")
sqlContext <- sparkRSQL.init(sc)

# do something to prove it works
data(iris)
df <- createDataFrame(sqlContext, iris)
head(filter(df, df$Petal_Width > 0.2))

在Apache Toree (Scala) Notebook:

  1. 運(yùn)行一個(gè)容器,像上面那樣。

  2. 打開(kāi)一個(gè) Apache Toree (Scala) notebook。

  3. 使用預(yù)先配置的SparkContext,引用變量 sc。

例如:

val rdd = sc.parallelize(0 to 999)
rdd.takeSample(false, 5)

連接到Mesos上的 Spark 集群

這里的配置允許你的計(jì)算集群和數(shù)據(jù)一起伸縮。

  1. 部署 Spark 到 Mesos。

  2. 配置每一個(gè)工作節(jié)點(diǎn)  the --no-switch_user flag 或者創(chuàng)建jovyan用戶在每一個(gè) slave節(jié)點(diǎn)上。

  3. 運(yùn)行Docker容器,帶參數(shù) --net=host 在所有的Spark Workers都能訪問(wèn)的網(wǎng)絡(luò)位置(查看 Spark networking requirement.)

    • 注意: When using --net=host, you must also use the flags --pid=host -e TINI_SUBREAPER=true. See 

  4. Follow the language specific instructions below.

In a Python Notebook

  1. 打開(kāi) Python 2 或 3 notebook.

  2. 創(chuàng)建 SparkConf 實(shí)例,指向 Mesos master node (or Zookeeper instance) 和 Spark 二進(jìn)制包的位置。

  3. 創(chuàng)建 SparkContext 采用上面的配置變量。

示例, Python 3 notebook的第一個(gè)Cell像下面這樣:

import os
# make sure pyspark tells workers to use python3 not 2 if both are installed
os.environ['PYSPARK_PYTHON'] = '/usr/bin/python3'

import pyspark
conf = pyspark.SparkConf()

# point to mesos master or zookeeper entry (e.g., zk://10.10.10.10:2181/mesos)
conf.setMaster("mesos://10.10.10.10:5050")
# point to spark binary package in HDFS or on local filesystem on all slave
# nodes (e.g., file:///opt/spark/spark-1.6.0-bin-hadoop2.6.tgz)
conf.set("spark.executor.uri", "hdfs://10.10.10.10/spark/spark-1.6.0-bin-hadoop2.6.tgz")
# set other options as desired
conf.set("spark.executor.memory", "8g")
conf.set("spark.core.connection.ack.wait.timeout", "1200")

# create the context
sc = pyspark.SparkContext(conf=conf)

# do something to prove it works
rdd = sc.parallelize(range(100000000))
rdd.sumApprox(3)

如果使用在notebook和workers中使用Python 2, 修改環(huán)境變量PYSPARK_PYTHON 指向Python 2.x 解釋器二進(jìn)制包的位置。如果不設(shè)置, 缺省值為 python。

當(dāng)然, 所有的可以被隱藏在 IPython kernel startup script, 但是 "explicit is better than implicit." :)

在 R Notebook

  1. 如上的方法運(yùn)行一個(gè)容器實(shí)例。

  2. 打開(kāi)一個(gè) R notebook。

  3. 初始化 sparkR ,指向Mesos master node (or Zookeeper instance) , Spark 二進(jìn)制包位置。

  4. 初始化 sparkRSQL.

示例, 在 R notebook的第一個(gè)Cell:

library(SparkR)

# point to mesos master or zookeeper entry (e.g., zk://10.10.10.10:2181/mesos)\
# as the first argument
# point to spark binary package in HDFS or on local filesystem on all slave
# nodes (e.g., file:///opt/spark/spark-1.6.0-bin-hadoop2.6.tgz) in sparkEnvir
# set other options in sparkEnvir
sc <- sparkR.init("mesos://10.10.10.10:5050", sparkEnvir=list(
    spark.executor.uri="hdfs://10.10.10.10/spark/spark-1.6.0-bin-hadoop2.6.tgz",
    spark.executor.memory="8g"
    )
)
sqlContext <- sparkRSQL.init(sc)

# do something to prove it works
data(iris)
df <- createDataFrame(sqlContext, iris)
head(filter(df, df$Petal_Width > 0.2))

在Apache Toree (Scala) Notebook

  1. 打開(kāi)一個(gè)終端,通過(guò) New -> Terminal 在notebook 界面上。

  2. 添加關(guān)于集群的信息到 SPARK_OPTS 環(huán)境變量,當(dāng)運(yùn)行容器時(shí).

  3. 打開(kāi)一個(gè)Apache Toree (Scala) notebook。

  4. 使用預(yù)先配置的SparkContext,在變量名 sc中。

Apache Toree 內(nèi)核自動(dòng)創(chuàng)建了SparkContext,在啟動(dòng)時(shí)按照命令行參數(shù)和環(huán)境變量創(chuàng)建。 您可以傳遞關(guān)于你的 Mesos cluster的信息,當(dāng)啟動(dòng)容器時(shí)通過(guò) SPARK_OPTS 環(huán)境變量來(lái)實(shí)現(xiàn)。

例如, 傳遞的信息:Mesos master, Spark binary location in HDFS, and an executor options, 像下面這樣啟動(dòng)容器:

docker run -d -p 8888:8888 -e SPARK_OPTS '--master=mesos://10.10.10.10:5050 \ --spark.executor.uri=hdfs://10.10.10.10/spark/spark-1.6.0-bin-hadoop2.6.tgz \ --spark.executor.memory=8g' jupyter/all-spark-notebook

注意,這跟上面在Python notebook的信息時(shí)一樣的。 一旦內(nèi)核得到集群的信息, 你可以在Apache Toree notebook測(cè)試集群,像下面這樣:

// should print the value of --master in the kernel spec
println(sc.master)

// do something to prove it works
val rdd = sc.parallelize(0 to 99999999)
rdd.sum()

Standalone Mode連接到Spark Cluster

通過(guò)Standalone Mode連接到 Spark Cluster要求的設(shè)置如下:

  1. 確認(rèn)docker image (檢查 Dockerfile) 和Spark Cluster被部署、運(yùn)行的是Spark的同一個(gè)版本。

  2. Deploy Spark on Standalone Mode.

  3. 運(yùn)行Docker container 帶參數(shù) --net=host 在Spark workers都能訪問(wèn)到的網(wǎng)絡(luò)位置. (查看 Spark networking requirement.)

    • 注意: 當(dāng)使用 --net=host, 必須同時(shí)使用 --pid=host -e TINI_SUBREAPER=true. 查看詳情: https://github.com/jupyter/docker-stacks/issues/64 。

  4. 特殊語(yǔ)言的指令與上面Mesos里提到的完全一樣, 只是這里的master url 變成類似于這樣: spark://10.10.10.10:7077

Notebook 選項(xiàng)

你可以傳入 Jupyter command line options ,通過(guò) start-notebook.sh command,在容器啟動(dòng)時(shí)設(shè)置參數(shù)。例如,設(shè)置notebook server 基礎(chǔ)URL,想下面這樣:

docker run -d -p 8888:8888 jupyter/all-spark-notebook start-notebook.sh --NotebookApp.base_url=/some/path

你可以繞開(kāi) start-notebook.sh腳本,直接在命令中指定。如果這樣, 下面提到的NB_UIDGRANT_SUDO 特征將不能工作。具體細(xì)節(jié)查看Docker Options一節(jié)。

Docker Options

你可以定制Docker容器和Notebook Server的執(zhí)行,通過(guò)制定下面的參數(shù):

  • -e PASSWORD="YOURPASS" - 配置 Jupyter Notebook 要求 password,在非信任的網(wǎng)絡(luò)上可以組合 USE_HTTPS 使用加密的連接。

  • -e USE_HTTPS=yes - 配置 Jupyter Notebook接受加密連接。如果 pem 文件(包含 SSL certificate 和 key)未被提供(參見(jiàn)下面), 容器將創(chuàng)建一個(gè)self-signed certificate。

  • -e NB_UID=1000 - 指定jovyan user的uid。 對(duì)于裝載宿主機(jī)卷標(biāo)并制定文件屬有權(quán)是有用。為了該選項(xiàng)發(fā)揮作用, 必須運(yùn)行容器時(shí)帶上 --user root. ( 腳本start-notebook.sh 將在調(diào)整user id后運(yùn)行 su jovyan。)

  • -e GRANT_SUDO=yes - 給予jovyan 用戶帳號(hào)無(wú)密碼執(zhí)行 sudo 的權(quán)限。在安裝操作系統(tǒng)軟件包是有用。為了該選項(xiàng)發(fā)揮作用, 運(yùn)行容器時(shí)必須使用--user root。(腳本start-notebook.sh 將在添加jovyan 到 sudoers 后運(yùn)行su jovyan 。) 你應(yīng)該只在信任該用戶或者容器運(yùn)行在隔離的宿主環(huán)境下時(shí)才打開(kāi)這個(gè)sudo選項(xiàng)。

  • -v /some/host/folder/for/work:/home/jovyan/work - 宿主機(jī)加載缺省工作目錄到宿主機(jī),從而當(dāng)容器終止或重建時(shí)能夠保存工作的結(jié)果在宿主機(jī)中。

  • -v /some/host/folder/for/server.pem:/home/jovyan/.local/share/jupyter/notebook.pem - 加載SSL certificate plus key為 USE_HTTPS所用。當(dāng)有一個(gè)域的證書(shū)并且Notebook Server運(yùn)行在下面時(shí)有用。

  • -p 4040:4040 - 打開(kāi)端口用于Spark的運(yùn)行狀態(tài)監(jiān)視,參見(jiàn) Spark Monitoring and Instrumentation UI. 注意,每一個(gè)新的spark context創(chuàng)建時(shí)賦予一個(gè)增量的端口號(hào) (ie. 4040, 4041, 4042, etc.), 并且可能需要打開(kāi)多個(gè)端口。docker run -d -p 8888:8888 -p 4040:4040 -p 4041:4041 jupyter/all-spark-notebook

SSL 證書(shū)

在這個(gè)Docker鏡像中notebook server的配置需要一個(gè) notebook.pem 文件,該文件包含base64編碼的SSL key和SSL 證書(shū)。 該文件還包含其他的證書(shū) (e.g., intermediate 和 root certificates)。

如果你的 key 和 certificate(s) 作為獨(dú)立的文件, 你需要將它們合并成一個(gè) PEM 文件。 作為可選的方式, 你可以創(chuàng)建自己的配置和 Docker鏡像,可以使用分開(kāi)的 key 和 certificate 文件。

更多的使用SSL的信息, 參見(jiàn)下面:

  • 例子 docker-stacks/examples 可以得到信息,關(guān)于在公共域使用本文的技術(shù)棧時(shí)如何使用加密證書(shū) Let's Encrypt 。

  • 文件 jupyter_notebook_config.py 包含了本Docker鏡像如何創(chuàng)建self-signed certificate的信息。

  • 文檔 Jupyter Notebook documentation 包含了一些最佳實(shí)踐,包括如何運(yùn)行一個(gè)公共 notebook server,大部分內(nèi)容已經(jīng)包含在了本鏡像中。

Conda 環(huán)境設(shè)置

缺省的Python 3.x Conda 運(yùn)行環(huán)境 安裝在 /opt/conda目錄下。第二個(gè)Python 2.x Conda 環(huán)境安裝在 /opt/conda/envs/python2目錄下。你可以切換到 python2 環(huán)境 ,在shell里面鍵入命令(這是通用的conda環(huán)境切換方法,使用conda create可以創(chuàng)建更多的環(huán)境):

source activate python2

你可以回到缺省的環(huán)境,在shell里鍵入下面的命令:

source deactivate

命令 jupyter, ipython, python, pip, easy_install, 和 conda (以及其它) 在兩個(gè)環(huán)境下都是可用的。通常,你可以安裝軟件到兩個(gè)環(huán)境中,無(wú)論哪一個(gè)環(huán)境是激活的,像下面這樣(注意:conda install使用了-n參數(shù)指定環(huán)境的名稱):

# install a package into the python2 environment
pip2 install some-package
conda install -n python2 some-package

# install a package into the default (python 3.x) environment
pip3 install some-package
conda install -n python3 some-package

JupyterHub

JupyterHub 要求每一個(gè)用戶有一個(gè)Jupyter Notebook server的single-user實(shí)例。為了使用 JupyterHub 和 DockerSpawner,在本技術(shù)棧中,你需要指定容器鏡像名稱和覆蓋缺省的容器run命令,在 jupyterhub_config.py 文件中指定:

# Spawn user containers from this image
c.DockerSpawner.container_image = 'jupyter/all-spark-notebook'

# Have the Spawner override the Docker run command
c.DockerSpawner.extra_create_kwargs.update({
    'command': '/usr/local/bin/start-singleuser.sh'
})

“怎么在Docker中運(yùn)行Jupyter/Spark/Mesos服務(wù)”的內(nèi)容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關(guān)的知識(shí)可以關(guān)注創(chuàng)新互聯(lián)網(wǎng)站,小編將為大家輸出更多高質(zhì)量的實(shí)用文章!


網(wǎng)頁(yè)題目:怎么在Docker中運(yùn)行Jupyter/Spark/Mesos服務(wù)
文章網(wǎng)址:http://weahome.cn/article/jdescj.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部