在需要搭建平台或配置环境时,按照传统的做法,需要下载相应软件包,然后进行配置,经过大量的操作后还需要进行功能测试,查看是否工作正常。如果不正常,则意味着更多的时间代价和不可控的风险。一旦需要服务器迁移(例如从阿里云迁移到腾讯云),往往需要重新部署和调试。这些琐碎而无趣的“体力活”,极大地降低了工作效率。
Docker提供了一种更为聪明的方式,通过容器来打包应用,意味着迁移只需要在新的服务器上启动需要的容器就可以了。这无疑将节约大量的宝贵时间,并降低部署过程出现问题的风险。
同理,在搭建数据分析hadoop-spark-zeppelin平台时,同样可以使用docker技术来制作镜像,通过启动容器来启动应用,首先需要修改Hadoop、Spark及Zeppelin的配置文件,然后再制作dockerfile。
具体配置Hadoop、Spark、Zeppelin的步骤以及具体制作的dockerfile的步骤如下所示:
1.配置Hadoop
/usr/local/hadoop/hadoop-2.6.0/etc/hadoop$ cat core-site.xml
/usr/local/hadoop/hadoop-2.6.0/etc/hadoop$ cat hdfs-site.xml
/usr/local/hadoop/hadoop-2.6.0/etc/hadoop$ cat hadoop-env.sh
/usr/local/hadoop/hadoop-2.6.0/etc/hadoop$ cat slaves
2 配置Spark
/usr/local/spark/spark-1.5.2-bin-hadoop2.6/conf$ cat spark-env.sh
/usr/local/spark/spark-1.5.2-bin-hadoop2.6/conf$ cat slave
/usr/local/spark/spark-1.5.2-bin-hadoop2.6/conf$ cat spark-defaults.conf
3 配置Zeppelin
/usr/local/zeppelin-0.6.0-bin-all/conf$ cat zeppelin-env.sh
/usr/local/zeppelin-0.6.0-bin-all/conf$ cat zeppelin-site.xml
4 制作Dockerfile
从docker hub仓库拉取ubuntu的基础镜像:docker pull ubuntu。
1) 使用该基础镜像并添加作者信息:
FROM ubuntu MAINTAINER from XXX
2) 安装必要的工具并建立必要的文件夹:
RUN apt-get update && apt-get –y install sudo RUN sudo apt-get -y install openssh-server RUN sudo apt-get -y install rsync RUN sudo apt-get install -y supervisor RUN mkdir /var/run/sshd
3) 修改sshd_config以及ssh_config 文件:
RUN sed -i 's/PermitRootLogin prohibit-password/ PermitRootLogin yes/' /etc/ssh/sshd_config RUN sed -i 's/PermitEmptyPasswords no/PermitEmptyPasswords yes/' /etc/ssh/sshd_config RUN sed -i 's/# StrictHostKeyChecking ask/StrictHostKeyChecking no/' /etc/ssh/ssh_config
4) 配置免密码登录:
RUN ssh-keygen -t rsa -f ~/.ssh/id_rsa RUN cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys RUN chmod 0600 ~/.ssh/authorized_keys RUN chmod 0700 ~/.ssh
5) 配置环境变量:
ENV JAVA_HOME /usr/local/java/jdk1.8.0_45 ENV SPARK_HOME ${SPARK_HOME}/bin:/usr/local/spark/spark-1.5.2-bin-hadoop2.6 ENV HADOOP_HOME /usr/local/hadoop/hadoop-2.6.0 ENV HADOOP_OPTS "$HADOOP_OPTS -Djava.library.path=/usr/local/hadoop/hadoop-2.6.0/lib/native" ENV HADOOP_COMMON_LIB_NATIVE_DIR $HADOOP_HOME/lib/native ENV CLASSPATH $CLASSPATH:$JAVA_HOME/lib:$JAVA_HOME/jre/lib:$HADOOP_HOME ENV PATH ${JAVA_HOME}/bin:${HADOOP_HOME}/bin:${HADOOP_HOME}/sbin:$PATH:${SPARK_HOME}/bin RUN echo 'export JAVA_HOME=/usr/local/java/jdk1.8.0_45'>>/etc/profile RUN echo 'export SPARK_HOME=${SPARK_HOME}/bin:/usr/local/spark/spark-1.5.2-bin-hadoop2.6'>>/etc/profile RUN echo 'export HADOOP_HOME=/usr/local/hadoop/hadoop-2.6.0'>>/etc/profile RUN echo 'export HADOOP_OPTS="$HADOOP_OPTS -XX:-PrintWarnings-Djava.library.path=/usr/local/hadoop/hadoop-2.6.0/lib/native"'>>/etc/profile RUN echo 'export HADOOP_COMMON_LIB_NATIVE_DIR=$HADOOP_HOME/lib/native'>>/etc/profile RUN echo'export CLASSPATH=$CLASSPATH:$JAVA_HOME/lib:$JAVA_HOME/jre/lib:$HADOOP_HOME'>>/etc/profile RUN echo 'export PATH=${JAVA_HOME}/bin:${HADOOP_HOME}/bin:${HADOOP_HOME}/sbin:$PATH:${SPARK_HOME}/bin'>>/etc/profile
6) 将下载并配置好的Hadoop、Java、Spark以及Zeppelin放在适当位置:
COPY hadoop /usr/local/hadoop COPY java /usr/local/java COPY spark /usr/local/spark COPY zeppelin-0.6.0-bin-all /usr/local/zeppelin-0.6.0-bin-all
7) 格式化Hadoop HDFS的namenode:
WORKDIR /usr/local/hadoop/hadoop-2.6.0/hdfs/namenode RUN sudo rm –rf * WORKDIR /usr/local/hadoop/hadoop-2.6.0/hdfs/datanode RUN sudo rm -rf * WORKDIR /usr/local/hadoop/hadoop-2.6.0/tmp RUN sudo rm -rf * WORKDIR /usr/local/hadoop/hadoop-2.6.0 RUN bin/hdfs namenode –format
8) 将启动脚本start.sh放置在合适路径:
/* #!/bin/bash #start.sh echo "127.0.0.1 singlenode" >> /etc/hosts /usr/local/hadoop/hadoop-2.6.0/sbin/stop-all.sh /usr/local/hadoop/hadoop-2.6.0/sbin/start-dfs.sh /usr/local/spark/spark-1.5.2-bin-hadoop2.6/sbin/stop-all.sh /usr/local/spark/spark-1.5.2-bin-hadoop2.6/sbin/start-all.sh cd /usr/local/zeppelin-0.6.0-bin-all bin/zeppelin-daemon.sh start /bin/bash */ COPY start.sh /usr/local/start.sh
9) 使用supervisord来管理:
/* #supervisord.conf [supervisord] nodaemon=true [program:sshd] command=/usr/sbin/sshd –D [program:start] command=sh /usr/local/start.sh&& tail -f startsecs=30 [program:bin] command=/bin/bash */ COPY supervisord.conf /etc/supervisor/conf.d/supervisord.conf RUN chmod 755 /etc/supervisor/conf.d/supervisord.conf
10) 对外暴露22,50070,8080,4040,8090端口:
EXPOSE 22 50070 8080 4040 8090
11) 设置container启动时执行的操作:
CMD ["/usr/bin/supervisord"]
5 在当前dockerfile的目录下build镜像
docker build -t hadoopsparkzeppelinimage .
6 运行新镜像
docker run –d –P hadoopsparkzeppelinimage
此时可以通过运行该容器的Ubuntu的IP和映射的50070端口访问Hadoop的HDFS,映射的8080端口访问Spark、映射的8090端口访问Zeppelin,如下图所示:
访问Hadoop页面
访问Spark页面
访问Zeppelin页面
至此,单节点的Hadoop-Spark-Zeppelin镜像就做好并启动了,该docker镜像可用于部署有docker环境的Ubuntu机器下。
对于运维来说,Docker提供了一种可移植的标准化部署过程,使得规模化、自动化、异构化的部署成为可能甚至是轻松简单的事情;而对于开发者来说,Docker提供了一种开发环境的管理方法,包括映像、构建、共享等功能, 将来会让普通用户使用起来。通过将数据分析平台Hadoop-Spark-Zeppelin docker化,使得数据分析人员不用在陷入配置Hadoop、Spark以及Zeppelin环境的重复劳动,将精力投入到核心的数据分析工作中去。
声 明
本安全公告仅用来描述可能存在的安全问题,绿盟科技不为此安全公告提供任何保证或承诺。由于传播、利用此安全公告所提供的信息而造成的任何直接或者间接的后果及损失,均由使用者本人负责,绿盟科技以及安全公告作者不为此承担任何责任。绿盟科技拥有对此安全公告的修改和解释权。如欲转载或传播此安全公告,必须保证此安全公告的完整性,包括版权声明等全部内容。未经绿盟科技允许,不得任意修改或者增减此安全公告内容,不得以任何方式将其用于商业目的。
关于绿盟科技
北京神州绿盟信息安全科技股份有限公司(简称绿盟科技)成立于2000年4月,总部位于北京。在国内外设有30多个分支机构,为政府、运营商、金融、能源、互联网以及教育、医疗等行业用户,提供具有核心竞争力的安全产品及解决方案,帮助客户实现业务的安全顺畅运行。
基于多年的安全攻防研究,绿盟科技在网络及终端安全、互联网基础安全、合规及安全管理等领域,为客户提供入侵检测/防护、抗拒绝服务攻击、远程安全评估以及Web安全防护等产品以及专业安全服务。
北京神州绿盟信息安全科技股份有限公司于2014年1月29日起在深圳证券交易所创业板上市交易,股票简称:绿盟科技,股票代码:300369。
如果您需要了解更多内容,可以
加入QQ群:570982169
直接询问:010-68438880