大数据-133 - ClickHouse 基础概述 全面了解

ops/2024/9/20 2:06:16/ 标签: 大数据, clickhouse, java, 分布式, flink, spark

点一下关注吧!!!非常感谢!!持续更新!!!

目前已经更新到了:

  • Hadoop(已更完)
  • HDFS(已更完)
  • MapReduce(已更完)
  • Hive(已更完)
  • Flume(已更完)
  • Sqoop(已更完)
  • Zookeeper(已更完)
  • HBase(已更完)
  • Redis (已更完)
  • Kafka(已更完)
  • Spark(已更完)
  • Flink(正在更新!)

章节内容

上节我们完成了如下的内容:

  • Flink SQL
  • Flink SQL Hello World

请添加图片描述

简要概述

ClickHouse 是一个快速开源的OLAP数据库管理系统,它是面向列的,允许使用SQL查询实时生成分析报告。

随着物联网IOT时代的来临,IOT设备感知和报警存储数据越来越大,有用的价值数据需要数据分析师去分析。大数据分析成了非常重要的环节,开源也为大数据分析工程师提供了十分丰富的工具,但这也增加了开发者选择适合的工具的难度,尤其是新入行的开发者来说。

框架的多样化和复杂度成了很大的难题,例如:Kafka、HDFS、Spark、Hive等等组合才能产生最后的分析结果,把各种开源框架、工具、库、平台人工整合到一起所需的工作之复杂,是大数据领域开发和数据分析师常有的抱怨之一,也就是他们支持大数据分析简化和统一化的首要原因。

在这里插入图片描述
从业务维度来分析,用户需求会反向促使技术发展。

OLTP

OLTP:On-Lineage Transaction Processing:联机事务处理过程。

应用场景

  • ERP:Enterprise Resource Planning 企业资源计划
  • CRM:Customer Relationship Management 客户关系管理

流程审批、数据录入、填报等

具体特点

线下工作线上化,数据保存在各自的系统中,互不相同(数据孤岛)

OLAP

OLAP:On-Line Analytical Processing:联机分析系统

分析报表、分析决策等。

应用场景

方案1:数仓

在这里插入图片描述
如上图所示,数据实时写入HBase,实时的数据更新也在HBase完成,为了应对OLAP需求,我们定时(通常是T+1或者T+H)将HBase数据写成静态的文件(如:Parquet)导入到 OLAP引擎(如HDFS,比较常见的是Impala操作Hive)。这一架构又能满足随机读写,又可以支持OLAP分析的场景,但是有如下缺点:

  • 架构复杂:从架构上看,数据在HBase、消息队列、HDFS间流转,涉及到的环节过多,运维成本也很高,并且每个环节需要保证高可用,都需要维护多个副本,存储空间也有一定的浪费。最后数据在多个系统上,对数据安全策略、监控都提出了挑战。
  • 时效性低:数据从HBase导出静态文件是周期性的,一般这个周期一天(或者一小时),有时效性上不是很高。
  • 难以应对后续的更新:真实场景中,总会有数据是延迟到达的,如果这些数据之前已经从HBase导出到HDFS,新到的变更数据更难以处理了,一个方案是把原有数据应用上新的变更后重写一遍,但这代价又很高。

方案2:ClickHouse、Kudu

实现方案2就是 ClickHouse、Kudu

发展历史
Yandex在2016年6月15日开源了一个数据分析数据库,叫做ClickHouse,这对保守的俄罗斯人来说是个特大事件。更让人惊讶的是,这个列式数据库的跑分要超过很多流行的商业MPP数据库软件,例如Vertica。如果你没有Vertica,那你一定听过Michael Stonebraker,2014年图灵奖的获得者,PostgreSQL和Ingres发明者(Sybase和SQL Server都是继承Ingres而来的),Paradigm4和SciDB的创办者。Micheal StoneBraker于2005年创办的Vertica公司,后来该公司被HP收购,HP Vertica成为MPP列式存储商业数据库的高性能代表,Facebook就购买了Vertica数据用于用户行为分析。

