【大数据】通过 docker-compose 快速部署 ClickHouse 保姆级教程

这篇具有很好参考价值的文章主要介绍了【大数据】通过 docker-compose 快速部署 ClickHouse 保姆级教程。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、概述

ClickHouse是一种高性能、列式存储的分布式数据库管理系统。它专注于快速数据分析和查询,并且在大规模数据集上表现出色。

在ClickHouse中,数据按列存储而不是按行存储。这种存储方式有许多优点,特别适合分析工作负载。下面是一些与列数据存储相关的关键概念和特点:

  • 列存储:ClickHouse将每一列的数据连续存储在磁盘上,这种存储方式有助于高效地进行压缩和编码。相比之下,传统的行存储数据库会将整行数据存储在一起。

  • 列压缩:ClickHouse使用多种压缩算法来减小列数据的存储空间。这些算法针对不同类型的数据(例如数字、字符串、日期等)进行了优化,可以显著减少存储成本。

  • 列编码:ClickHouse还使用列编码来提高查询性能。列编码是一种将相似值存储在一起的技术,可以减少磁盘读取和解压缩的数据量。

  • 数据分区:ClickHouse支持数据分区,可以将数据划分为更小的部分,以便更高效地执行查询。数据分区可以根据时间、日期、范围或自定义规则进行。

  • 合并树(MergeTree)引擎:ClickHouse的默认存储引擎是MergeTree,它是基于列存储和数据分区的。MergeTree引擎支持高效的数据插入和查询,并且具有自动合并和数据删除的功能。

总的来说,ClickHouse的列数据存储方式以及相关的压缩和编码技术使其在大规模数据分析场景下表现出色。它能够高效地处理海量数据,并提供快速的查询性能。

docker部署clickhouse,大数据,docker,ClickHouse,大数据,docker,clickhouse
这里主要侧重使用docker快速部署环境,想了解更多,可以参考我以下几篇文章:

  • 列式数据库管理系统——ClickHouse(version:22.7.1 环境部署)
  • 列式数据库管理系统——ClickHouse实战演练

官方文档:https://clickhouse.com/docs/zh

二、ClickHouse 列数据存储优缺点

ClickHouse的列数据存储方式具有许多优点和一些缺点。下面是对ClickHouse列数据存储的主要优缺点的总结:

1)优点

  • 高压缩率:列数据存储允许对每一列使用专门的压缩算法,针对不同类型的数据进行优化,从而实现更高的压缩率。这可以显著减小数据存储的需求,降低硬件成本。

  • 高查询性能:列数据存储适用于分析型工作负载,其中查询通常涉及少量列而涵盖大量行。由于每个查询只需要读取所需的列数据,而不是整行数据,所以列数据存储通常比行存储更快。

  • 数据压缩对查询性能的提升:由于列数据存储的数据压缩,它可以减少磁盘I/O操作和网络传输,提高查询性能。较小的数据量意味着更少的磁盘读取和更快的数据传输速度。

  • 数据分区和合并:ClickHouse支持数据分区和合并树引擎,这使得对大规模数据集的查询和分析更加高效。数据分区允许将数据划分为更小的部分,从而减少需要扫描的数据量。自动合并和数据删除功能确保数据的连续性和性能。

2)缺点

更新和删除操作相对复杂:由于列数据存储的特性,更新和删除操作可能相对复杂。这是因为更新和删除需要定位并修改多个列的数据,而不仅仅是单个行。

  • 不适合高并发的事务处理:ClickHouse的设计目标是快速数据分析和查询,而不是高并发的事务处理。如果应用程序需要大量的并发事务操作和实时写入需求,ClickHouse可能不是最佳选择。

  • 不适合频繁变更的模式:由于列存储的特性,如果数据模式经常发生变化,例如添加或删除列,可能需要进行较大的重建操作。因此,ClickHouse更适合稳定的数据模式和预先定义的查询需求。

