docker 配置可以运行spark的容器并运行

在前面,我们已经讲述了如何在Ubantu下配置docker以及如何运行spark连接本机的mysql进行增删改查的操作。
下面我们将手把手搭建一个docker容器来运行spark并分享我所遇到的问题和解决方法。
首先我先参照spark官网上docker setup写了一个hello world。
在官网上可以看出docker中images的创建需要创建Dockerfile
文件,官网上Dockerfile

FROM java:8 //从哪个镜像里面继承而来,已经是官网配置的可以run的程序,可以以为它是已经是一个完整的系统镜像

# Install maven//下载maven
RUN apt-get update
RUN apt-get install -y maven

WORKDIR /code//这里就是我们运行spark给本机配置的一个程序

# Prepare by downloading dependencies
ADD pom.xml /code/pom.xml//添加当前目录的pom.xml到docker中的/code文件夹下,名字一样
RUN ["mvn", "dependency:resolve"]//运行命令,就类似于在终端上运行命令“,”表示终端中的空格
RUN ["mvn", "verify"]

# Adding source, compile and package into a fat jar
ADD src /code/src//添加一个文件夹
RUN ["mvn", "package"]

EXPOSE 4567//打开端口
CMD ["/usr/lib/jvm/java-8-openjdk-amd64/bin/java", "-jar", "target/sparkexample-jar-with-dependencies.jar"]//配置这条命令是每次打开容器,启动容器的时候都会运行这条命令,而上面的run就只会在创建的时候运行一次而已

当你用docker build -t xzj/spark:01 . (参照docker中保存镜像的格式,注意还有一个点)的时候,你就会发现,在 为容器下载maven的时候,运行好久都没过,很纠结。这时,是你被墙,不是你的代码又问题。

我的由于我已经清楚了Dockerfile的应用,
所以我直接用docker命令下载已经配置后的官网的镜像
命令:docker pull giantswarm/sparkexample

下载了官网上的镜像,接下来我要做的就是在容器里配置mysql以及ssh,方便登陆接口进入容器中直接配置。
接下来我的Dockerfile为

FROM giantswarm/sparkexample  从官网上容器里面继承

WORKDIR /code


WORKDIR /code

# Prepare by downloading dependencies
ADD pom.xml /code/pom.xml
RUN ["mvn", "dependency:resolve"]
RUN ["mvn", "verify"]

# Adding source, compile and package into a fat jar
ADD src /code/src
RUN ["mvn", "package"]

# 注意这里要更改系统的时区设置,因为在 web 应用中经常会用到时区这个系统变量,默认的 ubuntu 会让你的应用程序发生不可思议的效果哦
ENV DEBIAN_FRONTEND noninteractive

# 清空ubuntu更新包
RUN sudo rm -rf /var/lib/apt/lists/*

# 一次性安装vim,wget,curl,ssh server等必备软件
# RUN echo "deb http://archive.ubuntu.com/ubuntu precise main universe"> /etc/apt/sources.list
RUN sudo apt-get update
RUN sudo apt-get install -y vim wget curl openssh-server sudo
RUN sudo mkdir -p /var/run/sshd

# 将sshd的UsePAM参数设置成no
RUN sed -i 's/UsePAM yes/UsePAM no/g' /etc/ssh/sshd_config

# 添加测试用户admin,密码admin,并且将此用户添加到sudoers里
RUN useradd admin
RUN echo "admin:admin" | chpasswd
RUN echo "admin   ALL=(ALL)       ALL" >> /etc/sudoers
#为admin用户赋予sudo权限

# 把admin用户的shell改成bash,否则SSH登录Ubuntu服务器,命令行不显示用户名和目录 
RUN usermod -s /bin/bash admin

# 安装supervisor工具
RUN sudo apt-get install -y supervisor
RUN sudo mkdir -p /var/log/supervisor

# 添加 supervisord 的配置文件,并复制配置文件到对应目录下面。(supervisord.conf文件和Dockerfile文件在同一路径)
COPY supervisord.conf /etc/supervisor/conf.d/supervisord.conf

# 容器需要开放SSH 22端口
EXPOSE 22


# 容器需要开放SSH 4567端口
EXPOSE 4567


# 执行supervisord来同时执行多个命令,使用 supervisord 的可执行路径启动服务。
CMD ["/usr/bin/supervisord"]

在这里我体会到了supervisord的强大,可以在程序启动的时候运行,相当于脚本却又比脚本高几个档次,直接创造进程,对进程进行了保护,保护进程不被创建时删除。

supervisor配置文件内容

# 配置文件包含目录和进程
# 第一段 supervsord 配置软件本身,使用 nodaemon 参数来运行。
# 第二段包含要控制的 2 个服务。每一段包含一个服务的目录和启动这个服务的命令。

[supervisord]
nodaemon=
  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Docker是一种容器化技术,用于创建、部署和管理应用程序的容器。Hadoop是一个分布式计算框架,用于处理大数据集并在集群中进行高速计算。HBase是一个面向列的分布式数据库,用于存储和管理大规模的结构化数据。Hive是一个基于Hadoop的数据仓库基础架构,用于提供简化的查询和分析大数据的能力。而Spark是一个高级的分布式计算系统,用于加速大规模数据处理和分析。 在使用这些技术时,Docker可以用于快速搭建和部署容器化的Hadoop、HBase、Hive和Spark环境。使用Docker容器,我们可以轻松地在任何机器上部署这些组件,而无需担心环境配置的问题。 Hadoop是一个开源的分布式计算框架,它可以容纳大规模数据并以可靠的方式在集群中进行处理。通过用Docker容器运行Hadoop,我们可以更快地搭建和管理Hadoop集群,并且容易进行监控和维护。 HBase是一个分布式数据库系统,以表的形式存储数据,并提供高效的读写操作。通过Docker容器,我们可以轻松地部署HBase集群,并且可以根据需求进行水平扩展,以满足不同规模的数据存储需求。 Hive是一个基于Hadoop的数据仓库基础架构,它提供了类似于SQL的查询接口,方便用户进行大规模数据的查询和分析。使用Docker容器,我们可以轻松地搭建Hive环境,并通过对容器进行配置和管理,优化Hive的性能。 Spark是一个高级的分布式计算系统,它强调内存计算和迭代计算的能力,从而加速大规模数据处理和分析。通过Docker容器,我们可以快速部署和管理Spark集群,并且可以根据需求进行资源配置和任务调度,以实现高性能和高吞吐量的数据处理。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值