ClickHouse技术演变之路

Yandex公司在2011年上市,它的核心产品是搜索引擎。
我们知道,做搜索引擎的公司营收非常依赖流量和在线广告,所以做搜索引擎公司一般会并行推出在线流量分析产品,比如说百度的百度统计,Google的Google Analytics等,Yandex的Yandex.Metricah。ClickHouse就是在这种背景下诞生的。

  • ROLAP:传统关系型数据库OLAP,基于MySQL的MyISAM表引擎
  • MOLAP:借助物化视图的形式实现数据立方体,预处理的结果存在HBase这类高性能的分布式数据库中
  • HOLAP:R和M的结合体H
  • ROLAP:ClickHouse

ClickHouse 的核心特点

超高的查询性能

  • 列式存储:只读取查询所需的列,减少了磁盘 I/O。
  • 向量化计算:批量处理数据,提高了 CPU 使用效率。
  • 数据压缩:高效的压缩算法,降低了存储成本。

水平可扩展性

  • 分布式架构:支持集群部署,轻松处理 PB 级数据。
  • 线性扩展:通过增加节点提升性能,无需停机。

实时数据写入

  • 高吞吐量:每秒可插入数百万行数据。
  • 低延迟:数据写入后立即可查询,满足实时分析需求。

丰富的功能支持

  • 多样的数据类型:支持从基本类型到复杂类型的数据。
  • 高级 SQL 特性:窗口函数、子查询、JOIN 等。
  • 物化视图:预计算和存储查询结果,进一步提升查询性能。

典型应用场景

  • 用户行为分析:电商、游戏、社交平台的实时用户行为跟踪。
  • 日志和监控数据存储:处理服务器日志、应用程序日志和性能监控数据。
  • 商业智能(BI):支持复杂的报表和数据分析需求。

请添加图片描述

部署与运维

  • 单机部署:适合测试和小规模应用。
  • 集群部署:用于生产环境,可通过 Zookeeper 进行协调。
  • 运维工具:提供了监控和管理工具,如 clickhouse-client、clickhouse-copier。

最佳实践

  • 数据分区:根据时间或其他字段进行分区,提高查询效率。
  • 索引优化:使用主键和采样键,加速数据定位。
  • 硬件配置:充分利用多核 CPU、高速磁盘和大内存。

ClickHouse支持特性

ClickHouse具体有哪些特性呢:

  • 真正的面向列的DBMS
  • 数据高效压缩
  • 磁盘存储的数据
  • 多核并行处理
  • 在多个分布式服务器上分布式处理
  • SQL语法支持
  • 向量化引擎
  • 实时数据更新
  • 索引
  • 适合在线查询
  • 支持近似预估计算
  • 支持嵌套的数据结构
  • 支持数组作为数据类型
  • 支持限制查询复杂性以及配额
  • 复制数据和对数据完整性的支持

ClickHouse和其他对比

商业OLAP

例如:

  • HP Vertica
  • Actian the Vector

区别:

  • ClickHouse 是开源而且免费的

云解决方案

例如:

  • 亚马逊 RedShift
  • 谷歌 BigQuery

区别:

  • ClickHouse 可以使用自己机器部署,无需云付费

Hadoop生态

例如:

  • Cloudera Impala
  • Spark SQL
  • Facebook Presto
  • Apache Drill

区别:

  • ClickHouse 支持实时的高并发系统
  • ClickHouse不依赖于Hadoop生态软件和基础
  • ClickHouse支持分布式机房的部署

开源OLAP数据库

例如:

  • InfiniDB
  • MonetDB
  • LucidDB

区别:

  • 应用规模小
  • 没有在大型互联网服务中蚕尝试

非关系型数据库

例如:

  • Druid
  • Apache Kylin