总的来说,ClickHouse的列数据存储方式在大规模数据分析场景下具有许多优势,包括高压缩率、高查询性能和灵活的数据分区。然而,它可能不适合需要频繁更新和变更模式的应用程序,并且不是专为高并发的事务处理而设计。

三、ClickHouse 中 Zookeeper 的作用

在 ClickHouse 中,ZooKeeper 扮演着协调和管理分布式集群的角色。它作为一个分布式协调服务,为 ClickHouse 提供了以下功能和作用:

  • 配置管理:ZooKeeper 用于存储和管理 ClickHouse 集群的配置信息,包括集群拓扑、节点信息、数据分片和副本分配等。ClickHouse 节点通过与 ZooKeeper 进行交互,获取集群的配置信息,从而了解集群的拓扑结构和各个节点的角色。

  • Leader 选举:在 ClickHouse 集群中,每个分片都有一个 Leader 节点负责协调和处理读写请求。ZooKeeper 用于协助进行 Leader 的选举过程,确保在节点故障或重启后能够快速选举出新的 Leader 节点来维持集群的可用性。

  • 监控和健康检查:ZooKeeper 可以用于监控 ClickHouse 集群的健康状态。ClickHouse 节点可以将自身的状态信息注册到 ZooKeeper 上,同时定期向 ZooKeeper 发送心跳信号。这样可以实现集群的实时监控和故障检测,如果节点出现故障或不可用,可以及时做出相应的处理。

  • 分布式锁和协调:ZooKeeper 提供了分布式锁和协调的功能,可以用于在 ClickHouse 集群中实现一致性操作和并发控制。例如,当进行某些需要串行执行的操作时,可以使用 ZooKeeper 的分布式锁来确保只有一个节点可以执行该操作,从而避免冲突和数据不一致的问题。

总的来说,ZooKeeper 在 ClickHouse 中扮演着关键的角色,用于集群的配置管理、Leader 选举、监控和健康检查以及分布式锁和协调。它提供了分布式环境下的协同工作和一致性保证,帮助确保 ClickHouse 集群的稳定运行和可靠性。

四、前期准备

1)部署 docker

# 安装yum-config-manager配置工具
yum -y install yum-utils

# 建议使用阿里云yum源:(推荐)
#yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

# 安装docker-ce版本
yum install -y docker-ce
# 启动并开机启动
systemctl enable --now docker
docker --version

2)部署 docker-compose

curl -SL https://github.com/docker/compose/releases/download/v2.16.0/docker-compose-linux-x86_64 -o /usr/local/bin/docker-compose

chmod +x /usr/local/bin/docker-compose
docker-compose --version

五、创建网络

# 创建,注意不能使用hadoop_network,要不然启动hs2服务的时候会有问题!!!
docker network create hadoop-network

# 查看
docker network ls

六、安装 Zookeeper

这里选择docker快速部署的方式:【中间件】通过 docker-compose 快速部署 Zookeeper 保姆级教程

git clone https://gitee.com/hadoop-bigdata/docker-compose-zookeeper.git

cd docker-compose-zookeeper

# 部署
docker-compose -f docker-compose.yaml up -d

# 查看
docker-compose -f docker-compose.yaml ps

七、ClickHouse 编排部署

docker部署clickhouse,大数据,docker,ClickHouse,大数据,docker,clickhouse

1)下载 ClickHouse 安装包

这里选择使用yum安装方式,也可以选择离线安装包部署,具体教程可参考官方部署文档:https://clickhouse.com/docs/zh/getting-started/install

2)配置

  • config/config.xml

修改/etc/clickhouse-server/config.xml,是本地和远程可登陆,配置文件内容比较多,这里就粘贴出来了。

<listen_host>0.0.0.0</listen_host>

