安装clickhouse

 

一、背景

提到大数据不得不提 Hadoop,当下的 Hadoop 已不仅仅是当初的HDFS + MR(MapReduce) 这么简单。基于 Hadoop 而衍生的 Hive、Pig、Spark、Presto、Impala 等一系列组件共同构成了 Hadoop 生态体系。Hadoop 生态为今天的大数据领域提供着稳定可靠的数据服务。

Hadoop 生态体系解决了大数据界的大部分问题,当然其也存在缺点。Hadoop 体系的最大短板在于数据处理时效性。基于 Hadoop 生态的数据处理场景大部分对时效要求不高,按照传统的做法一般是 T + 1 的数据时效。即 Trade + 1,数据产出在交易日 + 1 天。

ClickHouse 的产生就是为了解决大数据量处理的时效性。独立于Hadoop生态圈。

二、概述

Clickhouse由俄罗斯yandex公司开发。专为在线数据分析而设计。Yandex是俄罗斯搜索引擎公司。官方提供的文档表名,ClickHouse 日处理记录数“十亿级”。

1.特性

  • 采用列式存储。
  • 数据压缩。
  • 基于磁盘的存储,大部分列式存储数据库为了追求速度,会将数据直接写入内存,按时内存的空间往往很小。
  • CPU 利用率高,在计算时会使用机器上的所有 CPU 资源。
  • 支持分片,并且同一个计算任务会在不同分片上并行执行,计算完成后会将结果汇总。
  • 支持SQL,SQL 几乎成了大数据的标准工具,使用门槛较低。
  • 支持联表查询。
  • 支持实时更新。
  • 自动多副本同步。
  • 支持索引。
  • 分布式存储查询。

2.性能

根据官方提供的数据,性能表现大致如下:

  • 低延迟:对于数据量(几千行,列不是很多)不是很大的短查询,如果数据已经被载入缓存,且使用主码,延迟在50MS左右。
  • 并发量:虽然 ClickHouse 是一种在线分析型数据库,也可支持一定的并发。当单个查询比较短时,官方建议100 Queries / second。
  • 写入速度:在使用 MergeTree 引擎的情况下,写入速度大概是 50 - 200M / s,如果按照 1K一条记录来算,大约每秒可写入50000 ~ 200000条记录每秒。如果每条记录比较小的话写入速度会更快。
  • 自己测试时,1亿条数据的文件2.2GB,导入Clickhouse用时24秒,如下图:

 

 

  • 查询统计时,用时0.185秒,如下图:

 

3.接口

  • 对外提供Http,JDBC两种接口方式
  • 对内各模块间使用TCP连接通信。
  • Hadoop 体系是一种离线系统,一般很难支持即席查询。ClickHouse 可以支持即席查询。
  • Hadoop 体系一般不支持实时更新,都采用批量更新和写入。ClickHouse 支持实时数据更新。
  • Hadoop 体系一般采用行记录存储,数据查询需要扫描所有列,当表很宽时会扫描很多用不到的列。ClickHouse 是列式存储,查询只需要加载相关的列。

4.与hadoop 区别

分区新特性:

  • 在老版本的 ClickHouse 中只支持按月分区。
  • 在 1.1.54310 版之后,支持用户自定义分区。
  • 可以通过 system.parts 表查看表的分区情况。
  • 整型:JInt8,UInt16,UInt32,UInt64,Int8,Int16,Int32,Int64。释:(范围U开头-2^N/2~2^N-1;非U开头0~2^N-1)
  • 枚举类型:Enum8,Enum16。释:(Enum('hello'=1,'test'=-1),Enum是有符号的整型映射的,因此负数也是可以的)
  • 字符串型:FixedString(N),String。释:(N是最大字节数,不是字符长度,如果是UTF8字符串,那么就会占3个字节,GBK会占2字节;String可以用来替换VARCHAR,BLOB,CLOB等数据类型)
  • 时间类型:Date,DateTime。
  • 数组类型:Array(T)。释:(T是一个基本类型,包括arry在内,官方不建议使用多维数组)元祖数:Tuple
  • 结构:Nested(name1 Type1,name2 Type2,...)。释:(类似一种map的结构)
    • AggregatingMergeTree
    • Buffer
    • CollapsingMergeTree
    • Distributed
    • External data for query processing
    • File(InputFormat)
    • Join
    • Kafka
    • Log
    • MaterializedView
    • Memory
    • Merge
    • Virtual columns
    • MergeTree
    • Null
    • ReplacingMergeTree
    • Data replication
    • ReplicatedMergeTree
    • ReplicatedCollapsingMergeTree
    • ReplicatedAggregatingMergeTree
    • ReplicatedSummingMergeTree
    • Creating replicated tables
    • Recovery after failures
    • Recovery after complete data loss
    • Converting from MergeTree to ReplicatedMergeTree
    • Converting from ReplicatedMergeTree to MergeTree
    • Recovery when metadata in the ZooKeeper cluster is lost or damaged
    • Resharding
    • Set
    • SummingMergeTree

5.数据类型

三、引擎

1.引擎列表

2.引擎介绍

