热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

clickhouse离线安装_数仓ClickHouse的快速入门

关注上方“数据挖掘工程师”,选择星标,关键时间,第一时间送达!ClickHouse简介ClickHouse是一个用于联机分析

关注上方“数据挖掘工程师”,选择星标,

关键时间,第一时间送达!

ec871129ebb84e142f511f7d47934fb5.png

ClickHouse简介

ClickHouse是一个用于联机分析(OLAP)的列式数据库管理系统(DBMS)。ClickHouse最初是一款名为Yandex.Metrica的产品,主要用于WEB流量分析。ClickHouse的全称是Click Stream,Data WareHouse,简称ClickHouse。

ClickHouse非常适用于商业智能领域,除此之外,它也能够被广泛应用于广告流量、Web、App流量、电信、金融、电子商务、信息安全、网络游戏、物联网等众多其他领域。ClickHouse具有以下特点:

  • 支持完备的SQL操作

  • 列式存储与数据压缩

  • 向量化执行引擎

  • 关系型模型(与传统数据库类似)

  • 丰富的表引擎

  • 并行处理

  • 在线查询

  • 数据分片

    ClickHouse作为一款高性能OLAP数据库,存在以下不足。

  • 不支持事务。

  • 不擅长根据主键按行粒度进行查询(虽然支持),故不应该把ClickHouse当作Key-Value数据库使用。

  • 不擅长按行删除数据(虽然支持)

单机安装

下载RPM包

本文安装方式选择的是离线安装,可以在下面的链接中下载对应的rpm包,也可以直接百度云下载

-- rpm包地址
https://packagecloud.io/Altinity/clickhouse
-- 百度云地址
链接:https://pan.baidu.com/s/1pFR66SzLvPYMfcpuPJww5A
提取码:gh5a

在我们安装的软件中包含这些包:

  • clickhouse-client 包,包含 clickhouse-client 应用程序,它是交互式ClickHouse控制台客户端。
  • clickhouse-common 包,包含一个ClickHouse可执行文件。
  • clickhouse-server 包,包含要作为服务端运行的ClickHouse配置文件。

总共包含四个RPM包,

clickhouse-client-19.17.4.11-1.el7.x86_64.rpm
clickhouse-common-static-19.17.4.11-1.el7.x86_64.rpm
clickhouse-server-19.17.4.11-1.el7.x86_64.rpm
clickhouse-server-common-19.17.4.11-1.el7.x86_64.rpm

尖叫提示:如果安装过程中,报错:依赖检测失败,表示缺少依赖包

可以先手动安装libicu-50.2-4.el7_7.x86_64.rpm依赖包

关闭防火墙

## 查看防火墙状态。
systemctl status firewalld
## 临时关闭防火墙命令。重启电脑后,防火墙自动起来。
systemctl stop firewalld
## 永久关闭防火墙命令。重启后,防火墙不会自动启动。
systemctl disable firewalld

系统要求

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.2 supported

要在不支持SSE 4.2或具有AArch64或PowerPC64LE体系结构的处理器上运行ClickHouse,应该通过源构建ClickHouse进行适当的配置调整。

安装RPM包

## 将rpm包上传至/opt/software目录下
## 执行如下命令进行安装
[root@cdh06 software]# rpm -ivh *.rpm
错误:依赖检测失败:
        libicudata.so.50()(64bit) 被 clickhouse-common-static-19.17.4.11-1.el7.x86_64 需要
        libicui18n.so.50()(64bit) 被 clickhouse-common-static-19.17.4.11-1.el7.x86_64 需要
        libicuuc.so.50()(64bit) 被 clickhouse-common-static-19.17.4.11-1.el7.x86_64 需要
        libicudata.so.50()(64bit) 被 clickhouse-server-19.17.4.11-1.el7.x86_64 需要
        libicui18n.so.50()(64bit) 被 clickhouse-server-19.17.4.11-1.el7.x86_64 需要
        libicuuc.so.50()(64bit) 被 clickhouse-server-19.17.4.11-1.el7.x86_64 需要
## 上面安装报错,缺少相应的依赖包,
## 需要下载相对应的依赖包
## 下载libicu-50.2-4.el7_7.x86_64.rpm进行安装即可

1f7663cc0e6932694871024ec1912792.png

查看安装信息

目录结构

  • /etc/clickhouse-server:服务端的配置文件目录,包括全局配置config.xml和用户配置users.xml等。

  • /etc/clickhouse-client:客户端配置,包括conf.d文件夹和config.xml文件。

  • /var/lib/clickhouse:默认的数据存储目录(通常会修改默认路径配置,将数据保存到大容量磁盘挂载的路径)。

  • /var/log/clickhouse-server:默认保存日志的目录(通常会修改路径配置,将日志保存到大容量磁盘挂载的路径)。

