ClickHouse——安装部署

手机软件开发 2024-9-16 22:05:16 94 0 来自 中国
前言

ClickHouse是俄罗斯的Yandex于2016年开源的一个用于联机分析(OLAP:Online Analytical Processing)的列式数据库管理系统(DBMSatabase Management System) , 主要用于在线分析处理查询(OLAP),能够使用SQL查询实时生成分析数据报告。 ClickHouse的全称是Click Stream,Data WareHouse,简称ClickHouse。
ClickHouse是一个完全的列式分布式数据库管理系统(DBMS),允许在运行时创建表和数据库,加载数据和运行查询,而无需重新配置和重新启动服务器,支持线性扩展,简单方便,高可靠性,容错。它在大数据领域没有走 Hadoop 生态,而是采用 Local attached storage 作为存储,这样整个 IO 可能就没有 Hadoop 那一套的局限。它的系统在生产环境中可以应用到比较大的规模,因为它的线性扩展能力和可靠性保障能够原生支持 shard + replication 这种解决方案。它还提供了一些 SQL 直接接口,有比较丰富的原生 client。
优点


  • 1、灵活的MPP架构,支持线性扩展,简单方便,高可靠性
  • 2、多服务器分布式处理数据 ,完备的DBMS系统
  • 3、底层数据列式存储,支持压缩,优化数据存储,优化索引数据 优化底层存储
  • 4、容错跑分快:比Vertica快5倍,比Hive快279倍,比MySQL快800倍,其可处理的数据级别已达到10亿级别
  • 5、功能多:支持数据统计分析各种场景,支持类SQL查询,异地复制部署
    海量数据存储,分布式运算,快速闪电的性能,几乎实时的数据分析 ,友好的SQL语法,出色的函数支持
缺点


  • 1、不支持事务,不支持真正的删除/更新 (批量)
  • 2、不支持高并发,官方建议qps为100,可以通过修改配置文件增加连接数,但是在服务器足够好的情况下
  • 3、不支持二级索引
  • 4、不擅长多表join *** 大宽表
  • 5、元数据管理需要人为干预 ***
  • 6、尽量做1000条以上批量的写入,避免逐行insert或小批量的insert,update,delete操作
应用场景


  • 1、绝大多数请求都是用于读访问的, 要求实时返回结果
  • 2、数据需要以大批次(大于1000行)进行更新,而不是单行更新;或者根本没有更新操作
  • 3、数据只是添加到数据库,没有必要修改
  • 4、读取数据时,会从数据库中提取出大量的行,但只用到一小部分列
  • 5、表很“宽”,即表中包含大量的列
  • 6、查询频率相对较低(通常每台服务器每秒查询数百次或更少)
  • 7、对于简单查询,允许大约50毫秒的延迟
  • 8、列的值是比较小的数值和短字符串(例如,每个URL只有60个字节)
  • 9、在处理单个查询时需要高吞吐量(每台服务器每秒高达数十亿行)
  • 10、不需要事务
  • 11、数据一致性要求较低 [原子性 持久性 一致性 隔离性]
  • 12、每次查询中只会查询一个大表。除了一个大表,其余都是小表
  • 13、查询结果显著小于数据源。即数据有过滤或聚合。返回结果不超过单个服务器内存大小
一、系统要求

ClickHouse可以在任何具有x86_64,AArch64或PowerPC64LE CPU架构的Linux,FreeBSD或Mac OS X上运行。 官方预构建的二进制文件通常针对x86_64进行编译,并利用SSE 4.2指令集,因此,除非另有说明,支持它的CPU使用将成为额外的系统需求。下面是检查当前CPU是否支持SSE 4.2的命令:
$ grep -q sse4_2 /proc/cpuinfo && echo "SSE 4.2 supported" || echo "SSE 4.2 not supported"要在不支持SSE 4.2或AArch64,PowerPC64LE架构的处理器上运行ClickHouse,您应该通过适当的配置调整从源代码构建ClickHouse
clickhouse中文文档地址:

https://clickhouse.com/docs/zh/getting-started/tutorial/
采用tgz的方式安装

