ClickHouse 使用

目录

 

 

依赖环境:

安装

表引擎

TinyLog

memory

merge

MergeTree

Distributed

功能

kafka增量同步数据到clickhouse

clickhouse管理hdfs数据

hive表迁移到clickhouse


 

依赖环境:

                      zookeeper

安装

   (注意:每台节点都需要操作)

  安装包链接:https://pan.baidu.com/s/10k9Ym8x0IRSZmN98ChVwoQ       提取码:8uoq

  1.  指定路径上传rpm
  2. sudo yum install -y libtool
  3. sudo yum install -y *unixODBC*
  4. sudo yum search libicul
  5. sudo yum install libicu.x86_64       #安装clickhouse缺少依赖libicudata.so.50()(64bit),所以需要安装该依赖
  6. sudo rpm -ivh *rpm    #解压安装
  7. sudo vim /etc/clickhouse-server/config.xml  #默认配置文件安装的位置 
  8. 修改配置文件
    node01 
    sudo vim  /etc/metrika.xml
    
    <yandex>
     <!-- 集群配置 -->
     <clickhouse_remote_servers>
         <bip_ck_cluster>
             <shard>
                 <internal_replication>true</internal_replication>
                 <replica>
                     <host>node01</host>
                     <port>9001</port>
                 </replica>
             </shard>
             <shard>
                 <internal_replication>true</internal_replication>
                 <replica>
                     <host>node02</host>
                     <port>9001</port>
                 </replica>
             </shard>        
      <shard>
                 <internal_replication>true</internal_replication>
                 <replica>
                     <host>node03</host>
                     <port>9001</port>
                 </replica>
             </shard>
         </bip_ck_cluster>
     </clickhouse_remote_servers>
     ​
     <!-- 本节点副本,不同的机器配置不同 -->
     <macros>  
       <replica>node01</replica>  
     </macros>  
     ​
     <!-- ZK -->
     <zookeeper-servers>
       <node index="1">
         <host>node01</host>
         <port>2181</port>
       </node>
       
       <node index="2">
         <host>node02</host>
         <port>2181</port>
       </node>
       
       <node index="3">
         <host>node03</host>
         <port>2181</port>
       </node>
     </zookeeper-servers>
     ​
         <!-- 监听网络 -->
         <networks>
            <ip>::/0</ip>
         </networks>
     <!-- 数据压缩算法 -->
         <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>
    

 

10.sudo chmod 777 /var/lib/clickhouse/

11.systemctl start clickhouse-server   启动

 

查看节点状况:  ps -ef | grep clickhouse      

如果需要查看日志信息可去:/var/log/clickhouse-server

 

表引擎

clickhouse-client --port 9001

TinyLog

用于将数据存储在磁盘上,每列都存储在单独的压缩文件中。写入时,数据将附加到文件末尾。,该引擎没有并发控制,如果同时从表中读取和写入数据,则读取操作将抛异常,如果同时写入多个查询的表,则数据将被破坏。 write-once

create table f1(a UInt16,b String)Engine=TinyLog;
insert into f1 (a,b) values(1,'abc')

默认数据保存到了/var/lib/clickhouse/data/..db/tableName

.bin 表示压缩过的对应的列的数据

sizes.json 中记录了每个 *.bin 文件的大小

注意:  本表f1只能在所在节点查到。

 

memory

数据以未压缩的形式    直接保存在内存中。简单查询下有很高的性能(超过10G/s)  除了用于测试,一般用的地方不多。

 

merge

本身不存储数据,但可用于同时从多个其他的表总读取数据,

举例:

create table v1 (id UInt16, name String) ENGINE=TinyLog;
create table v2 (id UInt16, name String) ENGINE=TinyLog;
create table v3 (id UInt16, name String) ENGINE=TinyLog;

--向表中插入数据
insert into v1(id, name) values (1, 'first');
  insert into v2(id, name) values (2, 'second');
  insert into v3(id, name) values (3, 'three');

-创建t表 ,把defalut数据库中所有以v开头的表连接起来
create table v(id UInt16, name String) ENGINE=Merge(currentDatabase(), '^v');

 

MergeTree

当你有巨量数据要插入到表中,你要高效地一批批写入数据片段,并希望这些数据片段在后台按照一定规则合并。相比在插入时不断修改(重写)数据进存储,这种策略会高效很多。

