我的编程空间,编程开发者的网络收藏夹
学习永远不晚

怎么在Docker中运行Jupyter/Spark/Mesos服务

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

怎么在Docker中运行Jupyter/Spark/Mesos服务

本篇内容介绍了“怎么在Docker中运行Jupyter/Spark/Mesos服务”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!

在Docker中运行Jupyter/Spark/Mesos服务。

Spark on Docker,基于Jupyter Notebook Python, Scala, R, Spark, Mesos技术栈,提供一个远程操作的模型和任务编写Web界面,采用Python界著名的Ipython Notebook格式,非常简洁、友好。

集成的软件

  • Jupyter Notebook 4.2.x

  • Conda Python 3.x 和 Python 2.7.x 环境

  • Conda R 3.2.x 环境

  • Scala 2.10.x

  • pyspark, pandas, matplotlib, scipy, seaborn, scikit-learn 预先安装在Python环境

  • ggplot2, rcurl 原装在 R 环境

  • Spark 1.6.0,运行在local模式,或者连接到 Spark workers的集群

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

  • 非私有用户名 jovyan (uid=1000, 可配置, 参见相应的选项) 在组 users (gid=100) ,拥有控制权在目录 /home/jovyan/opt/conda

  • tini 作为容器入口点, start-notebook.sh 作为启动命令

  • 脚本 start-singleuser.sh 作为可选命令,运行Notebook server的single-user实例  , 是 JupyterHub 要求的

  • Options for HTTPS, password auth, and passwordless sudo

使用方法

使用下面的命令启动一个容器,Web服务在端口 8888,为配置授权(仅限私网内使用,不要配置在互联网和其他公共网上)。

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

一般情况下,需要访问宿主机中的数据资源,使用-v host-path:docker-path方式映射。

启动后在浏览器输入: http://127.0.0.1:8888即可访问。

启动Spark:Local Mode

使用Spark在小型的本地数据环境下的配置。

在Python Notebook:

  1. 运行一个容器,像上面那样。

  2. 打开一个Python 2 或 3 notebook。

  3. 创建 SparkContext在 local 模式。

例如,在notebook的第一个cell中,如下:

import pysparksc = pyspark.SparkContext('local[*]')# do something to prove it worksrdd = sc.parallelize(range(1000))rdd.takeSample(False, 5)

在 R Notebook:

  1. 运行一个容器,像上面那样。

  2. 打开一个 R notebook。

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

  4. 初始化 sparkRSQL

例如,在 R notebook的第一个cell中,如下:

library(SparkR)sc <- sparkR.init("local[*]")sqlContext <- sparkRSQL.init(sc)# do something to prove it worksdata(iris)df <- createDataFrame(sqlContext, iris)head(filter(df, df$Petal_Width > 0.2))

在Apache Toree (Scala) Notebook:

  1. 运行一个容器,像上面那样。

  2. 打开一个 Apache Toree (Scala) notebook。

  3. 使用预先配置的SparkContext,引用变量 sc

例如:

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

连接到Mesos上的 Spark 集群

这里的配置允许你的计算集群和数据一起伸缩。

  1. 部署 Spark 到 Mesos。

  2. 配置每一个工作节点  the --no-switch_user flag 或者创建jovyan用户在每一个 slave节点上。

  3. 运行Docker容器,带参数 --net=host 在所有的Spark Workers都能访问的网络位置(查看 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. 打开 Python 2 或 3 notebook.

  2. 创建 SparkConf 实例,指向 Mesos master node (or Zookeeper instance) 和 Spark 二进制包的位置。

  3. 创建 SparkContext 采用上面的配置变量。

示例, Python 3 notebook的第一个Cell像下面这样:

import os# make sure pyspark tells workers to use python3 not 2 if both are installedos.environ['PYSPARK_PYTHON'] = '/usr/bin/python3'import pysparkconf = 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 desiredconf.set("spark.executor.memory", "8g")conf.set("spark.core.connection.ack.wait.timeout", "1200")# create the contextsc = pyspark.SparkContext(conf=conf)# do something to prove it worksrdd = sc.parallelize(range(100000000))rdd.sumApprox(3)

如果使用在notebook和workers中使用Python 2, 修改环境变量PYSPARK_PYTHON 指向Python 2.x 解释器二进制包的位置。如果不设置, 缺省值为 python

当然, 所有的可以被隐藏在 IPython kernel startup script, 但是 "explicit is better than implicit." :)