配置文件

  • /etc/security/limits.d/clickhouse.conf:文件句柄数量的配置

[root@cdh06 clickhouse-server]# cat /etc/security/limits.d/clickhouse.conf 
clickhouse      soft    nofile  262144
clickhouse      hard    nofile  262144

该配置也可以通过config.xml的max_open_files修改

 
    

  • /etc/cron.d/clickhouse-server:cron:定时任务配置,用于恢复因异常原因中断的ClickHouse服务进程,其默认的配置如下。

[root@cdh06 cron.d]# cat /etc/cron.d/clickhouse-server
#*/10 * * * * root (which service > /dev/null 2>&1 && (service clickhouse-server condstart ||:)) || /etc/init.d/clickhouse-server condstart > /dev/null 2>&1

可执行文件

最后是一组在/usr/bin路径下的可执行文件:

  • clickhouse:主程序的可执行文件。

  • clickhouse-client:一个指向ClickHouse可执行文件的软链接,供客户端连接使用。

  • clickhouse-server:一个指向ClickHouse可执行文件的软链接,供服务端启动使用。

  • clickhouse-compressor:内置提供的压缩工具,可用于数据的正压反解。

84cdf0b66c451626922ddda4918d7f8a.png

启动/关闭服务

## 启动服务
[root@cdh06 ~]# service clickhouse-server start
Start clickhouse-server service: Path to data directory in /etc/clickhouse-server/config.xml: /var/lib/clickhouse/
DONE
## 关闭服务
[root@cdh06 ~]# service clickhouse-server stop

客户端连接

[root@cdh06 ~]# clickhouse-client 
ClickHouse client version 19.17.4.11.
Connecting to localhost:9000 as user default.
Connected to ClickHouse server version 19.17.4 revision 54428.

cdh06 :) show databases;

SHOW DATABASES

┌─name────┐
│ default │
│ system  │
└─────────┘

2 rows in set. Elapsed: 0.004 sec. 

基本操作

创建数据库

  • 语法

CREATE DATABASE [IF NOT EXISTS] db_name [ON CLUSTER cluster] [ENGINE = engine(...)]

  • 例子

CREATE DATABASE IF NOT EXISTS tutorial

默认情况下,ClickHouse使用的是原生的数据库引擎Ordinary(在此数据库下可以使用任意类型的表引擎,在绝大多数情况下都只需使用默认的数据库引擎)。当然也可以使用Lazy引擎和MySQL引擎,比如使用MySQL引擎,可以直接在ClickHouse中操作MySQL对应数据库中的表。假设MySQL中存在一个名为clickhouse的数据库,可以使用下面的方式连接MySQL数据库。

-- --------------------------语法-----------------------------------
CREATE DATABASE [IF NOT EXISTS] db_name [ON CLUSTER cluster]
ENGINE = MySQL('host:port', ['database' | database], 'user', 'password')
-- --------------------------示例------------------------------------
CREATE DATABASE mysql_db ENGINE = MySQL('192.168.200.241:3306', 'clickhouse', 'root', '123qwe');
-- ---------------------------操作-----------------------------------
cdh06 :) use mysql_db;
cdh06 :) show tables;

SHOW TABLES

┌─name─┐
│ test │
└──────┘

1 rows in set. Elapsed: 0.005 sec. 

cdh06 :) select * from test;

SELECT *
FROM test

┌─id─┬─name──┐
│  1 │ tom   │
│  2 │ jack  │
│  3 │ lihua │
└────┴───────┘

3 rows in set. Elapsed: 0.047 sec. 

创建表

  • 语法

CREATE TABLE [IF NOT EXISTS] [db.]table_name [ON CLUSTER cluster]
(
    name1 [type1] [DEFAULT|MATERIALIZED|ALIAS expr1] [compression_codec] [TTL expr1],
    name2 [type2] [DEFAULT|MATERIALIZED|ALIAS expr2] [compression_codec] [TTL expr2],
    ...
) ENGINE = engine

  • 示例

-- 注意首字母大写
-- 建表
create table test(
    id Int32,
    name String
) engine=Memory;

上面命令创建了一张内存表,即使用Memory引擎。表引擎决定了数据表的特性,也决定了数据将会被如何存储及加载。Memory引擎是ClickHouse最简单的表引擎,数据只会被保存在内存中,在服务重启时数据会丢失。