<clickhouse>
<!-- 默认是没有的,直接新增就行 -->
<include_from>/etc/metrika.xml</include_from>
<!--- 将默认的配置删掉 -->
<remote_servers incl="clickhouse_remote_servers" />
<zookeeper incl="zookeeper" optional="true" />
<macros incl="macros" optional="true" />
<!-- 删掉默认配置 -->
<compression incl="clickhouse_compression" optional="true" />

</clickhouse>

  • config/users.xml

修改 /etc/clickhouse-server/users.xml,配置密码,其它参数可以根据业务场景进行配置,在55行左右

<password>123456</password>
  • images/metrika.xml
<yandex>
    <!--ck集群节点-->
    <clickhouse_remote_servers>
        <!-- 集群名称 -->
        <ck_cluster_2023>
            <!--shard 1(分片1)-->
            <shard>
                <weight>1</weight>
                <!-- internal_replication这个参数是控制写入数据到分布式表时,分布式表会控制这个写入是否的写入到所有副本中,这里设置false,就是只会写入到第一个replica,其它的通过zookeeper同步 -->
                <internal_replication>false</internal_replication>
                <replica>
                    <host>ck-node-1</host>
                    <port>9000</port>
                    <user>default</user>
                    <password>123456</password>
                </replica>
                <!--replicat 1(副本 1)-->
                <replica>
                    <host>ck-node-2</host>
                    <port>9000</port>
                    <user>default</user>
                    <password>123456</password>
                </replica>
            </shard>
            <!--shard 2(分片2)-->
            <shard>
                <weight>1</weight>
                <internal_replication>false</internal_replication>
                <replica>
                    <host>ck-node-3</host>
                    <port>9000</port>
                    <user>default</user>
                    <password>123456</password>
                </replica>
                <!--replicat 2(副本 2)-->
                <replica>
                    <host>ck-node-4</host>
                    <port>9000</port>
                    <user>default</user>
                    <password>123456</password>
                </replica>
            </shard>
        </ck_cluster_2023>
    </clickhouse_remote_servers>
    <!--zookeeper相关配置-->
    <zookeeper>
        <node index="1">
            <host>zookeeper-node1</host>
            <port>2181</port>
        </node>
        <node index="2">
            <host>zookeeper-node2</host>
            <port>2181</port>
        </node>
        <node index="3">
            <host>zookeeper-node3</host>
            <port>2181</port>
        </node>
    </zookeeper>
    <macros>
        <!-- 本节点副本名称,创建复制表时有用,每个节点不同,整个集群唯一,建议使用主机名+副本+分片),在当前节点上-->
        <shard>${macros_shard}</shard>
        <replica>${macros_replica}</replica>
    </macros>
    <!-- 监听网络 -->
    <networks>
        <ip>::/0</ip>
    </networks>
    <!--压缩相关配置-->
    <clickhouse_compression>
        <case>
            <min_part_size>1073741824</min_part_size>
            <min_part_size_ratio>0.01</min_part_size_ratio>
            <method>lz4</method>
            <!--压缩算法lz4压缩比zstd快, 更占磁盘-->
        </case>
    </clickhouse_compression>
</yandex>

注意上面 macros 配置,上面配置的只是一个占位符,服务启动之前会自动替换。

3)启动脚本 bootstrap.sh

#!/bin/bash

# 修改 macros 配置,
# 格式:${hostname}-${macros}-${replica}
# 示例:local-168-182-110-01-1
last=`hostname| awk -F'-' '{print $NF}'`
if [ $last -eq 1 -o $last -eq 2 ];then
   macros_shard="01"
   macros_replica=`hostname`-${macros_shard}-$last
fi

if [ $last -eq 3 -o $last -eq 4 ];then
   macros_shard="02"
   let last=last-2
   macros_replica=`hostname`-${macros_shard}-$last
fi

# 替换
sed -i "s/\${macros_shard}/${macros_shard}/" /etc/metrika.xml
sed -i "s/\${macros_replica}/${macros_replica}/" /etc/metrika.xml

