0
点赞
收藏
分享

微信扫一扫

ClickHouse安装配置及表引擎使用


ClickHouse安装配置及表引擎使用案例

准备

  1. 集群安排

192.168.175.212 master
192.168.175.213 slave1
192.168.175.214 slave2

安装zookeeper

#1 切换到指定目录

cd /root/softwares/

# 2 下载二进制文件

wget https://dlcdn.apache.org/zookeeper/zookeeper-3.5.9/apache-zookeeper-3.5.9-bin.tar.gz

#3 解压

tar zxf apache-zookeeper-3.5.9-bin.tar.gz

#4 配置

1 创建dataDir目录,比如:

mkdir –p /apps/zookeeper/data/zookeeper

2 进入zookeeper的conf目录,拷贝zoo_sample.cfg为zoo.cfg。并在配置文件里加入如下内容:

tickTime=2000
initLimit=10
syncLimit=5
dataDir=/apps/zookeeper/data/zookeeper
clientPort=2182
autopurge.purgeInterval=0
globalOutstandingLimit=200
server.1=master:2888:3888
server.2=slave1:2888:3888
server.3=slave2:2888:3888

:1 myid可以从0开始,当前演示的是从1开始。

3 配置myid

echo 1 >> /apps/zookeeper/data/zookeeper/myid

注:同理配置其它节点。

4 配置环境变量 /etc/profile

export ZOOKEEPER_HOME=/apps/zookeeper
export PATH=$PATH:$ZOOKEEPER_HOME/bin

source /etc/profile

5 启动zookeeper

每个节点上启动zookeeper,命令见下:

zkServer.sh start

6 查看zookeeper状态

zkServer.sh status

各节点安装clickhouse

在各个节点上安装clickhouse服务和客户端。

1 安装clickhouse

单节点安装clickhouse

# 安装dirmngr

sudo apt-get install dirmngr

# 加入key

sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv E0C56BD4

# 更新clickhouse源

echo "deb http://repo.clickhouse.tech/deb/stable/ main/" | sudo tee \

    /etc/apt/sources.list.d/clickhouse.list

sudo apt-get update

# 安装clickhouse服务和客户端

sudo apt-get install -y clickhouse-server clickhouse-client

#启动服务

sudo service clickhouse-server start

# 客户端连接

clickhouse-client

  1. 创建数据目录、临时目录、用户文件

mkdir -p /data/clickhouse /data/clickhouse/tmp/ /data/clickhouse/user_files/

  1. 配置config文件

在/etc/clickhouse-server/config.xml里进行如下配置:

<log>/var/log/clickhouse-server/clickhouse-server.log</log>

<path>/data/clickhouse/</path>

<tmp_path>/data/clickhouse/tmp/</tmp_path>

<user_files_path>/data/clickhouse/user_files/</user_files_path>

<errorlog>/var/log/clickhouse-server/clickhouse-server.err.log</errorlog>

修改IP 127.0.0.1为当前节点的IP

打开 <listen_host>::</listen_host> 的注释以使得客户端可以外部访问。

  1. 目录赋权

chown -R clickhouse:clickhouse /data

5     启动服务

/etc/init.d/clickhouse-server start

  1.   通过客户端连接

clickhouse-client --password --port 9000

配置clickhouse集群

1 定义metrika.xml

在/etc/clickhouse-server/config.d内定义集群配置:

<yandex>
<clickhouse_remote_servers>
<!--集群名称,clickhouse支持多集群的模式-->
    <clickhouse_cluster>
    <!--定义分片节点,这里我指定3个分片,每个分片只有1个副本,也就是它本身-->
        <shard>
             <internal_replication>true</internal_replication>
            <replica>
                <host>server1</host>
                <port>9000</port>
            </replica>
        </shard>
        <shard>
            <replica>
                <internal_replication>true</internal_replication>
                <host>server2</host>
                <port>9000</port>
            </replica>
        </shard>
        <shard>
            <internal_replication>true</internal_replication>
            <replica>
                <host>server3</host>
                <port>9000</port>
            </replica>
        </shard>
    </clickhouse_cluster>
</clickhouse_remote_servers>
<!--zookeeper集群的连接信息-->
<zookeeper-servers>
  <node index="1">
    <host>server1</host>
    <port>2181</port>
  </node>
  <node index="2">
    <host>server1</host>
    <port>2182</port>
  </node>
  <node index="3">
    <host>server1</host>
    <port>2183</port>
  </node>
</zookeeper-servers>
<!--定义宏变量,后面需要用-->
<macros>
    <replica>server1</replica>
</macros>
<!--不限制访问来源ip地址-->
<networks>
   <ip>::/0</ip>
</networks>
<!--数据压缩方式,默认为lz4-->
<clickhouse_compression>
<case>
  <min_part_size>10000000000</min_part_size>
                                            
  <min_part_size_ratio>0.01</min_part_size_ratio>                                                                                                                                       
  <method>lz4</method>
</case>
</clickhouse_compression>
</yandex>

注:这里的macros需要修改成每个节点的IP

2 配置引用

在config.xml里追加对metrika.xml的引用。

<!--引入metrika.xml-->

<include_from>/etc/clickhouse-server/config.d/metrika.xml</include_from>

#引用Zookeeper配置的定义

<zookeeper incl="zookeeper-servers" optional="true" />

3 启动clickhouse集群

每个节点上启动clickhouse服务。

sudo clickhouse start

  1. 验证

#查询Zookeeper根目录

select * from system.zookeeper where path = '/'

#查询ClickHouse目录

