ClickHouse技术干货

第1章 ClickHouse概述1.1 什么是ClickHouseClickHouse是一个开源的,面向列的分析数据库,由Yandex为OLAP和大数据用例创建。 ClickHouse对实时查询处理的支持使其适用于需要亚秒级分析结果的应用程序。 ClickHouse的查询语言是SQL的一种方言,它支持强大的声明性查询功能,同时为最终用户提供熟悉度和较小的学习曲线。面向列的数据库将记录存储在按列而不是行分组的块中。通过不加载查询中不存在的列的数据,面向列的数据库在完成查询时花费的时间更少。因此,对
摘要由CSDN通过智能技术生成

第1章 ClickHouse概述

1.1 什么是ClickHouse

ClickHouse是一个开源的,面向列的分析数据库,由Yandex为OLAP和大数据用例创建。 ClickHouse对实时查询处理的支持使其适用于需要亚秒级分析结果的应用程序。 ClickHouse的查询语言是SQL的一种方言,它支持强大的声明性查询功能,同时为最终用户提供熟悉度和较小的学习曲线。

面向列的数据库将记录存储在按列而不是行分组的块中。通过不加载查询中不存在的列的数据,面向列的数据库在完成查询时花费的时间更少。因此,对于某些工作负载(如OLAP),这些数据库可以比传统的基于行的系统更快地计算和返回结果。

在线分析处理(OLAP)系统允许组织大量数据并执行复杂查询。它们能够管理数PB的数据并快速返回查询结果。通过这种方式,OLAP对于数据科学和业务分析等领域的工作非常有用

1.2 ClickHouse与HBase对比

比较项

ClickHouse

HBase

特点

1.速度快,性能上超过了市面上大部分的列式存储数据库,相比传统的数据要快100-1000倍
2.功能多,支持类SQL查询,支持繁多库函数,支持数组(Array)和嵌套数据结构,支持数据库异地复制部署
3.不需要Hadoop生态支持

1.HBase适合存储PB级别的海量数据,能在几十到百毫秒内返回数据
2.极易扩展,一个是基于上层处理能力(RegionServer)的扩展,一个是基于存储的扩展(HDFS)
3.能获得高并发、低延迟的服务
4.可以指定任意多的列,在列数据为空的情况下,是不会占用存储空间的

存储模式

不单单是一个列式数据库,也是数据库管理系统

数据有序存储、主键索引、稀疏索引、数据Sharding、数据Partitioning、TTL、主备复制

1.table组成 Table = rowkey + family + column + timestamp + value
2.HBase中数据 列是由列簇来组织的,每一个列簇都会有对应的一个数据结构,抽象为Store,一个Store代表一个列簇
3.每个 Store 又由一个 memStore 和 0 至多个 Store File 组成
4.Store File 以 HFile 格式保存在 HDFS 上

数据压缩

LZ4和ZSTD,LZ4在速度上会更快,但是压缩率较低,ZSTD正好相反

GZ(GZIP),SNAPPY,LZO,LZ4

存储方式

传统磁盘上的系统

基于Hadoop(HDFS),数据存储在Hadoop上

架构

支持单节点、单副本、多节点、多副本多种架构 

HBase中的组件包括Client、Zookeeper、HMaster、HRegionServer、HRegion、Store、MemStore、StoreFile、HFile、HLog等

部署模式

单节点、集群模式(依赖Zookeeper)

单节点、集群模式(依赖Hadoop、Zookeeper)

分区

指定列分区(按天/周/月分区)

根据rowkey,提前规划region(分区)数目,达到避免热点现象

sql支持

支持基于SQL的查询语言与SQL标准兼容,不支持窗口函数和相关子查询

不支持,可基于第三方框架支持(phoenix)

集群扩展能力

不能自动感知集群拓扑变化,也不能自动 balance 数据(可配置权重指定大部分数据写入新的节点)

可新增节点来对集群进行扩展,balance命令去自动调节

事务支持

不支持

不支持

优点

1.为了高效的使用CPU,数据不仅仅按列存储,同时还按向量进行处理
2.数据压缩空间大,减少IO;处理单查询高吞吐量每台服务器每秒最多数十亿行;
3.索引非B树结构,不需要满足最左原则;只要过滤条件在索引列中包含即可;即使在使用的数据不在索引中,由于各种并行处理机制ClickHouse全表扫描的速度也很快
4.写入速度非常快,50-200M/s,对于大量的数据更新非常适用

1.支持半结构化或非结构化数据,HBase支持动态添加列
2.记录很稀疏,为null的列不会被存储节省了空间提高了读性能
3.多版本号数据,值能够有随意数量的版本号值
4.WAL解决高可用,支持PB级数据,put性能高
5.适用于插入比查询操作更频繁的情况

缺点