在 R Notebook

  1. 如上的方法运行一个容器实例。

  2. 打开一个 R notebook。

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

  4. 初始化 sparkRSQL.

示例, 在 R notebook的第一个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 sparkEnvirsc <- 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 worksdata(iris)df <- createDataFrame(sqlContext, iris)head(filter(df, df$Petal_Width > 0.2))

在Apache Toree (Scala) Notebook

  1. 打开一个终端,通过 New -> Terminal 在notebook 界面上。

  2. 添加关于集群的信息到 SPARK_OPTS 环境变量,当运行容器时.

  3. 打开一个Apache Toree (Scala) notebook。

  4. 使用预先配置的SparkContext,在变量名 sc中。

Apache Toree 内核自动创建了SparkContext,在启动时按照命令行参数和环境变量创建。 您可以传递关于你的 Mesos cluster的信息,当启动容器时通过 SPARK_OPTS 环境变量来实现。

例如, 传递的信息:Mesos master, Spark binary location in HDFS, and an executor options, 像下面这样启动容器:

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的信息时一样的。 一旦内核得到集群的信息, 你可以在Apache Toree notebook测试集群,像下面这样:

// should print the value of --master in the kernel specprintln(sc.master)// do something to prove it worksval rdd = sc.parallelize(0 to 99999999)rdd.sum()

Standalone Mode连接到Spark Cluster

通过Standalone Mode连接到 Spark Cluster要求的设置如下:

  1. 确认docker image (检查 Dockerfile) 和Spark Cluster被部署、运行的是Spark的同一个版本。

  2. Deploy Spark on Standalone Mode.

  3. 运行Docker container 带参数 --net=host 在Spark workers都能访问到的网络位置. (查看 Spark networking requirement.)

    • 注意: 当使用 --net=host, 必须同时使用 --pid=host -e TINI_SUBREAPER=true. 查看详情: https://github.com/jupyter/docker-stacks/issues/64 。

  4. 特殊语言的指令与上面Mesos里提到的完全一样, 只是这里的master url 变成类似于这样: spark://10.10.10.10:7077

Notebook 选项

你可以传入 Jupyter command line options ,通过 start-notebook.sh command,在容器启动时设置参数。例如,设置notebook server 基础URL,想下面这样:

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

你可以绕开 start-notebook.sh脚本,直接在命令中指定。如果这样, 下面提到的NB_UIDGRANT_SUDO 特征将不能工作。具体细节查看Docker Options一节。

Docker Options

你可以定制Docker容器和Notebook Server的执行,通过制定下面的参数:

  • -e PASSWORD="YOURPASS" - 配置 Jupyter Notebook 要求 password,在非信任的网络上可以组合 USE_HTTPS 使用加密的连接。

  • -e USE_HTTPS=yes - 配置 Jupyter Notebook接受加密连接。如果 pem 文件(包含 SSL certificate 和 key)未被提供(参见下面), 容器将创建一个self-signed certificate。

  • -e NB_UID=1000 - 指定jovyan user的uid。 对于装载宿主机卷标并制定文件属有权是有用。为了该选项发挥作用, 必须运行容器时带上 --user root. ( 脚本start-notebook.sh 将在调整user id后运行 su jovyan。)

  • -e GRANT_SUDO=yes - 给予jovyan 用户帐号无密码执行 sudo 的权限。在安装操作系统软件包是有用。为了该选项发挥作用, 运行容器时必须使用--user root。(脚本start-notebook.sh 将在添加jovyan 到 sudoers 后运行su jovyan 。) 你应该只在信任该用户或者容器运行在隔离的宿主环境下时才打开这个sudo选项。

  • -v /some/host/folder/for/work:/home/jovyan/work - 宿主机加载缺省工作目录到宿主机,从而当容器终止或重建时能够保存工作的结果在宿主机中。

  • -v /some/host/folder/for/server.pem:/home/jovyan/.local/share/jupyter/notebook.pem - 加载SSL certificate plus key为 USE_HTTPS所用。当有一个域的证书并且Notebook Server运行在下面时有用。

  • -p 4040:4040 - 打开端口用于Spark的运行状态监视,参见 Spark Monitoring and Instrumentation UI. 注意,每一个新的spark context创建时赋予一个增量的端口号 (ie. 4040, 4041, 4042, etc.), 并且可能需要打开多个端口。docker run -d -p 8888:8888 -p 4040:4040 -p 4041:4041 jupyter/all-spark-notebook