官网上安装部署有比较详细的说明,具体文档地址如下,支持deb、rpm、tgz、docker等安装部署方式
https://clickhouse.com/docs/zh/getting-started/install/
tgz包下载地址:
https://packages.clickhouse.com/tgz/
https://github.com/ClickHouse/ClickHouse/releases
下载的版本是22.3.2.2,以此版本为例,tgz包上传到同一个目录下,执行以下操作
tar -xzvf "clickhouse-common-static-22.3.2.2.tgz"sudo "clickhouse-common-static-22.3.2.2/install/doinst.sh" tar -xzvf "clickhouse-common-static-dbg-22.3.2.2.tgz"sudo "clickhouse-common-static-dbg-22.3.2.2/install/doinst.sh"tar -xzvf "clickhouse-client-22.3.2.2.tgz"sudo "clickhouse-client-22.3.2.2/install/doinst.sh" //这一步会让你填写默认的用户密码,可填可不填tar -xzvf "clickhouse-server-22.3.2.2.tgz"sudo "clickhouse-server-22.3.2.2/install/doinst.sh"二、安装前准备


  • 1.文件打开数调整
在 /etc/security/limits.conf和/etc/security/limits.d/20-nproc.conf 这两个文件的末尾加入以下内容:sudo vim /etc/security/limits.conf* soft nofile 65536* hard nofile 65536* soft nproc 131072* hard nproc 131072重启服务器之后生效,用 ulimit -n 或者 ulimit -a 查看设置结果

  • 2.取消selinux
    修改 /etc/selinux/config 中的 SELINUX=disabled 后重启
vim /etc/selinux/configSELINUX=disabled

  • 3.关闭防火墙
systemctl status firewalld.servicesystemctl stop firewalld.service

  • 4.安装依赖
root用户执行:yum install -y libtoolyum install -y *unixODBC*

  • 5.验证是否支持sse 4.2指令集
    需要验证当前服务器的CPU是否支持SSE 4.2指令集,因为向量化执行需要用到这项特性
grep -q sse4_2 /proc/cpuinfo && echo "SSE 4.2 supported" || echo "SSE 4.2 notsupported"三、快速安装(单机)

本次安装操作系统为CentOS 7
1. 登陆官网 https://clickhouse.tech/#quick-start

2. 在Quick start上选择Centos or RedHat,安装步骤进行安装

sudo yum install -y yum-utilssudo yum-config-manager --add-repo https://packages.clickhouse.com/rpm/clickhouse.reposudo yum install -y clickhouse-server clickhouse-client sudo /etc/init.d/clickhouse-server start    # 启动服务端clickhouse-client  # or "clickhouse-client --password" if you set up a password.    # 连接客户端clickhouse-client #启动客户端默认在localhost:9000
clickhouse-client --host=localhost --port=9000 --user=xxx --password=xxx -m
具体在/etc/clickhouse-server/ 里的 config.xml文件 修改listen_host和相关port

-m:多行模式, 是指在数据表里写sql时可以将一条sql语句分行输入,否则只能将一条sql语句完整输入

3. 服务管理常用命令:

CentOS 7系统下,我们推荐使用如下命令管理clickhouse-server的启停及状态查看
systemctl start clickhouse-serversystemctl stop clickhouse-serversystemctl status clickhouse-server4. ClickHouse的目录信息

/var/log/clickhouse-server/ # clickhouse-server的日志文件/etc/clickhouse-server/  #config.xml包含的是clickhouse全局的配置,users.xml包含用户相关的配置/var/lib/clickhouse/  #里面有许多文件,主要关注 data 和 metadata, data里面包含clickhouse的数据库 , metadata存放对应库表的元数据信息5. 示例

2.png 四、集群搭建

1. 集群节点信息


  • 192.168.200.91 cdh01
  • 192.168.200.98 cdh02
  • 192.168.200.99 cdh03
2. 搭建一个zookeeper集群(如果有则跳过)


  • 下载 zookeeper-3.4.8.tar.gz 安装包,放置到上面三台服务器相同目录下(/usr/local)
  • 进入到/usr/local目录下,解压tar包,tar -zxvf zookeeper-3.4.8.tar.gz
  • 进入zookeeper的conf目录,拷贝zoo_sample.cfg为zoo.cfg,cp zoo_sample.cfg zoo.cfg 修改zoo.cfg文件:
tickTime=2000dataDir=/opt/zookeeperclientPort=2181initLimit=10syncLimit=2server.1=cdh01:2888:3888server.2=cdh02:2888:3888server.3=cdh03:2888:3888

  • 三台服务器分别创建目录:mkdir /opt/zookeeper
  • 在/opt/zookeeper目录中创建一个名为myid的文件,三台服务器文件内容分别为1,2,3
  • 进入zookeeper的bin目录,启动zookeeper服务,每个节点都需要启动:./zkServer.sh start
  • 启动之后查看每个节点的状态 ./zkServer status , 其中有一个节点是leader,有两个节点是follower,证明zookeeper集群是部署成功的
  • 测试zookeeper连接:./zkCli.sh -server cdh01:2181
3. ClickHouse集群部署


  • 3.1 首先在三台服务器分别安装上clickhouse,安装参照如上单机方式。
下载的版本是22.3.2.2,以此版本为例,tgz包上传到同一个目录下,执行以下操作
tar -xzvf "clickhouse-common-static-22.3.2.2.tgz"sudo "clickhouse-common-static-22.3.2.2/install/doinst.sh" tar -xzvf "clickhouse-common-static-dbg-22.3.2.2.tgz"sudo "clickhouse-common-static-dbg-22.3.2.2/install/doinst.sh"tar -xzvf "clickhouse-client-22.3.2.2.tgz"sudo "clickhouse-client-22.3.2.2/install/doinst.sh" //这一步会让你填写默认的用户密码,可填可不填tar -xzvf "clickhouse-server-22.3.2.2.tgz"sudo "clickhouse-server-22.3.2.2/install/doinst.sh"

  • 3.2 修改配置文件: vim /etc/clickhouse-server/config.xml
<!-- 修改端口默认9000端口跟hdfs冲突) --><tcp_port>9002</tcp_port> <!-- 修改时区 -->  <timezone>Asia/Shanghai</timezone>   <!-- 配置监听网络 --><!--ip地址,配置成::可以被任意ipv4和ipv6的客户端连接, 需要注意的是,如果机器本身不支持ipv6,    这样配置是无法连接clickhouse的,这时候要改成0.0.0.0 --><listen_host>0.0.0.0</listen_host> <!-- 添加集群相关配置 --><remote_servers>    <!-- 3个分片1个副本 -->    <test_cluster_three_shards_internal_replication>        <shard>            <!-- 是否只将数据写入其中一个副本,默认为false,表示写入所有副本,                         在复制表的情况下可能会导致重复和不一致,所以这里要改为true,                         clickhouse分布式表只管写入一个副本,其余同步表的事情交给复制表和zookeeper来进行 -->            <internal_replication>true</internal_replication>            <replica>                <host>cdh01</host>                <port>9002</port>            </replica>        </shard>        <shard>            <internal_replication>true</internal_replication>            <replica>                <host>cdh02</host>                <port>9002</port>            </replica>        </shard>        <shard>            <internal_replication>true</internal_replication>            <replica>                <host>cdh03</host>                <port>9002</port>            </replica>        </shard>    </test_cluster_three_shards_internal_replication>    </remote_servers>  <!-- zookeeper配置 --><zookeeper>    <node>        <host>cdh01</host>        <port>2181</port>    </node>    <node>        <host>cdh02</host>        <port>2181</port>    </node>    <node>        <host>cdh03</host>        <port>2181</port>    </node></zookeeper> <!-- 复制标识的配置,也称为宏配置,这里唯一标识一个副本名称,每个实例配置都是唯一的 --><macros>    <!-- 当前节点在在集群中的分片编号,需要在集群中唯一,3个节点分别为01,02,03 -->    <shard>01</shard>    <!-- 副本的唯一标识,需要在单个分片的多个副本中唯一,3个节点分别为cdh01,cdh02,cdh03 -->    <replica>cdh01</replica></macros>除了直接修改/etc/clickhouse-server/config.xml文件外,我们也可以在/etc/clickhouse-server/config.d目录下创建一个名为metrika.xml的配置文件来配置remote_servers,zookeeper, macros。例如:
<?xml version="1.0"?><yandex>     <!—ZooKeeper配置,名称自定义,和config.xml 对应,一般就用这个名字就好 -->    <zookeeper-servers>        <node index="1">            <!—节点配置,可以配置多个地址-->            <host>127.0.0.1</host>            <port>2181</port>        </node>    </zookeeper-servers>    <clickhouse_remote_servers>  <!--远程服务名称 config.xml使用-->       ......    </clickhouse_remote_servers>    <macros>       ......     </macros></yandex>接着,在全局配置config.xml中使用<include_from>标签导入刚才定义的配置。
<zookeeper incl="zookeeper-servers" optional="true" /><remote_servers incl="clickhouse_remote_servers" optional="true" /><macros incl="macros" optional="true"/>  <include_from>/etc/clickhouse server/config.d/metrika.xml</include_from>这里就再不继续扩展。
4. 简单测试



    • . 首先各节点启动 : systemctl start clickhouse-server 查看运行状态 : systemctl status clickhouse-server




    • . 任意节点连接clickhouse : clickhouse-client --host=cdh02 --port=9002 -m
      查询集群 :