区别:

  • ClickHouse 可以支持从原始数据直接查询,支持类SQL语言,提供了传统关系型数据的便利。

真正的面向列DBMS

如果你想要查询速度变快:

  • 减少数据扫描范围
  • 减少数据传输时的大小
    在一个真正的面向列的DBMS中,没有任何无用的信息在值中存储。
    例如:必须支持定长数值,以避免在数值旁边存储长度数字,10亿个Int8的值应该大约消耗1GB的未压缩磁盘空间,否则这将强烈影响CPU的使用。由于解压的速度(CPU的使用率)主要取决于未压缩的数据量,即使在未压缩的情况下,紧凑的存储数据也是非常重要的。

因为有些系统可以单独存储独列的值,但由于其他场景的优化,无法有效处理分析查询,例如HBase、BigTable、Cassandra和HypeTable。在这些系统中,每秒可以获得大约十万行的吞吐量,但是每秒不会到达数亿行。

另外,ClickHouse是一个DBMS,而不是一个单一的数据库,ClickHouse允许运行时创建表和数据库,加载数据和运行查询,而不用重新配置或启动系统。

在这里插入图片描述

在这里插入图片描述
之所以称作 DBMS,因为ClickHouse:

  • DDL
  • DML
  • 权限管理
  • 数据备份
  • 分布式存储
  • 等等功能

数据压缩

一些面向列的DBMS(InfiniDB CE 和 MonetDB)不使用数据压缩,但是数据压缩可以提高性能。

磁盘存储

许多面向列的DBMS(SAP HANA和GooglePower Drill)只能在内存中工作,但即使在数千台服务器上,内存也太小,无法在Yandex.Metrica中存储所有浏览和会话。

多核并行

多核并行进行大型的查询。

在多个服务器上分布式处理

上面列出的DBMS几乎不支持分布式处理,在ClickHouse中,数据可以驻留不同的分片上,每个分片可以是用于容错的一组副本,查询在所有分片上并行处理,这对用户来说是透明的。

SQL支持

  • 支持的查询包括 GROUP BY、ORDER BY
  • 子查询在FROM、IN、JOIN子句中被支持
  • 标量子查询支持
  • 关联子查询不支持
  • 真是因为ClickHouse提供了标准协议的SQL查询接口,使得现有可视化分析系统能够轻松的与它集成对接

向量化引擎

数据不仅案列存储,而且由矢量-列的部分进行处理,这使我们能够实现高CPU性能。
向量化执行时寄存器硬件层面上的特性,可以理解为消除程序中循环的优化。
为了实现向量化执行,需要利用CPU的SIMD指令(Single Instrution Multiple Data),即用单条指令处理多条数据。现代计算机系统概念中,它是利用数据并行度来提高性能的一种实现方式,它的原理是在CPU寄存器层面实现数据并行的实现原理。

实时数据更新

ClickHouse支持主键表,为了快速执行对主键范围的查询,数据使用合并树(MergeTree)进行递增排序,由于这个原因,数据可以不断的添加到表中,添加数据时无锁处理。

索引

例如,带有主键可以在特定的时间范围内为特定的客户端(Metrica计数器)抽取数据,并且延迟事件小于几十毫秒。

支持在线查询

我们可以使用该系统作为Web界面的后端,低延迟意味着可以无延迟的实时的处理查询。

支持近似计算

  • 系统包含用于近似计算各种值,中位数和分位数的集合函数
  • 支持基于部分(样本)数据运行查询并获得近似结果,在这种情况下,从磁盘检索比例较少的数据。
  • 支持为有限数量的随机秘钥(而不是所有秘钥)运行聚合,在数据中秘钥分发的特定场景下,这提供了相对准确的结果,同时使用较少的资源。

数据复制和对数据完整性支持