sudo /etc/init.d/clickhouse-server start
tail -f /var/log/clickhouse-server/clickhouse-server.log

4)构建镜像 Dockerfile

FROM registry.cn-hangzhou.aliyuncs.com/bigdata_cloudnative/centos-jdk:7.7.1908

RUN yum install -y yum-utils
RUN yum-config-manager --add-repo https://packages.clickhouse.com/rpm/clickhouse.repo
RUN yum install -y clickhouse-server clickhouse-client

# copy config
COPY  metrika.xml /etc/

# copy bootstrap.sh
COPY bootstrap.sh /opt/apache/
RUN chmod +x /opt/apache/bootstrap.sh

# 授权
# 授权
RUN chown -R clickhouse:clickhouse /var/lib/clickhouse/  /etc/clickhouse-server/ /var/log/clickhouse-server
RUN chown -R clickhouse:clickhouse /opt/apache


WORKDIR /opt/apache

开始构建镜像

docker build -t registry.cn-hangzhou.aliyuncs.com/bigdata_cloudnative/clickhouse:23.5.3.24 . --no-cache --progress=plain

# 为了方便小伙伴下载即可使用,我这里将镜像文件推送到阿里云的镜像仓库
docker push registry.cn-hangzhou.aliyuncs.com/bigdata_cloudnative/clickhouse:23.5.3.24

### 参数解释
# -t:指定镜像名称
# . :当前目录Dockerfile
# -f:指定Dockerfile路径
#  --no-cache:不缓存

5)编排 docker-compose.yaml

version: '3'
services:
  ck-node-1:
    image: registry.cn-hangzhou.aliyuncs.com/bigdata_cloudnative/clickhouse:23.5.3.24
    container_name: ck-node-1
    hostname: ck-node-1
    restart: always
    privileged: true
    env_file:
      - .env
    volumes:
      - ./config/config.xml:/etc/clickhouse-server/config.xml
      - ./config/users.xml:/etc/clickhouse-server/users.xml
    expose:
      - "${CilckHouse_PORT}"
    ports:
      - "${ClickHouse_HTTP_PORT}"
    command: ["sh","-c","/opt/apache/bootstrap.sh"]
    networks:
      - hadoop-network
    healthcheck:
      test: ["CMD-SHELL", "netstat -tnlp|grep :${CilckHouse_PORT} || exit 1"]
      interval: 10s
      timeout: 10s
      retries: 5
  ck-node-2:
    image: registry.cn-hangzhou.aliyuncs.com/bigdata_cloudnative/clickhouse:23.5.3.24
    container_name: ck-node-2
    hostname: ck-node-2
    restart: always
    privileged: true
    env_file:
      - .env
    volumes:
      - ./config/config.xml:/etc/clickhouse-server/config.xml
      - ./config/users.xml:/etc/clickhouse-server/users.xml
    expose:
      - "${CilckHouse_PORT}"
    ports:
      - "${ClickHouse_HTTP_PORT}"
    command: ["sh","-c","/opt/apache/bootstrap.sh"]
    networks:
      - hadoop-network
    healthcheck:
      test: ["CMD-SHELL", "netstat -tnlp|grep :${CilckHouse_PORT} || exit 1"]
      interval: 10s
      timeout: 10s
      retries: 5
  ck-node-3:
    image: registry.cn-hangzhou.aliyuncs.com/bigdata_cloudnative/clickhouse:23.5.3.24
    container_name: ck-node-3
    hostname: ck-node-3
    restart: always
    privileged: true
    env_file:
      - .env
    volumes:
      - ./config/config.xml:/etc/clickhouse-server/config.xml
      - ./config/users.xml:/etc/clickhouse-server/users.xml
    expose:
      - "${CilckHouse_PORT}"
    ports:
      - "${ClickHouse_HTTP_PORT}"
    command: ["sh","-c","/opt/apache/bootstrap.sh"]
    networks:
      - hadoop-network
    healthcheck:
      test: ["CMD-SHELL", "netstat -tnlp|grep :${CilckHouse_PORT} || exit 1"]
      interval: 10s
      timeout: 10s
      retries: 5
  ck-node-4:
    image: registry.cn-hangzhou.aliyuncs.com/bigdata_cloudnative/clickhouse:23.5.3.24
    container_name: ck-node-4
    hostname: ck-node-4
    restart: always
    privileged: true
    env_file:
      - .env
    volumes:
      - ./config/config.xml:/etc/clickhouse-server/config.xml
      - ./config/users.xml:/etc/clickhouse-server/users.xml
    expose:
      - "${CilckHouse_PORT}"
    ports:
      - "${ClickHouse_HTTP_PORT}"
    command: ["sh","-c","/opt/apache/bootstrap.sh"]
    networks:
      - hadoop-network
    healthcheck:
      test: ["CMD-SHELL", "netstat -tnlp|grep :${CilckHouse_PORT} || exit 1"]
      interval: 10s
      timeout: 10s
      retries: 5