SSL 证书

在这个Docker镜像中notebook server的配置需要一个 notebook.pem 文件,该文件包含base64编码的SSL key和SSL 证书。 该文件还包含其他的证书 (e.g., intermediate 和 root certificates)。

如果你的 key 和 certificate(s) 作为独立的文件, 你需要将它们合并成一个 PEM 文件。 作为可选的方式, 你可以创建自己的配置和 Docker镜像,可以使用分开的 key 和 certificate 文件。

更多的使用SSL的信息, 参见下面:

  • 例子 docker-stacks/examples 可以得到信息,关于在公共域使用本文的技术栈时如何使用加密证书 Let's Encrypt 。

  • 文件 jupyter_notebook_config.py 包含了本Docker镜像如何创建self-signed certificate的信息。

  • 文档 Jupyter Notebook documentation 包含了一些最佳实践,包括如何运行一个公共 notebook server,大部分内容已经包含在了本镜像中。

Conda 环境设置

缺省的Python 3.x Conda 运行环境 安装在 /opt/conda目录下。第二个Python 2.x Conda 环境安装在 /opt/conda/envs/python2目录下。你可以切换到 python2 环境 ,在shell里面键入命令(这是通用的conda环境切换方法,使用conda create可以创建更多的环境):

source activate python2

你可以回到缺省的环境,在shell里键入下面的命令:

source deactivate

命令 jupyter, ipython, python, pip, easy_install, 和 conda (以及其它) 在两个环境下都是可用的。通常,你可以安装软件到两个环境中,无论哪一个环境是激活的,像下面这样(注意:conda install使用了-n参数指定环境的名称):

# install a package into the python2 environmentpip2 install some-packageconda install -n python2 some-package# install a package into the default (python 3.x) environmentpip3 install some-packageconda install -n python3 some-package

JupyterHub

JupyterHub 要求每一个用户有一个Jupyter Notebook server的single-user实例。为了使用 JupyterHub 和 DockerSpawner,在本技术栈中,你需要指定容器镜像名称和覆盖缺省的容器run命令,在 jupyterhub_config.py 文件中指定:

# Spawn user containers from this imagec.DockerSpawner.container_image = 'jupyter/all-spark-notebook'# Have the Spawner override the Docker run commandc.DockerSpawner.extra_create_kwargs.update({    'command': '/usr/local/bin/start-singleuser.sh'})

“怎么在Docker中运行Jupyter/Spark/Mesos服务”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注编程网网站,小编将为大家输出更多高质量的实用文章!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

怎么在Docker中运行Jupyter/Spark/Mesos服务

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

怎么在Docker中运行Jupyter/Spark/Mesos服务

本篇内容介绍了“怎么在Docker中运行Jupyter/Spark/Mesos服务”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!在Docke
2023-06-19

怎么在docker里运行nginx服务器

这篇文章主要介绍“怎么在docker里运行nginx服务器”,在日常操作中,相信很多人在怎么在docker里运行nginx服务器问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”怎么在docker里运行nginx
2023-06-04

怎么在docker中运行docker swarm模式

这篇文章将为大家详细讲解有关怎么在docker中运行docker swarm模式,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。安装docker使用yum安装1.更新yum源,sudo yum
2023-06-07

怎么在Fedora 32中运行Docker

本篇文章给大家分享的是有关怎么在Fedora 32中运行Docker,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。步骤 1:系统准备在 Fedora 的最后两个版本中,操作系统
2023-06-07

怎么在docker中运行指定的内存

怎么在docker中运行指定的内存?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。如下:-m,--memory 内存限制,格式是数字加单位,单位可以为 b,k,m
2023-06-14

将本地Python项目打包成docker镜像,上传到服务器,在docker中运行