使用异步多主复制,写入任何可用的副本后,数据将分发到所有剩余的副本,系统在不同的副本上保持相同的数据。
要注意的是,ClickHouse并不完美:

  • 不支持事务
  • 不支持Update、Delete操作
  • 支持有限的操作系统

最后总结

大数据分析领域中,传统的大数据分析需要不同框架和技术组合才能达到最终效果,在人力成本、技术能力、硬件成本、维护成本上,让大数据分析变成了很昂贵的事情,很多中小企业非常痛苦,不得不被迫租赁第三方大型数据分析服务。
ClickHouse开源的出现让许多想做大数据且想做大数据分析的很多公司和企业都耳目一新。ClickHouse正是以不依赖Hadoop生态、安装维护简单、查询快速、支持SQL等特点,在大数据领域越走越远。


http://www.ppmy.cn/ops/110655.html

相关文章

ubuntu内核升级后的问题修复

文章目录 需求当前环境禁止内核更新安装内核修复/usr/include/dlocate 测试 需求 升级后的常见问题 驱动程序不兼容: 新内核版本可能导致某些硬件驱动程序不再兼容,尤其是专有驱动程序或第三方驱动程序。启动问题:内核更新可能导致启动问题,例如无法启动…

第四章 类和对象 实践与练习(1)