select * from system.zookeeper where path = '/clickhouse'

表引擎简介

表引擎是clickhouse的一大特色。可以说, 表引擎决定了如何存储标的数据。包括:

1)数据的存储方式和位置,写到哪里以及从哪里读取数据

2)支持哪些查询以及如何支持。

3)并发数据访问。

4)索引的使用(如果存在)。

5)是否可以执行多线程请求。

6)数据复制参数。

使用

#1 ReplicatedMergeTree

#2 前置条件

在config里定义宏指令,即macros标签。

/etc/clickhouse-server/config.xml内打开注释或者定义如下标签:

vi /etc/clickhouse-server/config.xml
:set nu
:814
    <macros>
        <shard>01</shard>
        <replica>host01</replica>
    </macros>

注:如果不配置那么在引用宏指令建表时会报错,详见:

ClickHouse安装配置及表引擎使用_database

#3 准备建表语句

准备个建表语句,脚本内容见下:

create table tb_person (
    id UInt32,
    name String,
    sal Decimal(16,2),
    create_time  Datetime
 ) engine=ReplicatedMergeTree('/clickhouse/tables/{shard}/tb_person','{replica}')
 partition by toYYYYMMDD(create_time)
   primary key (id)
   order by (id);

注: {shard}里的“shard”和{replica} 里的“replica”必须和config.xml里的macros下标签名匹配上。

#4 执行建表语句

分别在各个节点里执行同样的建表语句(默认端口9000)

clickhouse-client --user default -d default --port=9099 --multiquery <./x.sql

#5 插入数据

在一个节点上插入数据。

   INSERT INTO tb_person values(1,'Shenl',10000.50,now())

   INSERT INTO tb_person values(2,'Liang',20000.85,now())

#6 其它节点上验证

启动客户端验证数据

clickhouse-client --user default -d default --port=9099

ClickHouse安装配置及表引擎使用_大数据_02

#7 zookeeper里验证

zookeeper客户端查看tb_person所在表节点

ls2 /clickhouse/tables/01

ClickHouse安装配置及表引擎使用_zookeeper_03

Tinylog

最简单的表引擎,用于将数据存储在磁盘上。每列都存储在单独的压缩文件中。写入时,数据将附加到文件末尾。并发数据访问不受任何限制:
 1 如果同时从表中读取并在不同的查询中写入,则读取操作将抛出异常
 2如果同时写入多个查询中的表,则数据将被破坏。

这种表引擎的典型用法是 write-once:首先只写入一次数据,然后根据需要多次读取。查询在单个流中执行。换句话说,此引擎适用于相对较小的表(建议最多100万行)。

该表引擎不支持索引。

示例:

create table tb_person_tinylog ( id UInt32,name String,sal Decimal(16,2), create_time  Datetime) engine=TinyLog;

注:该模式下不支持PARTITION、PRIMARY Key和ORDER BY

Mysql表引擎

MySQL 引擎可以对存储在远程 MySQL 服务器上的数据执行 SELECT 查询。

#1 创建mysql表引擎

use default

CREATE TABLE default.department2 (deptno UInt32,dname String,loc String ) ENGINE = MySQL('192.168.0.101:3306', 'ShenLiang2025', 'dept', 'root', 'root1234');

#2 在clickhouse里查询

select * from department2;

Mysql物化表引擎

Clickhouse 22.2版本验证不通过。该参数是实验性,不建议生产里使用。

当前验证版本为Clickhouse 20.8.2.3,mysql5.7。

# 1 ck里查看版本

ClickHouse安装配置及表引擎使用_大数据_04

# 2 插件为mysql_native_password

show variables like '%auth%';

ClickHouse安装配置及表引擎使用_apache_05

#3 Bin log相关参数打开

ClickHouse安装配置及表引擎使用_xml_06

#4 用户开放访问权限,至少clickhouse所在的IP能访问,这里是所有机器都可以。

ClickHouse安装配置及表引擎使用_database_07

#5 开启物化视图参数(选项)。

SET allow_experimental_database_materialize_mysql = 1;

#5 clickhouse里创建MaterializeMySQL

CREATE DATABASE Ck_mysqlbinlog ENGINE = MaterializeMySQL('127.0.0.1:3306', 'shenl', 'root', 'root1234');

ClickHouse安装配置及表引擎使用_zookeeper_08

#5 验证

#1 插入 insert

Mysql里插入一条记录

INSERT INTO tb_people values(1,'Shenl',25);

Ck里查询

select * from tb_people

ClickHouse安装配置及表引擎使用_database_09

#2 更新update

ClickHouse安装配置及表引擎使用_zookeeper_10

在mysql里再次将age更新为28,再进入ck里查询。

select a.*,_version,_sign from tb_people a where a.id = 1;

ClickHouse安装配置及表引擎使用_database_11

 由此可见ck取版本号最大的。

ClickHouse安装配置及表引擎使用_database_12

#3 删除 delete

Mysql里删除id为1的记录

delete from tb_people where id=1;

ck里查询:

ClickHouse安装配置及表引擎使用_apache_13

 加_version,_sign查询时会发现age为28的那条记录的_sign被标记为-1,即删除。

ClickHouse安装配置及表引擎使用_大数据_14

#4 修改字段名

Mysql里修改name字段为fullname

alter table tb_people change name fullname varchar(30);

进入ck里查询,则会报错

ClickHouse安装配置及表引擎使用_大数据_15

:支持添加列与删除列,在mysql添加一列,随后再删除 

举报

相关推荐

0 条评论