集群安装

安装步骤

上面介绍了单机安装的基本步骤和ClickHouse客户端的基本使用。接下来将介绍集群的安装方式。ClickHouse集群安装非常简单,首先重复上面步骤,分别在其他机器上安装ClickHouse,然后再分别配置一下/etc/clickhouse-server/config.xml和/etc/metrika.xml两个文件即可。值得注意的是,ClickHouse集群的依赖于Zookeeper,所以要保证先安装好Zookeeper集群,zk集群的安装步骤非常简单,本文不会涉及。本文演示三个节点的ClickHouse集群安装,具体步骤如下:

  • 首先,重复单机安装的步骤,分别在另外两台机器安装ClickHouse

  • 然后,在每台机器上修改**/etc/clickhouse-server/config.xml**文件


    0.0.0.0listen_host>

    尖叫提示(1):

    在禁用了ipv6时,如果使用::配置,会报如下错误

    Application: DB::Exception: Listen [::]:8123 failed: Poco::Exception. Code: 1000, e.code() =0, e.displayText() = DNS error: EAI: -9

    尖叫提示(2):

    ClickHouse默认的tcp端口号是9000,如果存在端口冲突,可以在**/etc/clickhouse-server/config.xml**文件中修改 端口号9001

  • 最后在/etc下创建metrika.xml文件,内容如下,下面配置是不包含副本的分片配置,我们还可以为分片配置多个副本


        

        
        
            
            
                
                    cdh04host>
                    9001port>
                replica>
            shard>
            
                
                    cdh05host>
                    9001port>
                replica>
            shard>
            
                
                    cdh06host>
                    9001port>
                replica>
            shard>
        cluster_3shards_1replicas>
    clickhouse_remote_servers>
     

        
            cdh02host>
            2181port>
        node>
        
            cdh03host>
            2181port>
        node>
        
            cdh06host>
            2181port>
        node>
    zookeeper-servers>


        01shard>
        cdh04replica>
    macros>    
    yandex>

  • 分别在各自的机器上启动clickhouse-server

    # service clickhouse-server start

  • (可选配置)修改**/etc/clickhouse-client/config.xml**文件

    由于clickhouse-client默认连接的主机是localhost,默认连接的端口号是9000,由于我们修改了默认的端口号,所以需要修改客户端默认连接的端口号,在该文件里添加如下内容:

     9001port>

    当然也可以不用修改,但是记得在使用客户端连接时,加上**--port 9001**参数指明要连接的端口号,否则会报错:

    Connecting to localhost:9000 as user default.
    Code: 210. DB::NetException: Connection refused (localhost:9000)

基本操作

验证集群

在完成上述配置之后,在各自机器上启动clickhouse-server,并开启clickhouse-clent

// 启动server
# service clickhouse-server start
// 启动客户端,-m参数支持多行输入
# clickhouse-client -m

可以查询系统表验证集群配置是否已被加载:

cdh04 :) select cluster,shard_num,replica_num,host_name,port,user from system.clusters;

a7521c869250897ad2942ef7e7076d90.png

接下来再来看一下集群的分片信息(宏变量):分别在各自机器上执行下面命令:

cdh04 :) select * from system.macros;
┌─macro───┬─substitution─┐
│ replica │ cdh04        │
│ shard   │ 01           │
└─────────┴──────────────┘

cdh05 :) select * from system.macros;
┌─macro───┬─substitution─┐
│ replica │ cdh05        │
│ shard   │ 02           │
└─────────┴──────────────┘

cdh06 :) select * from system.macros;
┌─macro───┬─substitution─┐
│ replica │ cdh06        │
│ shard   │ 03           │
└─────────┴──────────────┘

分布式DDL操作

默认情况下,CREATE、DROP、ALTER、RENAME操作仅仅在当前执行该命令的server上生效。在集群环境下,可以使用ON CLUSTER语句,这样就可以在整个集群发挥作用。

比如创建一张分布式表:

CREATE TABLE IF NOT EXISTS user_cluster ON CLUSTER cluster_3shards_1replicas
(
    id Int32,
    name String
)ENGINE = Distributed(cluster_3shards_1replicas, default, user_local,id);

Distributed表引擎的定义形式如下所示:关于ClickHouse的表引擎,后续文章会做详细解释。

Distributed(cluster_name, database_name, table_name[, sharding_key])

各个参数的含义分别如下:

  • cluster_name:集群名称,与集群配置中的自定义名称相对应。
  • database_name:数据库名称
  • table_name:表名称
  • sharding_key:可选的,用于分片的key值,在数据写入的过程中,分布式表会依据分片key的规则,将数据分布到各个节点的本地表。