1.不支持事务,不支持真正的删除/更新;
2.不支持高并发,官方建议qps为100,可以通过修改配置文件增加连接数,但是在服务器足够好的情况下;
3.避免逐行insert或小批量的insert,update,delete操作

1.单一RowKey固有的局限性决定了它不可能有效地支持多条件查询
2.不适合于大范围扫描查询
3.不直接支持 SQL 的语句查询

第2章 安装

2.1 单机模式

2.1.1 从官方仓库安装

#使用脚本安装yum源

curl -s https://packagecloud.io/install/repositories/altinity/clickhouse/script.rpm.sh

 

#yum 安装 server 以及 client

yum install -y clickhouse-server clickhouse-client

 

#查看是否安装完成

sudo yum list installed 'clickhouse*'

 

#开机启动clickhouse-server

systemctl enable clickhouse-server

 

#启动clickhouse-server

systemctl start clickhouse-server

2.2 分布式集群安装

2.2.1 数据分片(Sharding)

ClickHouse支持单机模式,也支持分布式集群模式。在分布式模式下,ClickHouse会将数据分为多个分片,并且分布到不同节点上。不同的分片策略在应对不同的SQL Pattern时,各有优势。ClickHouse提供了丰富的sharding策略,让业务可以根据实际需求选用。

1)random随机分片:写入数据会被随机分发到分布式集群中的某个节点上。

2)constant固定分片:写入数据会被分发到固定一个节点上。

3)column value分片:按照某一列的值进行hash分片。

4)自定义表达式分片:指定任意合法表达式,根据表达式被计算后的值进行hash分片。

数据分片,让ClickHouse可以充分利用整个集群的大规模并行计算能力,快速返回查询结果。

更重要的是,多样化的分片功能,为业务优化打开了想象空间。比如在hash sharding的情况下,JOIN计算能够避免数据shuffle,直接在本地进行local join; 支持自定义sharding,可以为不同业务和SQL Pattern定制最适合的分片策略;利用自定义sharding功能,通过设置合理的sharding expression可以解决分片间数据倾斜问题等。

另外,sharding机制使得ClickHouse可以横向线性拓展,构建大规模分布式集群,从而具备处理海量数据的能力

2.2.2 在三台机器上面执行单机安装模式所有步骤

2.2.3 三台机器修改配置文件config.xml

[root@5gdd2~]# vim /etc/clickhouse-server/config.xml

 

<listen_host>::</listen_host>

<!-- <listen_host>::1</listen_host> -->

<!-- <listen_host>127.0.0.1</listen_host> -->

 

[root@5iicu~]# vim /etc/clickhouse-server/config.xml

 

<listen_host>::</listen_host>

<!-- <listen_host>::1</listen_host> -->

<!-- <listen_host>127.0.0.1</listen_host> -->

 

[root@5iicv~]# vim /etc/clickhouse-server/config.xml

<listen_host>::</listen_host>

<!-- <listen_host>::1</listen_host> -->

<!-- <listen_host>127.0.0.1</listen_host> -->

 

2.2.4 在三台机器的etc目录下新建metrika.xml文件

[root@5iicv~]# vim /etc/metrika.xml

添加如下内容:

<?xml version="1.0"?>

<yandex>

<clickhouse_remote_servers>

    <myck> <!--集群名称,自定义 每个分片只有1个副本-->

        <shard> <!--分片1-->

             <internal_replication>true</internal_replication>

            <replica>

                <host>5iicv</host>

                <port>9000</port>

            </replica>

        </shard>

        <shard> <!--分片2-->

            <replica>

                <internal_replication>true</internal_replication>

                <host>5iicu</host>

                <port>9000</port>

            </replica>

        </shard>

        <shard> <!--分片3-->

            <internal_replication>true</internal_replication>

            <replica>

                <host>5gdd2</host>

                <port>9000</port>

            </replica>

        </shard>

    </myck>

</clickhouse_remote_servers>

 

 

<zookeeper-servers> <!--配置zookeeper集群地址-->

  <node index="1">

    <host>5iicv</host>

    <port>2181</port>

  </node>

 

  <node index="2">

    <host>5iicu</host>

    <port>2181</port>

  </node>

  <node index="3">

    <host>5gdd2</host>

    <port>2181</port>

  </node>

</zookeeper-servers>

 

<macros>

    <replica>5iicv</replica>

</macros>

 

 

<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>

注意:上面标红的地方需要根据机器不同去修改

3.3.5 三台机器安装zookeeper

1. 下载zk安装包

下载地址:http://archive.apache.org/dist/zookeeper/zookeeper-3.4.9/

2.  zk配置 zookeeper-3.4.9/conf/zoo.cfg

tickTime=2000

initLimit=10

syncLimit=5

dataDir=/root/apps/zookeeper-3.5.8/dataDir

clientPort=2182

autopurge.purgeInterval=0

globalOutstandingLimit=200

server.1=host1:2888:3888

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值