文章目录 Docker环境创建虚拟环境pycharm使用虚拟环境准备打包保存为镜像文件拆分文件、合并文件加载镜像文件启动容器进入容器退出容器复制物理路径到容器指定路径 参考文献 Docker环境 windows11Docke
2023-08-18

怎么查看Linux中所有正在运行的服务

小编给大家分享一下怎么查看Linux中所有正在运行的服务,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!有许多方法和工具可以查看 Linux 中所有正在运行的服务。
2023-06-16

android怎么判断服务是否在运行

在Android中,可以通过以下方法判断服务是否在运行:1. 使用ActivityManager来获取正在运行的服务列表,然后遍历列表判断目标服务是否在其中。javaActivityManager activityManager = (Ac
2023-10-19

Docker环境下将已运行的容器打包成新的镜像并运行在另一个服务器上的Docker容器中

1、 查看当前运行的容器 1.1、使用root账户登录进入Linux系统中,键入docker ps命令。 2、打包容器为镜像包 2.1、正在运行的容器一行中CONTAINER ID一列下面的字符串就是容器id,复制想要打包的容器ID并执行
2023-08-19

怎么在DOCKER中部署一个SEATA事务服务

这期内容当中小编将会给大家带来有关怎么在DOCKER中部署一个SEATA事务服务,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。1、创库授权语句> create database seata;> grant
2023-06-06

云服务器一直运行中怎么办

定期备份数据:定期备份数据可以帮助我们保证数据的安全性和完整性。建议每隔一段时间(比如一周或一个月)就对云服务器进行备份,确保数据不会丢失。备份数据可以在本地硬盘、云存储等多个位置进行,确保数据不会受到单点故障的影响。进行故障排查:一旦云服务器出现故障,首先需要进行故障排查。可以通过运行故障排查工具、诊断日志等方式来确
2023-10-27

怎么让一个软件在云服务器上运行

要让一个软件在云服务器上运行,您可以按照以下步骤操作:1. 选择云服务提供商:选择一个可靠的云服务提供商,根据您的需求选择适合的云服务器实例。2. 创建云服务器实例:在选择的云服务提供商平台上创建一个云服务器实例。您需要选择操作系统、硬件配
2023-09-26

怎么让一个软件在云服务器上运行

如何在云服务器上运行软件选择云服务器提供商。创建云服务器实例,选择类型、规格和操作系统。远程连接到实例,使用SSH客户端。安装软件,使用包管理器或安装程序文件。配置软件,修改配置文件并设置防火墙规则。启动软件,使用init脚本或系统服务管理工具。监控软件,使用云监控工具设置警报。扩展软件,随着需求增加,扩展资源并配置负载平衡器。最佳做法:设置安全组规则限制访问。定期创建快照备份数据。使用自动备份服务防止数据丢失。监控性能并进行调整。保持软件和操作系统更新。
怎么让一个软件在云服务器上运行
2024-04-12

程序不能在云服务器运行怎么解决

云服务器上程序无法运行的诊断与解决方案原因:操作系统兼容性依赖库缺失网络配置错误权限问题配置错误解决方案:检查操作系统兼容性安装依赖库配置网络授予权限检查配置其他注意事项:分析日志使用调试工具联系支持
程序不能在云服务器运行怎么解决
2024-04-12

程序不能在云服务器运行怎么解决

如果程序在云服务器上无法运行,可能有以下几个可能的原因和解决方法:1. 依赖问题:云服务器上可能缺少程序所需的依赖库或软件包。你可以检查程序的依赖关系,并确保在云服务器上安装了所有必需的依赖。2. 环境问题:云服务器上的操作系统或环境与程序
2023-09-13

Python异步之在Asyncio中怎么运行阻塞任务

今天小编给大家分享一下Python异步之在Asyncio中怎么运行阻塞任务的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。正文
2023-07-05

Android应用中怎么判断服务是否运行

这期内容当中小编将会给大家带来有关Android应用中怎么判断服务是否运行,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。实现代码:/** * * * @param mContext * @para
2023-05-31

怎么在Springboot服务中实现自动化部署Docker

怎么在Springboot服务中实现自动化部署Docker?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。微服务部署方式(1)手动部署:首先基于源码打包生成jar包(或war
2023-06-14

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录