更多技术沟通、求职机会,欢迎关注字节跳动数据渠道微信大众号,回复【1】进入官方沟通群

在字节跳动各产品线飞速生长的过程中,对数据剖析才能也提出了更高的要求,现有的主流数据剖析产品都没方法完全满意事务要求。因此,字节跳动在 ClickHouse 引擎基础上重构了技术架构,完成了云原生环境的布置和运维办理、存储核算别离、多租户办理等才能,推出了云原生数据仓库 ByteHouse。

咱们可以从下面几个方面认识 ByteHouse:

极致功用:

在延续了 ClickHouse 单表查询强壮功用的一起,新增了自研的查询优化器,在多表关联查询和复杂查询场景下功用提高若干倍,完成了在各类型查询中都到达极致功用。

新一代 MPP 架构,存算别离:

运用新式架构,Shared-nothing 的核算层和 Shared-everything 的存储层,可以功用损耗很小的情况下,完成存储层与核算层的别离,独立按需扩缩容。

资源阻隔,读写别离:

对硬件资源进行灵敏切开分配,按需扩缩容。资源有效阻隔,读写分隔资源办理,使命之间互不影响,杜绝了大查询打满一切资源拖垮集群的现象。

丰厚功用:

ByteHouse 供给客户丰厚的企业级才能,如:兼容 ANSI-SQL 2011 标准、支撑多租户、库表财物办理、根据人物的权限办理以及多样的功用确诊工具等。

ByteHouse 架构规划

由浅入深,揭秘企业级 OLAP 数据引擎 ByteHouse

*ByteHouse 全体架构图*

云原生数据仓库 ByteHouse 总体架构图如上图所示,规划目标是完成高扩展性、高功用、高可靠性、高易用性。从下往上,总体上分服务层、核算层和存储层。

服务层

服务层包含了一切与用户交互的内容,包含用户办理、身份验证、查询优化器,事务办理、安全办理、元数据办理,以及运维监控、数据查询等可视化操作功用。

服务层首要包含如下组件:

  • 资源办理器

资源办理器(Resource Manager)担任对核算资源进行一致的办理和调度,可以搜集各个核算组的功用数据,为查询、写入和后台使命动态分配资源。一起支撑核算资源阻隔和共享,资源池化和弹性扩缩等功用。资源办理器是提高集群全体利用率的核心组件。

  • 服务节点

服务节点(CNCH Server)可以看成是 Query 履行的 master 或者是 coordinator。每一个核算组有 1 个或者多个 CNCH Server,担任接受用户的 query 恳求,解析 query,生成逻辑履行计划,优化履行计划,调度和履行 query,并将最终结果返回给用户。核算组是 Bytehouse 中的核算资源集群,可按需进行横向扩展。

服务节点是无状况的,意味着用户可以接入恣意一个服务节点(当然如果有需求,也可以阻隔开),而且可以水平扩展,意味着渠道具备支撑高并发查询的才能。

  • 元数据服务

元数据服务(Catalog Service)供给对查询相关元数据信息的读写。Metadata 首要包含 2 部分:Table 的元数据和 Part 的元数据。表的元数据信息首要包含表的 Schema,partitioning schema,primary key,ordering key。Part 的元数据信息记载表所对应的一切 data file 的元数据,首要包含文件名,文件路径,partition, schema,statistics,数据的索引等信息。

元数据信息会持久化保存在状况存储池里面,为了下降对元数据库的拜访压力,关于拜访频度高的元数据会进行缓存

元数据服务本身只担任处理对元数据的恳求,本身是无状况的,可以水平扩展。

  • 安全办理

权限控制和安全办理,包含入侵检测、用户人物办理、授权办理、拜访白名单办理、安全审计等功用。

核算层

通过容器编列渠道(如 Kubernetes)来完成核算资源办理,一切核算资源都放在容器中。

核算组是核算资源的安排单位,可以将核算资源按需划分为多个虚拟集群。每个虚拟集群里包含 0 到多台核算节点,可按照实践资源需求量动态的扩缩容。