select cluster,shard_num,replica_num,host_name,port,user,is_local from system.clusters;SELECT version(); 4.png 五、配置和命令解释

1、配置文件中配置项的解释如下:


  • remote_servers
    clickhouse集群配置标签,固定写法。注意:这里与之前版本不同,之前要求必须以clickhouse开头,新版本不再需要。
  • clickhouse_cluster_3shards_1replicas:
    配置clickhouse的集群名称,可自由定义名称,注意集群名称中不能包含点号。这里代表集群中有3个分片,每个分片有1个副本。
    分片是指包含部分数据的服务器,要读取所有的数据,必须访问所有的分片。
    副本是指存储分片备份数据的服务器,要读取所有的数据,访问任意副本上的数据即可。
  • shard
    分片,一个clickhouse集群可以分多个分片,每个分片可以存储数据,这里 分片可以理解为clickhouse机器中的每个节点,1个分片只能对应1服务节点 。这里可以配置一个或者任意多个分片,在每个分片中可以配置一个或任意多个副本,不同分片可配置不同数量的副本。如果只是配置一个分片,这种情况下查询操作应该称为远程查询,而不是分布式查询。
  • replica
    每个分片的副本,默认每个分片配置了一个副本。也可以配置多个,副本的数量上限是由clickhouse节点的数量决定的。如果配置了副本,读取操作可以从每个分片里选择一个可用的副本。如果副本不可用,会依次选择下个副本进行连接。该机制利于系统的可用性。
  • internal_replication
    默认为false,写数据操作会将数据写入所有的副本,设置为true,写操作只会选择一个正常的副本写入数据,数据的同步在后台自动进行。
  • zookeeper
    配置的zookeeper集群,注意:与之前版本不同,之前版本是“zookeeper-servers”。
  • macros
    区分每台clickhouse节点的宏配置,macros中标签代表当前节点的分片号,标签代表当前节点的副本号,这两个名称可以随意取,后期在创建副本表时可以动态读取这两个宏变量。注意:每台clickhouse节点需要配置不同名称。
  • networks
    这里配置ip为“::/0”代表任意IP可以访问,包含IPv4和IPv6。
注意:允许外网访问还需配置/etc/clickhouse-server/config.xml。
listen_host 表示能监听的主机,:: 表示任意主机都可以访问<listen_host>::</listen_host>

  • clickhouse_compression
    MergeTree引擎表的数据压缩设置,min_part_size:代表数据部分最小大小。min_part_size_ratio:数据部分大小与表大小的比率。method:数据压缩格式。
2、在每台节点上启动/查看/重启/停止clickhouse服务

#每台节点启动Clickchouse服务service clickhouse-server start#每台节点查看clickhouse服务状态service clickhouse-server status#每台节点重启clickhouse服务service clickhouse-server restart#每台节点关闭Clikchouse服务service clickhouse-server stop3、客户端命令行参数