尖叫提示:

创建分布式表是读时检查的机制,也就是说对创建分布式表和本地表的顺序并没有强制要求

同样值得注意的是,在上面的语句中使用了ON CLUSTER分布式DDL,这意味着在集群的每个分片节点上,都会创建一张Distributed表,这样便可以从其中任意一端发起对所有分片的读、写请求。

创建完成上面的分布式表时,在每台机器上查看表,发现每台机器上都存在一张刚刚创建好的表。

接下来就需要创建本地表了,在每台机器上分别创建一张本地表:

CREATE TABLE IF NOT EXISTS user_local 
(
    id Int32,
    name String
)ENGINE = MergeTree()
ORDER BY id
PARTITION BY id
PRIMARY KEY id;

我们先在一台机器上,对user_local表进行插入数据,然后再查询user_cluster表

-- 插入数据
cdh04 :) INSERT INTO user_local VALUES(1,'tom'),(2,'jack');
-- 查询user_cluster表,可见通过user_cluster表可以操作所有的user_local表
cdh04 :) select * from user_cluster;
┌─id─┬─name─┐
│  2 │ jack │
└────┴──────┘
┌─id─┬─name─┐
│  1 │ tom  │
└────┴──────┘

接下来,我们再向user_cluster中插入一些数据,观察user_local表数据变化,可以发现数据被分散存储到了其他节点上了。

-- 向user_cluster插入数据
cdh04 :)  INSERT INTO user_cluster VALUES(3,'lilei'),(4,'lihua'); 
-- 查看user_cluster数据
cdh04 :) select * from user_cluster;
┌─id─┬─name─┐
│  2 │ jack │
└────┴──────┘
┌─id─┬─name──┐
│  3 │ lilei │
└────┴───────┘
┌─id─┬─name─┐
│  1 │ tom  │
└────┴──────┘
┌─id─┬─name──┐
│  4 │ lihua │
└────┴───────┘

-- 在cdh04上查看user_local
cdh04 :) select * from user_local;
┌─id─┬─name─┐
│  2 │ jack │
└────┴──────┘
┌─id─┬─name──┐
│  3 │ lilei │
└────┴───────┘
┌─id─┬─name─┐
│  1 │ tom  │
└────┴──────┘
-- 在cdh05上查看user_local
cdh05 :) select * from user_local;
┌─id─┬─name──┐
│  4 │ lihua │
└────┴───────┘

总结

本文首先介绍了ClickHouse的基本特点和使用场景,接着阐述了ClickHouse单机版与集群版离线安装步骤,并给出了ClickHouse的简单使用案例。本文是ClickHouse的一个简单入门,在接下来的分享中,会逐步深入探索ClickHouse的世界。

特别推荐

Java极客们都在关注「JavaGeek」,专注分享Java技术干货,包括多线程、JVM、Spring Boot、Spring Cloud、Intellij IDEA、Dubbo、Zookeeper、Redis、架构设计、微服务等。关注并回复「Java学习」获得 1024G Java学习资料020d654ce3f3443acdd3b8dc58ae805c.png推荐阅读

40000字笔记!HiveSQL再不懂来找我!

内部泄露版!互联网大厂的薪资和职级一览好文!10年数据分析老司机的深度思考!VS Code、Atom、Sublime Text:谁才是真正的编辑器之王?太强了!这个 Jupyter notebook 离线工具可以用一辈子!经典的SparkSQL/Hive-SQL/MySQL面试-练习题8 种常见的大数据分析模型“干货学习,三连