# 连接外部网络
networks:
  hadoop-network:
    external: true

.env 文件内容

CilckHouse_PORT=9000
ClickHouse_HTTP_PORT=8123

6)开始部署

# --project-name指定项目名称,默认是当前目录名称
docker-compose -f docker-compose.yaml up -d

# 查看
docker-compose -f docker-compose.yaml ps

# 卸载
docker-compose -f docker-compose.yaml down

7)简单测试验证

# 登录容器
docker exec -it ck-node-1 bash

# 默认情况下,在批量模式中只能执行单个查询。为了从一个Script中执行多个查询,可以使用--multiquery参数。
clickhouse-client -u default --password 123456 --port 9000 -h localhost --multiquery

select * from system.clusters;

docker部署clickhouse,大数据,docker,ClickHouse,大数据,docker,clickhouse

8)web 访问

http://ip:port/play
获取对外port

docker-compose -f docker-compose.yaml ps

docker部署clickhouse,大数据,docker,ClickHouse,大数据,docker,clickhouse
参数说明:

  • cluster: 集群的命名
  • shard_num: 分片的编号
  • shard_weight: 分片的权重
  • replica_num: 副本的编号
  • host_name: 机器的host名称
  • host_address: 机器的ip地址
  • port: clickhouse集群的端口
  • is_local: 是否为你当前查询本地
  • user: 创建用户

到此通过 docker-compose 快速部署 ClickHouse 保姆级教程就结束了,有任何疑问请关注我公众号:大数据与云原生技术分享,加群交流或私信沟通~文章来源地址https://www.toymoban.com/news/detail-731550.html