CREATE TABLE [IF NOT EXISTS] [db.]table_name [ON CLUSTER cluster]
 (
    name1 [type1] [DEFAULT|MATERIALIZED|ALIAS expr1],
    name2 [type2] [DEFAULT|MATERIALIZED|ALIAS expr2],
    ...
 ) ENGINE [=] MergeTree(date-column [, sampling_expression], (primary, key), index_granularity)


date-column:类型为 Date 的列名。ClickHouse 会自动依据这个列创建分区。
sampling_expression :采样表达式。
(primary, key) :主键。类型为Tuple(),主键可以是任意表达式构成的元组(通常是列名称的元组).
index_granularity :索引粒度。即索引中相邻”标记”间的数据行数。设为 8192 可以适用大部分场景。
 

举例:

--创建基于MergeTree的引擎表
create table mt_table (date  Date, id UInt8, name String) ENGINE=MergeTree(date, (id, name), 8192);
--插入数据
insert into mt_table values ('2019-05-01', 1, 'zhangsan');
insert into mt_table values ('2019-06-01', 2, 'lisi');
insert into mt_table values ('2019-05-03', 3, 'wangwu');

 

 

 

Distributed

分布式引擎,本身不存储数据, 但可以在多个服务器上进行分布式查询。 读是自动并行的。读取时,远程服务器表的索引(如果有的话)会被使用。

语法

 CREATE TABLE [IF NOT EXISTS] [db.]table_name [ON CLUSTER cluster]
 (
    name1 [type1] [DEFAULT|MATERIALIZED|ALIAS expr1],
    name2 [type2] [DEFAULT|MATERIALIZED|ALIAS expr2],
    ...
 ) ENGINE [=] Distributed(cluster_name, database, table [, sharding_key])


cluster_name :服务器配置文件中的集群名,在/etc/metrika.xml中配置的
database :数据库名
table :表名
sharding_key :数据分片键

举例:
 

在每个节点都创建该表。

create table table1(id UInt16, name String) ENGINE=TinyLog;

任意在某个节点添加数据

insert into table1 (id, name) values (1, 'zhangsan');

insert into table1 (id, name) values (2, 'lisi'); 

create table distributed_table(id UInt16, name String) ENGINE=Distributed(bip_ck_cluster, default, table1, id);

可以看到每个节点分布的数据差不多。

功能

kafka增量同步数据到clickhouse

1.创建topic

./kafka-topics.sh --create --partitions 3 --replication-factor 1 --topic ck --zookeeper node01:2181,node02:2181,node03:2181 

2.创建ck表关联kafka
CREATE TABLE queue (timestamp UInt64,level String,message String) ENGINE = Kafka SETTINGS kafka_broker_list ='node02:9092',kafka_topic_list = 'ck',kafka_group_name = 'consumer_ck',kafka_format = 'JSONEachRow',kafka_num_consumers = 3;

  1. kafka_broker_list:指定kafka集群地址
  2. kafka_topic_list:topic 列表
  3. kafka_group_name:Kafka 消费组名称
  4. kafka_format:消息体格式,使用与 SQL 部分的 FORMAT 函数相同表示方法,例如 JSONEachRow
  5. kafka_num_consumers:消费者线程数

3.向topic写入数据:

./kafka-console-producer.sh --broker-list node02:6667 --topic ck

>{"timestamp":153000000,"level":"1","message":"hello ck"}

kafka发送消息:

查看结果:

 

 

clickhouse管理hdfs数据

1.创建clickhouse表

CREATE TABLE hdfs_engine_table (id Int32, name String, age Int32) ENGINE=HDFS('hdfs://node01:8020/other_storage/*', 'CSV'); ​

2.准备数据: file.txt

1,zhangsan,20
2,lisi,29
3,wangwu,25
4,zhaoliu,35
5,tianqi,35
6,kobe,40

3.上传到hdfs

hdfs  dfs -mkdir -p /other_storage 

hdfs dfs -put file.txt /other_storage

4.查看clickhouse

 

hive表迁移到clickhouse

waterdrop使用spark的引擎来实现数据的抽取和传输到目的地。我们可以通过waterfrop

实现hive导入到clickhouse.

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

刘狗

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值