ClickHouse优秀软件编程技巧

ClickHouse——安装部署

2023-02-24  本文已影响0人  小波同学

前言

ClickHouse是俄罗斯的Yandex于2016年开源的一个用于联机分析(OLAP:Online Analytical Processing)的列式数据库管理系统(DBMS:Database Management System) , 主要用于在线分析处理查询(OLAP),能够使用SQL查询实时生成分析数据报告。 ClickHouse的全称是Click Stream,Data WareHouse,简称ClickHouse。

ClickHouse是一个完全的列式分布式数据库管理系统(DBMS),允许在运行时创建表和数据库,加载数据和运行查询,而无需重新配置和重新启动服务器,支持线性扩展,简单方便,高可靠性,容错。它在大数据领域没有走 Hadoop 生态,而是采用 Local attached storage 作为存储,这样整个 IO 可能就没有 Hadoop 那一套的局限。它的系统在生产环境中可以应用到比较大的规模,因为它的线性扩展能力和可靠性保障能够原生支持 shard + replication 这种解决方案。它还提供了一些 SQL 直接接口,有比较丰富的原生 client。

优点

缺点

应用场景

一、系统要求

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.2AArch64PowerPC64LE架构的处理器上运行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"

二、安装前准备

在 /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 查看设置结果
vim /etc/selinux/config
SELINUX=disabled
systemctl status firewalld.service
systemctl stop firewalld.service
root用户执行:
yum install -y libtool
yum install -y *unixODBC*
grep -q sse4_2 /proc/cpuinfo && echo "SSE 4.2 supported" || echo "SSE 4.2 not
supported"

三、快速安装(单机)

本次安装操作系统为CentOS 7

1. 登陆官网 https://clickhouse.tech/#quick-start

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

sudo yum install -y yum-utils
sudo yum-config-manager --add-repo https://packages.clickhouse.com/rpm/clickhouse.repo
sudo 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-server
systemctl stop clickhouse-server
systemctl status clickhouse-server

4. ClickHouse的目录信息

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

5. 示例

四、集群搭建

1. 集群节点信息

2. 搭建一个zookeeper集群(如果有则跳过)

tickTime=2000
dataDir=/opt/zookeeper
clientPort=2181
initLimit=10
syncLimit=2
server.1=cdh01:2888:3888
server.2=cdh02:2888:3888
server.3=cdh03:2888:3888

3. 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"
<!-- 修改端口:(默认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. 简单测试

select cluster,shard_num,replica_num,host_name,port,user,is_local from system.clusters;
SELECT version();

五、配置和命令解释

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

注意:允许外网访问还需配置/etc/clickhouse-server/config.xml。

listen_host 表示能监听的主机,:: 表示任意主机都可以访问
<listen_host>::</listen_host>

2、在每台节点上启动/查看/重启/停止clickhouse服务

#每台节点启动Clickchouse服务
service clickhouse-server start

#每台节点查看clickhouse服务状态
service clickhouse-server status

#每台节点重启clickhouse服务
service clickhouse-server restart

#每台节点关闭Clikchouse服务
service clickhouse-server stop

3、客户端命令行参数

我们可以通过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语句。
clickhouse-client  -h node1
ClickHouse client version 20.8.3.18.
Connecting to node1:9000 as user default.
Connected to ClickHouse server version 20.8.3 revision 54438.
clickhouse-client -q "show databases"
_temporary_and_external_tables
default
system
clickhouse-client -d "system" -q "show tables"
aggregate_function_combinators
asynchronous_metric_log
asynchronous_metrics
build_options
... ....
clickhouse-client -m

node1 :) select 
:-] 1+1
:-] ;

SELECT 1 + 1
┌─plus(1, 1)─┐
│          2 │
└────────┘
1 rows in set. Elapsed: 0.004 sec.
clickhouse-client -t -q "show databases"
_temporary_and_external_tables
default
system
0.004
clickhouse-client --stacktrace
ClickHouse 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 aaa
Received 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 ... ....
... ....
[root@node1 ~]# clickhouse-client  -n -q "show databases;use default;"
_temporary_and_external_tables
default
system

4、数据类型

ClickHouse提供了许多数据类型,它们可以划分为基础类型、复合类型和特殊类型。我们可以在system.data_type_families表中检查数据类型名称以及是否区分大小写。这个表中存储了ClickHouse支持的所有数据类型。

select * from system.data_type_families limit 10;
SELECT *
FROM system.data_type_families
LIMIT 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中常用数据类型的对比图如下:

MySQL Hive ClickHouse(区分大小写)
byte TINYINT Int8
short SMALLINT Int16
int INT Int32
long BIGINT Int64
varchar STRING String
timestamp TIMESTAMP DateTime
float FLOAT Float32
double DOUBLE Float64
boolean

参考:
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

上一篇下一篇

猜你喜欢

热点阅读