到了这里,关于【大数据】通过 docker-compose 快速部署 ClickHouse 保姆级教程的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 如何通过docker-compose部署ES集群

    一、概述 Linux系统搭建ES集群的方式有很多种,其中通过docker-compose进行安装最为方便。 二、准备 1、配置虚拟机 1.1、设置IP 将虚拟机IP设置为192.168.1.100; 1.2、设置内存 将虚拟机内存设置为4G,内存太小可能导致某个ES节点无法正常运行; 1.3、修改limits.conf limits.conf文件可以

    2024年02月16日
    浏览(37)
  • 如何通过docker-compose部署单节点ES

    一、概述 Linux系统搭建单节点ES的方式有很多种,其中通过docker-compose进行安装最为方便。 二、准备 1、配置虚拟机 1.1、设置IP 将虚拟机IP设置为192.168.1.100; 1.2、设置内存 将虚拟机内存设置为4G,内存太小可能导致ES无法正常运行; 1.3、修改limits.conf limits.conf文件可以设置用

    2024年02月15日
    浏览(40)
  • 基于docker-compose编排部署pig微服务快速开发框架

    基于docker-compose编排部署Pig微服务快速开发框架 1.规划节点 IP 主机名 节点 192.168.100.10 master docker-compose节点 2.基础准备 将软件包上传至master节点/root目录下 案例实施 1.基础环境准备 (1)上传软件包 导入Centos:7.9.2009镜像 查看集群状态 2.容器化部署MariaDB (1)编写Dockerfile 编写mysql

    2024年02月16日
    浏览(28)
  • docker-compose快速部署elasticsearch-8.x(单机版)

    环境信息 以下是本次实战的环境信息,可以作为参考 操作系统:Centos8 ElasticSearch:8.4.2 Linux环境设置(官方推荐)  配置 vm.max_map_count  不能低于  262144 查看是否配置  vm.max_map_count  setting 打开文件/etc/sysctl.conf在尾部添加一行配置vm.max_map_count = 262144修改保存, 然后执行命令

    2024年02月12日
    浏览(26)
  • halo搭建炫酷个人博客快速部署:docker+docker-compose+nginx

    🏠 服务器与网站部署知识体系目录 部署一个炫酷的个人博客只需要按照本文的指令直接 cv 即可。 但请注意打开服务器防火墙的 80 和 3306 端口。 Halo是一款现代化的开源博客/CMS系统,所有代码开源在GitHub上且处于积极维护状态。它是基于 Java Spring Boot 构建的,易于部署,支

    2024年02月08日
    浏览(49)
  • 如何在Linux以docker-compose方式快速部署运行StackEdit,并实现公网访问

    StackEdit是一个受欢迎的Markdown编辑器,在GitHub上拥有20.7k Star!,它支持将Markdown笔记保存到多个仓库,包括Gitee、GitHub和Gitea。此在线笔记工具还提供了一些便捷功能,如拖拽或粘贴上传图片、文件搜索功能,以及可切换为炫酷的暗黑主题,这些功能特别适合那些喜欢使用Mar

    2024年02月05日
    浏览(39)
  • 使用docker-compose.yml快速搭建开发、部署环境(nginx、tomcat、mysql、jar包、各种程序)以及多容器通信和统一配置

    image 镜像名称,可去镜像市场查找自己需要的 hostname 容器内服务名 container_name 容器名 volumes 可以把自己电脑的路径映射到容器中的文件夹中 networks 写同一个网络可以让容器之间进行通信 启动 在项目根目录的命令行中输入 docker-compose up 停止 在项目根目录的命令行中输入 d

    2024年02月12日
    浏览(38)
  • debian11 快速安装docker,docker-compose

    如果update遇到如图错误 #如境外vps 无需换源则可以使用一下语句 #这是一个使用sed命令修改apt源列表的命令。其中,-i选项表示直接修改文件内容,而不是输出到终端,-s选项表示以行为单位进行处理。在这里,\\\"s|bullseye/updates|bullseye-security|\\\"是sed的替换表达式,它将源列表中所有包含

    2024年02月07日
    浏览(32)
  • 使用Docker-compose快速构建Nacos服务

    在微服务架构中,服务的注册与发现扮演着至关重要的角色。Nacos(Naming and Configuration Service)是阿里巴巴开源的服务注册与发现组件,致力于支持动态配置管理和服务发现。最近,一位朋友表达了对搭建一套Nacos开发环境的兴趣。先前,我们曾发布了一篇有关在Linux上直接部

    2024年01月24日
    浏览(40)
  • yapi通过docker-compose安装遇到的问题

    docker无法访问外部网络 https://www.jianshu.com/p/f3ce460625fb iptables: No chain/target/match by that name service docker restart getaddrinfo EAI_AGAIN registry.npmjs.org docker内网络不通,默认docker通过桥接模式连接到宿主机,参考问题1进行解决 docker logs container_id 查看日志 https://blog.csdn.net/hshloveyy/article/de

    2024年02月06日
    浏览(31)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包