推荐阅读
  • 本文介绍了adg架构设置在企业数据治理中的应用。随着信息技术的发展,企业IT系统的快速发展使得数据成为企业业务增长的新动力,但同时也带来了数据冗余、数据难发现、效率低下、资源消耗等问题。本文讨论了企业面临的几类尖锐问题,并提出了解决方案,包括确保库表结构与系统测试版本一致、避免数据冗余、快速定位问题等。此外,本文还探讨了adg架构在大版本升级、上云服务和微服务治理方面的应用。通过本文的介绍,读者可以了解到adg架构设置的重要性及其在企业数据治理中的应用。 ... [详细]
  • 一次上线事故,30岁+的程序员踩坑经验之谈
    本文主要介绍了一位30岁+的程序员在一次上线事故中踩坑的经验之谈。文章提到了在双十一活动期间,作为一个在线医疗项目,他们进行了优惠折扣活动的升级改造。然而,在上线前的最后一天,由于大量数据请求,导致部分接口出现问题。作者通过部署两台opentsdb来解决问题,但读数据的opentsdb仍然经常假死。作者只能查询最近24小时的数据。这次事故给他带来了很多教训和经验。 ... [详细]
  • 本文介绍了互联网思维中的三个段子,涵盖了餐饮行业、淘品牌和创业企业的案例。通过这些案例,探讨了互联网思维的九大分类和十九条法则。其中包括雕爷牛腩餐厅的成功经验,三只松鼠淘品牌的包装策略以及一家创业企业的销售额增长情况。这些案例展示了互联网思维在不同领域的应用和成功之道。 ... [详细]
  • Sleuth+zipkin链路追踪SpringCloud微服务的解决方案
    在庞大的微服务群中,随着业务扩展,微服务个数增多,系统调用链路复杂化。Sleuth+zipkin是解决SpringCloud微服务定位和追踪的方案。通过TraceId将不同服务调用的日志串联起来,实现请求链路跟踪。通过Feign调用和Request传递TraceId,将整个调用链路的服务日志归组合并,提供定位和追踪的功能。 ... [详细]
  • 熟练掌握Spring Cloud,终于成为Java工程师的面试门槛 ... [详细]
  • 寻求更强大的身份和访问管理(IAM)平台的企业正在转向云,并接受身份即服务(IDaaS)的灵活性。要为IAM选择正确的场外解决方案,业务管理人员和IT专业人员必须在实施之前评估安全 ... [详细]
  • 我一直都有记录信息的习惯,不知是从什么时候开始,大约是在工作后不久。如今还真有点庆幸从那时开始记了点东西,当然是电子版的,写 ... [详细]
  • 本文介绍了Web学习历程记录中关于Tomcat的基本概念和配置。首先解释了Web静态Web资源和动态Web资源的概念,以及C/S架构和B/S架构的区别。然后介绍了常见的Web服务器,包括Weblogic、WebSphere和Tomcat。接着详细讲解了Tomcat的虚拟主机、web应用和虚拟路径映射的概念和配置过程。最后简要介绍了http协议的作用。本文内容详实,适合初学者了解Tomcat的基础知识。 ... [详细]
  • CentOS 7部署KVM虚拟化环境之一架构介绍
    本文介绍了CentOS 7部署KVM虚拟化环境的架构,详细解释了虚拟化技术的概念和原理,包括全虚拟化和半虚拟化。同时介绍了虚拟机的概念和虚拟化软件的作用。 ... [详细]
  • 众筹商城与传统商城的区别及php众筹网站的程序源码
    本文介绍了众筹商城与传统商城的区别,包括所售产品和玩法不同以及运营方式不同。同时还提到了php众筹网站的程序源码和方维众筹的安装和环境问题。 ... [详细]
  • 分享css中提升优先级属性!important的用法总结
    web前端|css教程css!importantweb前端-css教程本文分享css中提升优先级属性!important的用法总结微信门店展示源码,vscode如何管理站点,ubu ... [详细]
  • 本文介绍了关系型数据库和NoSQL数据库的概念和特点,列举了主流的关系型数据库和NoSQL数据库,同时描述了它们在新闻、电商抢购信息和微博热点信息等场景中的应用。此外,还提供了MySQL配置文件的相关内容。 ... [详细]
  • 基于移动平台的会展导游系统APP设计与实现的技术介绍与需求分析
    本文介绍了基于移动平台的会展导游系统APP的设计与实现过程。首先,对会展经济和移动互联网的概念进行了简要介绍,并阐述了将会展引入移动互联网的意义。接着,对基础技术进行了介绍,包括百度云开发环境、安卓系统和近场通讯技术。然后,进行了用户需求分析和系统需求分析,并提出了系统界面运行流畅和第三方授权等需求。最后,对系统的概要设计进行了详细阐述,包括系统前端设计和交互与原型设计。本文对基于移动平台的会展导游系统APP的设计与实现提供了技术支持和需求分析。 ... [详细]
  • 服务网关与流量网关
    一、为什么需要服务网关1、什么是服务网关传统的单体架构中只需要开放一个服务给客户端调用,但是微服务架构中是将一个系统拆分成多个微服务,如果没有网关& ... [详细]
  • k8s+springboot+Eureka如何平滑上下线服务
    k8s+springboot+Eureka如何平滑上下线服务目录服务平滑上下线-k8s版本目录“上篇介绍了springboot+Euraka服务平滑上下线的方式,有部分小伙伴反馈k ... [详细]
author-avatar
mobiledu2502872877
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有