TinyLog引擎:

TinyLog 是最简单的表引擎, 它将数据保存到磁盘。每个字段都以单独压缩文件形式保存,当写入数据时, 数据追加到文件的末尾。

并发数据访问不限制任何形式:

l  如果你同时对此表进行读写,如从表中读取数据的同时写入数据到此表,那么读操作将会报错。

l  如果同时并行往表里写入数据,那么数据将损坏。

使用此表的标准方式是一次写入:一写多读的应用场景。查询在单个流中执行。换句话说,本引擎适合很多小表操作(100万行左右的表)。如果你有很多小表,那么适合于使用本引擎,它比Log更简单(使用文件更小)。当你有大量小表的时候,你可以使用 TinyLog 引擎来存储这些数据,和进行下一步查询服务。另外,索引不支持 TinyLog 引擎。TinyLog 表经常作为中间表,用于数据的微批量处理。

Log引擎:

Log 区别于 TinyLog ,小文件的标记 "marks" 保留在列文件中. 这些标记写到每个数据块中 ,包含偏移量,在哪开始读文件,跳过特定的行数. 此机制可以多线程并行读取表中的数据. 对于并发数据访问, 读操作能够同时执行,而写操作将阻塞读操作,或者读写操作互相阻塞。 Log 引擎不支持索引。 与之类似的是, 如果写入到数据表失败, 则表将损坏, 从表中读取数据将返回错误。 Log 引擎适合存储临时数据, 一次写入表, 或者用于测试环境。

Memory引擎:

内存表引擎保存在内存中, 数据处于未压缩状态。数据保存格式与读取数据的格式相同。换句话说, 从本表中读取数据是完全相同的。 并发数据访问是同步的。无锁访问: 读写数据操作互相不受影响,但数据索引不支持,读取数据是并行执行的。因为无磁盘读写, 压缩/解压缩, 和序列化/反序列化操作,因此单个SQL语句查询可达到 10 GB/秒。 (在大多数情况下, Memory 引擎的数据处理效率和 MergeTree 的引擎相差无几)。当重启服务器后, 数据会在表中清空,不存在。正常情况下, 内存表引擎不经常使用,它可用于小数据量(1亿条左右)的高速读取数据场景或用于测试环境。内存引擎也可用于外部数据的临时表查询和实现 GLOBAL IN 操作。

MergeTree引擎:

MergeTree 引擎支持索引,通过主键和日期来构建索引, 同时提供 数据的实时更新能力。这是目前 ClickHouse处理能力最好的引擎。注意:不要和 Merge 引擎相混淆。

Kafka

表引擎的后台为Kafka,Kafka 作为流数据平台具备三个关键能力:

l  它让你发布和订阅记录数据流。它类似消息队列或者企业级消息总线。

l  它让你以容错的方式来存储记录数据流。

l  它让你以流式的方式处理记录数据流。

Distributed

分布式引擎本身不存储数据,但允许在多个服务器上进行分布式查询处理。 读取是自动并行的。 在读取数据期间,使用远程服务器上的表索引(如果有的话)。 分布式引擎接受参数:服务器配置文件中的集群名称,远程数据库的名称,远程表的名称以及(可选)分片键。

四、单机版部署步骤

1.操作系统

操作系统为Centos 7.3。

2.安装Clickhouse依赖包

由于测试平台为虚拟机,有些rpm包安装没有安装,所以需要安装。虚拟机只需安装unixODBC-devel-2.3.1-11.el7.x86_64.rpm,或者在线yum源安装即可。

如图所示:

 

3.安装Clickhouse相关组件

然后安装Clickhouse相关软件如clickhouse-client.x86_64-1.1.54236-4.el7、clickhouse-compressor.x86_64-1.1.54236-4.el7、clickhouse-debuginfo.x86_64-1.1.54236-4.el7、clickhouse-server.x86_64-1.1.54236-4.el7、clickhouse-server-common.x86_64-1.1.54236-4.el7等。

用yum源安装如图所示:

 

4.启动Clickhouse服务

service clickhouse-server start

如图所示:

 

5.客户端登录Clickhouse

启动服务后,没有修改配置,在本地登录,执行clickhouse-client命令进入clickhouse交互界面,如下图所示:

 

创建数据库:

 

创建表:

 

插入数据:

 

五、总结

Clickhouse是内存计算的列式存储数据仓库,目前只支持Ubuntu、Centos等操作系统。相对于Hive来说,查询速度特别快,这是由于Hive依赖于HDFS和Mapreduce来实现功能,而Clickhouse是独立的实现逻辑,并且Clickhouse是基于内存计算的实时数据查询、更新。所以Clickhouse是具有Spark、Impala等功能的即时响应数据仓库。未来潜力巨大。

但从单机版安装来看,Clickhouse类似于Mysql,包括软件安装、服务启停、进入退出客户端等,比较容易上手。但对于性能优化、底层架构的了解还需要更进一步的学习,目前也没有官方给出Clickhouse的机构图。

posted @ 2019-10-14 11:21  IT界的小鱼  阅读(893)  评论(0)    收藏  举报