D004 复制粘贴玩大数据之Dockerfile安装Zookeeper集群

简介: Dockerfile文件的编写; 校验zk集群前准备工作; 校验是否zk安装成功

0x01 Dockerfile文件的编写


1. 编写Dockerfile文件


为了方便,我复制了一份spark集群的文件,取名zk_sny_all:


20190128154702881.png

a. zk集群安装步骤

参考文章:D003 复制粘贴玩大数据之安装与配置Zookeeper集群


常规安装

Dockerfile安装

1.将安装包放于容器

1.添加安装包并解压

2.解压并配置zk

2.添加环境变量

3.添加环境变量

3.添加配置文件与创建文件夹

4.启动zk

4.启动zk(启动前设置一下myid)
  • 其实安装内容都是一样的,这里只是就根据我写的步骤整理了一下


2. 编写Dockerfile文件的关键点

D001.8 Docker搭建Spark集群(实践篇)的“0x01 2. c. Dockerfile参考文件”相比较,不同点体现在:

具体步骤:

a. 添加安装包并解压(ADD指令会自动解压)


#添加zookeeper
ADD ./zookeeper-3.4.10.tar.gz /usr/local/

b. 添加环境变量(ZK_HOME、PATH)

#zk环境变量
ENV ZK_HOME /usr/local/zookeeper-3.4.10
#PATH里面追加内容
$ZK_HOME/bin:

c. 添加配置文件与创建文件夹(注意给之前的语句加“&& \”,表示未结束)

&& \
mkdir -p /usr/local/zookeeper-3.4.10/datadir && \
mkdir -p /usr/local/zookeeper-3.4.10/log && \
mv /tmp/zoo.cfg $ZK_HOME/conf/zoo.cfg

3. 完整的Dockerfile文件参考

a. 安装hadoop、spark、zookeeper

FROM ubuntu
MAINTAINER shaonaiyi shaonaiyi@163.com
ENV BUILD_ON 2019-01-28
RUN apt-get update -qqy
RUN apt-get -qqy install vim wget net-tools  iputils-ping  openssh-server
#添加JDK
ADD ./jdk-8u161-linux-x64.tar.gz /usr/local/
#添加hadoop
ADD ./hadoop-2.7.5.tar.gz  /usr/local/
#添加scala
ADD ./scala-2.11.8.tgz /usr/local/
#添加spark
ADD ./spark-2.2.0-bin-hadoop2.7.tgz /usr/local/
#添加zookeeper
ADD ./zookeeper-3.4.10.tar.gz /usr/local/
ENV CHECKPOINT 2019-01-28
#增加JAVA_HOME环境变量
ENV JAVA_HOME /usr/local/jdk1.8.0_161
#hadoop环境变量
ENV HADOOP_HOME /usr/local/hadoop-2.7.5
#scala环境变量
ENV SCALA_HOME /usr/local/scala-2.11.8
#spark环境变量
ENV SPARK_HOME /usr/local/spark-2.2.0-bin-hadoop2.7
#zk环境变量
ENV ZK_HOME /usr/local/zookeeper-3.4.10
#将环境变量添加到系统变量中
ENV PATH $ZK_HOME/bin:$SCALA_HOME/bin:$SPARK_HOME/bin:$HADOOP_HOME/bin:$JAVA_HOME/bin:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$PATH
RUN ssh-keygen -t rsa -f ~/.ssh/id_rsa -P '' && \
    cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys && \
    chmod 600 ~/.ssh/authorized_keys
#复制配置到/tmp目录
COPY config /tmp
#将配置移动到正确的位置
RUN mv /tmp/ssh_config    ~/.ssh/config && \
    mv /tmp/profile /etc/profile && \
    mv /tmp/masters $SPARK_HOME/conf/masters && \
    cp /tmp/slaves $SPARK_HOME/conf/ && \
    mv /tmp/spark-defaults.conf $SPARK_HOME/conf/spark-defaults.conf && \
    mv /tmp/spark-env.sh $SPARK_HOME/conf/spark-env.sh && \ 
    mv /tmp/hadoop-env.sh $HADOOP_HOME/etc/hadoop/hadoop-env.sh && \
    mv /tmp/hdfs-site.xml $HADOOP_HOME/etc/hadoop/hdfs-site.xml && \ 
    mv /tmp/core-site.xml $HADOOP_HOME/etc/hadoop/core-site.xml && \
    mv /tmp/yarn-site.xml $HADOOP_HOME/etc/hadoop/yarn-site.xml && \
    mv /tmp/mapred-site.xml $HADOOP_HOME/etc/hadoop/mapred-site.xml && \
    mv /tmp/master $HADOOP_HOME/etc/hadoop/master && \
    mv /tmp/slaves $HADOOP_HOME/etc/hadoop/slaves && \
    mv /tmp/start-hadoop.sh ~/start-hadoop.sh && \
    mkdir -p /usr/local/hadoop2.7/dfs/data && \
    mkdir -p /usr/local/hadoop2.7/dfs/name && \
    mkdir /usr/local/zookeeper-3.4.10/datadir && \
    mkdir /usr/local/zookeeper-3.4.10/log && \
    mv /tmp/zoo.cfg $ZK_HOME/conf/zoo.cfg