综合练习 1 简易计算器 使用静态方法模拟一个只能进行两个数加减乘除的简易计算器。 static double a,b;public static void main(String[] args) {简易计算器01 sum new 简易计算器01();//创建一个对象System.out.println("4.4加上7.11的结果:"sum.add…

[数据集][目标检测]车油口挡板开关闭合检测数据集VOC+YOLO格式138张2类别

数据集格式:Pascal VOC格式YOLO格式(不包含分割路径的txt文件,仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件) 图片数量(jpg文件个数):138 标注数量(xml文件个数):138 标注数量(txt文件个数):138 标注类别…

ModbusTCP/RTU转Ethernet/IP(CIP)-Modbus设备与罗克韦尔AB的PLC之间通讯

IGT-DSER智能网关模块支持西门子、三菱、欧姆龙、罗克韦尔AB等各种品牌的PLC之间通讯,同时也支持PLC与Modbus协议的工业机器人、智能仪表、变频器等设备通讯。网关有多个网口、串口,也可选择WIFI无线通讯。无需PLC内编程开发,只要在IGT-DSER智…

shader 案例学习笔记之将坐标系分成4个象限

代码: _st * 2.0;float index 0.0; index step(1., mod(_st.x,2.0)); index step(1., mod(_st.y,2.0))*2.0; 示意图: 计算左下角 计算右下角 计算左上角 计算右上角 最后结果示意: 坐标系被分成了4个单元格,每个单元格都有…

Kafka高吞吐量的原因

文章目录 生产者(写入数据)顺序写入Memory Mapped Files 消费者(读取数据)Kafka是如何巧妙设计的? 总结 众所周知kafka的吞吐量比一般的消息队列要高,号称the fastest,那他是如何做到的,让我们…

产品探秘|开物——面向AI原生和云原生网络研究的首选科研平台

在当今高速发展的信息技术领域,特别是对于那些致力于前沿科技探索与实践的高校而言,拥有一款能够支持复杂网络业务研究与开发的平台至关重要。开物™数据网络开发平台(Data Network Development Platform,简称DNDP)&am…

[WEBPWN]BaseCTF week1 题解(新手友好教程版)

WEB A Dark Room 这道题的考点是查看网页源代码 网页源代码这里看到的是网页的html css js在用户浏览器上执行的代码 有时候很多铭感信息,或者关键信息。 查看网页源代码的几种方式 1 右键点击查看网页源代码 2 F12 3 Ctrl U 快捷键 HTTP是什么 HTTP&#x…

ip属地河北切换北京

我们知道,每当电脑或手机连接网络时,都会分配到一个网络IP地址,这个IP地址通常与设备所在的地区网络相关联。然而,出于业务或个人需求,有时我们需要将本机的IP地址切换到其他城市。例如要将IP属地河北切换北京&#xf…

主流日志框架Logback与Log4j2

一、Logback 1、介绍 Logback是由log4j创始人设计的又一个开源日志组件。 Logback当前分成三个模块:logback-core,logback- classic和logback-access logback-core是其它两个模块的基础模块,类似与springframework logback-classic是log…

项目——负载均衡OJ

项目要实现的一个整体的功能: 编写一个在线OJ网络服务器,只实现类似 leetcode 的题目列表在线编程功能 项目宏观结构: Oj服务器在收到提交的代码时,把代码负载均衡的选择发送给其他几个编译与运行服务器去编译运行代码,判断代码的编译运行结…

python打包工具Nuitka使用介绍

首先说一下,为什么我选择Nuitka而不是pyinstaller? Nuitka相对pyinstaller有以下优点: 1. Nuitka能够对 Python 代码进行深度分析,并在此基础上生成优化后的 C 语言代码会针对生成的 C 代码进行更多的优化,这意味着生…

java面试题-Sql 语句的执行顺序

远离八股文,面试大白话,通俗且易懂 看完后试着用自己的话复述出来。有问题请指出,有需要帮助理解的或者遇到的真实面试题不知道怎么总结的也请评论中写出来,大家一起解决。 java面试题汇总-目录-持续更新中 Sql 语句的执行顺序 fr…

Ubuntu22.04安装nginx

1.安装nginx 首先,更新你的包索引: sudo apt update 安装必要的软件包以允许apt通过HTTPS使用仓库: sudo apt install ca-certificates curl gnupg lsb-release 添加Nginx官方的GPG密钥: curl -fsSL https://nginx.org/keys/ng…

简单计算机网络概念

1.浏览器过程 输入url,解析url 1.协议http、https的区别;HTTPS就是在HTTP与TCP之间增加了SSL/TSL安全传输层 2.格式:协议//主机:端口/路径; 3.HTTP版本:1.0和1.1 4.HTTP/1.1:1. 持久连接:为了…

下一代 AI 教育:知识图谱RAG + 多智能体,听老师的话没前途,让老师听你的才是正道

下一代 AI 教育:知识图谱RAG 多智能体,听老师的话没前途,让老师听你的才是正道 下一代 AI 教育:基于最本质的用脑方式学习 理解 记忆?学习的 3 个层次文科:关联理解 关联分析 关联记忆秒背古诗古文商业…

Redis之pipeline与事务

前言 Redis使用的是单reactor网络模型,也就是io多路复用非阻塞io的异步处理流程(注册事件,在事件循环callback处理事件)。我们可以将每个连接抽象看成一个pipe,哪个pipe中的数据先满就先处理。注意,单react…

数组与贪心算法——215、75、324、517(3中1难)

215. 数组中的第K个最大元素(中等) 给定整数数组 nums 和整数 k,请返回数组中第 k 个最大的元素。 请注意,你需要找的是数组排序后的第 k 个最大的元素,而不是第 k 个不同的元素。 你必须设计并实现时间复杂度为 O(n) 的算法解决此问题。 解法…

CSP-J 算法基础 排序算法的基本概念

文章目录 前言排序算法的稳定性稳定排序算法的例子不稳定排序算法的例子总结 有序度和逆序度有序度(Sortedness)逆序度(Inversion Count)计算逆序度的例子 总结 满有序度计算公式解释举个例子总结 总结 前言 排序算法是计算机科学…

Ubuntu 常用指令和作用解析

Ubuntu 常用指令和作用解析 Ubuntu 是一种常见的 Linux 发行版,它利用了 Unix 的力量和开源软件的精神。掌握常用指令可以提高我们在使用 Ubuntu 时的效率。本文将介绍一些常见的指令及其用途。 目录 更新与安装软件文件与目录操作系统信息与资源监控用户与权限管…