核算节点首要承担的是核算使命,这些使命可以是用户的查询,也可以是一些后台使命。用户查询和这些后台使命,可以共享相同的核算节点以提高利用率,也可以运用独立的核算节点以保证严格的资源阻隔。

核算组是无状况的,可以快速水平扩展。

存储层

选用 HDFS 或 S3 等云存储服务作为数据存储层。用来存储实践数据、索引等内容。

数据表的数据文件存储在远端的一致分布式存储体系中,与核算节点别离开来。底层存储体系可能会对应不同类型的分布式体系。例如 HDFS,Amazon S3, Google cloud storage,Azure blob storage,阿里云目标存储等等。底层存储是天然支撑高可用、容量是无限扩展的。

不同的分布式存储体系,例如 S3 和 HDFS 有许多不同的功用和不一样的功用,会影响到咱们的规划和完成。例如 HDFS 不支撑文件的 update, S3 object move 操作时重操作需求仿制数据等。

通过存储的服务化,核算层可以支撑 ByteHouse 本身的核算引擎之外,将来还可以便捷地对接其他核算引擎,例如 Presto、Spark 等。

数据导入导出

ByteHouse 包含一个数据导入导出(Data Express)模块,担任数据的导入导出工作。

由浅入深,揭秘企业级 OLAP 数据引擎 ByteHouse

Data Express 模块架构图

Data Express 为数据导入/导出作业供给工作流服务和快速装备模板,用户可以从供给的快速模板创立数据加载作业。

DataExpress 利用 Spark 来履行数据搬迁使命。

首要模块:

  • JobServer

  • 导入模板

  • 导出模板

JobServer 办理一切用户创立的数据搬迁作业,一起运行外部事件触发数据搬迁使命。

启动使命时,JobServer 将相应的作业提交给 Spark 集群,并监控其履行情况。作业履行状况将保存在咱们的元存储中,以供 Bytehouse 进一步剖析。

ByteHouse 支撑离线数据导入和实时数据导入。

离线导入

离线导入数据源:

  • Object Storage:S3、OSS、Minio
  • Hive (1.0+)
  • Apache Kafka /Confluent Cloud/AWS Kinesis
  • 本地文件
  • RDS

离线导入适用于希望将已准备好的数据一次性加载到 ByteHouse 的场景,依据是否对目标数据表进行分区,ByteHouse 供给了不同的加载形式:

  • 全量加载:全量将用最新的数据替换全表数据。
  • 增量加载:增量加载将依据其分区将新的数据添加到现有的目标数据表。ByteHouse 将替换现有分区,而非进行合并。

支撑的文件类型

ByteHouse 的离线导入支撑以下文件格局:

  • Delimited files (CSV, TSV, etc.)
  • Json (multiline)
  • Avro
  • Parquet
  • Excel (xls)

实时导入

ByteHouse 可以连接到 Kafka,并将数据继续传输到目标数据表中。与离线导入不同,Kafka 使命一旦启动将继续运行。ByteHouse 的 Kafka 导入使命可以供给 exactly-once 语义。您可以停止/恢复消费使命,ByteHouse 将记载 offset 信息,保证数据不会丢掉。

支撑的消息格局

ByteHouse 在流式导入中支撑以下消息格局:

  • Protobuf
  • JSON

总结

云原生数据仓库 ByteHouse 是一个具备极致功用、可以存储和核算资源分别按需扩缩容、功用丰厚的数据剖析产品,是一个面向海量数据、高实时要求的一个企业级 OLAP 数据引擎。

ByteHouse 在字节跳动的很多场景中有着丰厚的经历积累,尤其是在实时数据剖析场景和海量数据灵敏查询场景,都有超大规模的使用。ByteHouse 根据自研技术优势和超大规模的运用经历,为企业大数据团队带来新的选择和支撑,以应对复杂多变的事务需求,高速增长的数据场景。现在,ByteHouse 已在火山引擎上供给免费试用,欢迎大家来尝试,并为咱们提出名贵建议。

点击跳转 云原生数据仓库ByteHouse 了解更多