RUN echo $JAVA_HOME
#设置工作目录
WORKDIR /root
#启动sshd服务
RUN /etc/init.d/ssh start
#修改start-hadoop.sh权限为700
RUN chmod 700 start-hadoop.sh
#修改root密码
RUN echo "root:shaonaiyi" | chpasswd
CMD ["/bin/bash"]

0x02 校验zk集群前准备工作

1. 环境及资源准备


a. 安装Docker

请参考:D001.5 Docker入门(超级详细基础篇)的“0x01 Docker的安装”小节


b. 准备资源

安装Spark集群时的文件:D001.8 Docker搭建Spark集群(实践篇)


c. 准备zk安装包(zookeeper-3.4.10.tar.gz),像其他安装包一样


d. 准备zk的配置文件zoo.cfg(放于config目录下)

cd /home/shaonaiyi/docker_bigdata/zk_sny_all/config

vi zoo.cfg

# The number of milliseconds of each tick
tickTime=2000
# The number of ticks that the initial 
# synchronization phase can take
initLimit=10
# The number of ticks that can pass between 
# sending a request and getting an acknowledgement
syncLimit=5
# the directory where the snapshot is stored.
# do not use /tmp for storage, /tmp here is just 
# example sakes.
dataDir=/usr/local/zookeeper-3.4.10/datadir
dataLogDir=/usr/local/zookeeper-3.4.10/log
# the port at which the clients will connect
clientPort=2181
server.0=hadoop-master:8880:7770
server.1=hadoop-slave1:8881:7771
server.2=hadoop-slave2:8882:7772
# the maximum number of client connections.
# increase this if you need to handle more clients
#maxClientCnxns=60
#
# Be sure to read the maintenance section of the 
# administrator guide before turning on autopurge.
#
# http://zookeeper.apache.org/doc/current/zookeeperAdmin.html#sc_maintenance
#
# The number of snapshots to retain in dataDir
#autopurge.snapRetainCount=3
# Purge task interval in hours
# Set to "0" to disable auto purge feature
#autopurge.purgeInterval=1

2. 添加zk配置文件及启动zk指令信息

a. 配置环境变量文件

vi profile


  • 在config/profile中添加zk的环境变量

export ZK_HOME=/usr/local/zookeeper-3.4.10

  • 在export PATH=后面添加

$ZK_HOME/bin:


b. 在config/start-hadoop.sh添加内容:

vi start-hadoop.sh

#修改需要配置及启动zk命令的命令
ssh root@hadoop-master "source /etc/profile;/usr/local/zookeeper-3.4.10/bin/zkServer.sh start"
ssh root@hadoop-slave1 "source /etc/profile;/usr/local/zookeeper-3.4.10/bin/zkServer.sh start"
ssh root@hadoop-slave2 "source /etc/profile;/usr/local/zookeeper-3.4.10/bin/zkServer.sh start"
echo -e "\n"

0x03 校验是否zk安装成功

1. 生成镜像


a. 删除之前的spark集群容器(节省资源),如已删可省略此步

cd /home/shaonaiyi/docker_bigdata/spark_sny_all/config/

chmod 700 stop_containers.sh

./stop_containers.sh

b. 生成装好hadoop、spark、zookeeper的镜像(如果之前shaonaiyi/spark未删除,则此次会快很多)

cd ..

docker build -t shaonaiyi/zk .


20190128155805327.png


2. 生成容器并初始化zk集群

a. 修改start_containers.sh文件(样本镜像名称成shaonaiyi/zk、ip)

本人把里面的三个shaonaiyi/spark改为了shaonaiyi/zk,ip最后一位加了1,如:

172.21.0.2改为了172.21.0.12等等~

./start_containers.sh

ps:当然,你可以新建一个新的网络,换ip,这里偷懒,用了旧的网络,只换了ip

b. 进入master容器

sh ~/master.sh

c. 初始化zk集群,给各节点添加myid:

vi init_zk.sh


#!/bin/bash
ssh root@hadoop-master "echo '0' >> $ZK_HOME/datadir/myid"
ssh root@hadoop-slave1 "echo '1' >> $ZK_HOME/datadir/myid"
ssh root@hadoop-slave2 "echo '2' >> $ZK_HOME/datadir/myid"

chmod 700 init_zk.sh

ps:课后题,如何在生成镜像时自动将此步写好,思考一下?!

3. 启动集群并查看进程

a. 初始化zk配置,启动集群

./init_zk.sh


20190129095431649.png


./start-hadoop.sh

b. 执行查看进程

./jps_all.sh

请参考:D002 复制粘贴玩大数据之便捷配置的“0x03 1. jps_all.sh脚本”


20190129095923631.png


0xFF 总结


1.最好自己备份好安装spark集群时的Dockerfile与start_containers.sh等文件,也可以自己备份一份之前spark集群的环境,免得出问题了,无法回溯

2.本章节还有很多优化的地方,包括各脚本文件的一件生成,取代机械操作,学习一下Dockerfile的常用指令,自己就可以完成了,非常简单