我们可以通过clickhouse client来连接启动的clickhouse服务,连接服务时,我们可以指定以下参数,这里指定的参数会覆盖默认值和配置文件中的配置。
参数解释--host, -h服务端的host名称, 默认是localhost。您可以选择使用host名称或者IPv4或IPv6地址。--port连接的端口,默认值:9000。注意HTTP接口以及TCP原生接口使用的是不同端口。--user, -u用户名。默认值:default。--password密码。默认值:空字符串。--query,-q使用非交互模式查询。--database, -d默认当前操作的数据库. 默认值:服务端默认的配置(默认是default)。--multiline, -m如果指定,允许多行语句查询(Enter仅代表换行,不代表查询语句完结)。--time, -t如果指定,非交互模式下会打印查询执行的时间到stderr中。--stacktrace如果指定,如果出现异常,会打印堆栈跟踪信息。--config-file配置文件的名称。--multiquery,-n使用非交互模式查询数据时,可以分号隔开多个sql语句。

  • --host,-h
    使用-h指定ip或者host名称时,需要在/etc/clickhouse-server/config.xml配置文件中114行配置:<listen_host>::</listen_host> ,代表可以任意ip可访问。配置完成后需要重启当期clickhouse节点生效。
clickhouse-client  -h node1ClickHouse client version 20.8.3.18.Connecting to node1:9000 as user default.Connected to ClickHouse server version 20.8.3 revision 54438.

  • --query,-q
clickhouse-client -q "show databases"_temporary_and_external_tablesdefaultsystem

  • --database, -d
clickhouse-client -d "system" -q "show tables"aggregate_function_combinatorsasynchronous_metric_logasynchronous_metricsbuild_options... ....

  • --multiline, -m
clickhouse-client -mnode1 select :-] 1+1:-] ;SELECT 1 + 1┌─plus(1, 1)─┐│          2 │└────────┘1 rows in set. Elapsed: 0.004 sec.

  • --time, -t
clickhouse-client -t -q "show databases"_temporary_and_external_tablesdefaultsystem0.004

  • --stacktrace
clickhouse-client --stacktraceClickHouse client version 20.8.3.18.Connecting to localhost:9000 as user default.Connected to ClickHouse server version 20.8.3 revision 54438.node1 use aaa;USE aaaReceived exception from server (version 20.8.3):Code: 81. DB::Exception: Received from localhost:9000. DB::Exception: Database aaa doesn't exist. Stack trace:0.Poco::Exception::Exception(std::__1 ... ....... ....

  • --multiquery,-n
[root@node1 ~]# clickhouse-client  -n -q "show databases;use default;"_temporary_and_external_tablesdefaultsystem4、数据类型

ClickHouse提供了许多数据类型,它们可以划分为基础类型、复合类型和特殊类型。我们可以在system.data_type_families表中检查数据类型名称以及是否区分大小写。这个表中存储了ClickHouse支持的所有数据类型。
select * from system.data_type_families limit 10;SELECT *FROM system.data_type_familiesLIMIT 10┌─name────────────┬─case_insensitive─┬─alias_to─┐│ Polygon          │                    0 │            ││ Ring              │                    0 │            ││ MultiPolygon    │                    0 │            ││ IPv6              │                    0 │            ││ IntervalSecond  │                    0 │            ││ IPv4              │                    0 │            ││ UInt32            │                   0 │             ││ IntervalYear     │                   0 │             ││ IntervalQuarter │                   0 │             ││ IntervalMonth    │                   0 │             │└─────────────────┴──────────────────┴──────────┘10 rows in set. Elapsed: 0.004 sec.下面介绍下常用的数据类型,ClickHouse与Mysql、Hive中常用数据类型的对比图如下:
MySQLHiveClickHouse(区分大小写)byteTINYINTInt8shortSMALLINTInt16intINTInt32longBIGINTInt64varcharSTRINGStringtimestampTIMESTAMPDateTimefloatFLOATFloat32doubleDOUBLEFloat64boolean参考:
https://clickhouse.com/docs/zh/getting-started/install/#from-sources
https://blog.csdn.net/mnasd/article/details/127648739
https://www.cnblogs.com/leolzi/p/16697369.html
https://www.cnblogs.com/lebaishi/p/15702020.html
https://www.cnblogs.com/hsyw/p/16839015.html
https://blog.csdn.net/qq_37056683/article/details/120993905
https://blog.csdn.net/wuxintdrh/article/details/119931658
https://blog.csdn.net/weixin_44087159/article/details/124477313
您需要登录后才可以回帖 登录 | 立即注册

Powered by CangBaoKu v1.0 小黑屋藏宝库It社区( 冀ICP备14008649号 )

GMT+8, 2024-10-18 16:52, Processed in 0.157500 second(s), 35 queries.© 2003-2025 cbk Team.

快速回复 返回顶部 返回列表