相关文章
|
负载均衡 算法 关系型数据库
大数据大厂之MySQL数据库课程设计:揭秘MySQL集群架构负载均衡核心算法:从理论到Java代码实战,让你的数据库性能飙升!
本文聚焦 MySQL 集群架构中的负载均衡算法,阐述其重要性。详细介绍轮询、加权轮询、最少连接、加权最少连接、随机、源地址哈希等常用算法,分析各自优缺点及适用场景。并提供 Java 语言代码实现示例,助力直观理解。文章结构清晰,语言通俗易懂,对理解和应用负载均衡算法具有实用价值和参考价值。
大数据大厂之MySQL数据库课程设计:揭秘MySQL集群架构负载均衡核心算法:从理论到Java代码实战,让你的数据库性能飙升!
|
负载均衡 算法 关系型数据库
大数据新视界--大数据大厂之MySQL数据库课程设计:MySQL集群架构负载均衡故障排除与解决方案
本文深入探讨 MySQL 集群架构负载均衡的常见故障及排除方法。涵盖请求分配不均、节点无法响应、负载均衡器故障等现象,介绍多种负载均衡算法及故障排除步骤,包括检查负载均衡器状态、调整算法、诊断修复节点故障等。还阐述了预防措施与确保系统稳定性的方法,如定期监控维护、备份恢复策略、团队协作与知识管理等。为确保 MySQL 数据库系统高可用性提供全面指导。
|
消息中间件 运维 Java
搭建Zookeeper、Kafka集群
本文详细介绍了Zookeeper和Kafka集群的搭建过程,涵盖系统环境配置、IP设置、主机名设定、防火墙与Selinux关闭、JDK安装等基础步骤。随后深入讲解了Zookeeper集群的安装与配置,包括数据目录创建、节点信息设置、SASL认证配置及服务启动管理。接着描述了Kafka集群的安装,涉及配置文件修改、安全认证设置、生产消费认证以及服务启停操作。最后通过创建Topic、发送与查看消息等测试验证集群功能。全网可搜《小陈运维》获取更多信息。
1171 1
zdl
|
消息中间件 运维 大数据
大数据实时计算产品的对比测评:实时计算Flink版 VS 自建Flink集群
本文介绍了实时计算Flink版与自建Flink集群的对比,涵盖部署成本、性能表现、易用性和企业级能力等方面。实时计算Flink版作为全托管服务,显著降低了运维成本,提供了强大的集成能力和弹性扩展,特别适合中小型团队和业务波动大的场景。文中还提出了改进建议,并探讨了与其他产品的联动可能性。总结指出,实时计算Flink版在简化运维、降低成本和提升易用性方面表现出色,是大数据实时计算的优选方案。
zdl
908 56
|
存储 SpringCloudAlibaba Java
【SpringCloud Alibaba系列】一文全面解析Zookeeper安装、常用命令、JavaAPI操作、Watch事件监听、分布式锁、集群搭建、核心理论
一文全面解析Zookeeper安装、常用命令、JavaAPI操作、Watch事件监听、分布式锁、集群搭建、核心理论。
【SpringCloud Alibaba系列】一文全面解析Zookeeper安装、常用命令、JavaAPI操作、Watch事件监听、分布式锁、集群搭建、核心理论
|
存储 负载均衡 监控
dubbo学习一:zookeeper与dubbo的关系,下载安装启动zookeeper(解决启动中报错)
这篇文章是关于Apache Dubbo框架与Zookeeper的关系,以及如何下载、安装和启动Zookeeper的教程,包括解决启动过程中可能遇到的报错问题。
878 3
dubbo学习一:zookeeper与dubbo的关系,下载安装启动zookeeper(解决启动中报错)
|
SQL 存储 大数据
单机顶集群的大数据技术来了
大数据时代,分布式数仓如MPP成为热门技术,但其高昂的成本让人望而却步。对于多数任务,数据量并未达到PB级,单体数据库即可胜任。然而,由于SQL语法的局限性和计算任务的复杂性,分布式解决方案显得更为必要。esProc SPL作为一种开源轻量级计算引擎,通过高效的算法和存储机制,实现了单机性能超越集群的效果,为低成本、高效能的数据处理提供了新选择。
|
存储 负载均衡 监控
揭秘 Elasticsearch 集群架构,解锁大数据处理神器
Elasticsearch 是一个强大的分布式搜索和分析引擎,广泛应用于大数据处理、实时搜索和分析。本文深入探讨了 Elasticsearch 集群的架构和特性,包括高可用性和负载均衡,以及主节点、数据节点、协调节点和 Ingest 节点的角色和功能。
1051 0
|
12月前
|
机器学习/深度学习 传感器 分布式计算
数据才是真救命的:聊聊如何用大数据提升灾难预警的精准度
数据才是真救命的:聊聊如何用大数据提升灾难预警的精准度
713 14
|
机器学习/深度学习 运维 监控
运维不怕事多,就怕没数据——用大数据喂饱你的运维策略
运维不怕事多,就怕没数据——用大数据喂饱你的运维策略
1157 0

热门文章

最新文章