数仓建模(五)选择数仓技术栈:Hive ClickHouse 其它
在大数据技术的飞速发展下,数据仓库(Data Warehouse,简称数仓)成为企业处理和分析海量数据的核心工具。市场上主流数仓技术栈丰富,如Hive、ClickHouse、Druid、Greenplum等,对于初学者而言,选择合适的技术栈是一项挑战。本文将详细解析Hive、ClickHouse及其他数仓技术,帮助读者根据场景需求选择最佳工具。
目录
一、数据仓库的基础概念和技术选型原则
1.1 什么是数据仓库?
数据仓库的定义和作用
数据仓库的基本架构
数据仓库的关键用途
1.2 技术选型的核心考虑因素
1.2.1 业务场景
1.2.2 数据规模
1.2.3 查询性能
1.2.4 生态兼容性
1.2.5 成本和社区支持
1.2.6 数据安全与隐私
二、Hive:传统批量数仓的代表
2.1 Hive的特点
2.1.1 Hive的核心优势
2.1.2 Hive的技术架构
2.2 Hive的使用场景
2.2.1 历史数据分析
2.2.2 复杂的ETL任务
2.2.3 离线报表生成
2.3 Hive的局限性
2.3.1 查询延迟较高
2.3.2 对存储的强依赖
2.3.3 对小文件处理能力不足
2.3.4 硬件和维护成本高
2.4 Hive优化策略
2.4.1 数据建模
2.4.2 文件格式优化
2.4.3 查询优化
2.4.4 资源优化
2.5 Hive的学习路径
三、ClickHouse:新一代列式存储数仓
3.1 ClickHouse的特点
3.1.1 高性能查询
3.1.2 实时性
3.1.3 高效存储
3.1.4 灵活的扩展性
3.1.5 简单易用
3.2 ClickHouse的使用场景
3.2.1 实时监控
3.2.2 报表系统
3.2.3 时间序列数据分析
3.2.4 大规模数据聚合
3.3 ClickHouse的局限性
3.3.1 写入性能瓶颈
3.3.2 数据更新和删除受限
3.3.3 SQL功能支持不足
3.3.4 硬件资源依赖
3.4 ClickHouse的优化策略
3.4.1 表结构设计
3.4.2 数据写入优化
3.4.3 查询优化
3.4.4 系统资源优化
3.5 ClickHouse的学习路径
3.5.1 环境搭建与配置
3.5.2 数据操作
3.5.3 实际项目
3.5.4 高级功能
四、其他主流数仓技术
4.1 Druid:实时分析与高并发查询
4.1.1 Druid的特点
4.1.2 使用场景
4.1.3 局限性
4.2 Greenplum:传统企业级数据仓库
4.2.1 Greenplum的特点
4.2.2 使用场景
4.2.3 局限性
4.3 Snowflake:云原生数据仓库
4.3.1 Snowflake的特点
4.3.2 使用场景
4.3.3 局限性
4.4 Apache Kudu + Impala:低延迟分析的组合
4.4.1 特点
4.4.2 使用场景
4.4.3 局限性
4.5 技术对比表
4.6 技术选型建议
五、技术选型建议与对比分析
5.1 技术对比表
5.2 不同场景的技术选型建议
5.2.1 离线批处理分析
5.2.2 实时数据分析
5.2.3 云端分析与跨团队协作
5.2.4 复杂SQL查询与企业迁移
5.2.5 动态数据集和低延迟查询
5.3 选型策略与实战技巧
5.3.1 选型策略
5.3.2 实战技巧
六、如何上手与学习
6.1 Hive的学习路径
6.1.1 环境搭建
6.1.2 基本操作
6.1.3 高级功能
6.1.4 项目实践
6.2 ClickHouse的学习路径
6.2.1 环境搭建
6.2.2 数据处理
6.2.3 高级功能
6.3 综合学习路径
6.3.1 理论学习
6.3.2 实践技能
一、数据仓库的基础概念和技术选型原则
1.1 什么是数据仓库?
数据仓库的定义和作用
数据仓库(Data Warehouse)是专门为支持数据分析和决策制定而设计的系统。它通常存储的是从多个来源收集的历史数据,旨在帮助用户通过分析数据发现规律、支持决策。
与传统的事务型数据库(OLTP)相比,数据仓库有以下显著特点:
- 面向分析:优化大规模数据的读操作,而非频繁的小规模写操作。
- 历史性数据:支持存储跨年甚至数十年的数据。
- 跨源整合:能够整合多个系统的数据,提供全局视图。
实际例子:
在一家零售企业中,数据仓库可能会存储销售、客户、库存等信息,并帮助管理层分析某商品的销售趋势、客户行为模式,或预测未来的需求。
数据仓库的基本架构
数据仓库通常采用 分层架构,主要包括以下部分:
- 数据源层:来自事务数据库、日志系统或外部API的数据源。
- 数据集成层(ETL):
- 数据提取(Extract):从数据源中抽取数据。
- 数据转换(Transform):清洗、规范化数据,匹配目标格式。
- 数据加载(Load):将数据写入数据仓库。
- 数据存储层:
- 采用维度建模或星型、雪花模型设计。
- 存储引擎选择(如Hive的HDFS存储或ClickHouse的列式存储)。
- 数据访问层:通过SQL或BI工具(如Tableau、Power BI)进行数据查询和分析。
数据仓库的关键用途
- 决策支持:分析历史数据,帮助企业进行战略决策。
- 绩效评估:通过KPI数据跟踪企业表现。
- 数据驱动创新:发现潜在趋势或优化业务流程。
1.2 技术选型的核心考虑因素
数据仓库技术选型需要根据实际需求和环境进行权衡,以下是常见的考量维度:
1.2.1 业务场景
不同的业务场景适用不同的技术栈:
- 离线批处理分析:如定期生成报表、历史数据分析,适合Hive、Presto。
- 实时分析:如网站流量监控、秒级数据更新,适合ClickHouse、Druid。
- 复杂SQL和多表关联:需要强大的查询引擎支持,适合Greenplum、Snowflake。
- 云端场景:如多团队协作或多云部署,Snowflake是理想选择。
1.2.2 数据规模
数据规模直接影响数仓架构的选择:
- 中小规模(<10TB):适合轻量级工具,如ClickHouse、PostgreSQL。
- 大规模(10TB至1PB):Hive和Presto在批量处理和存储扩展性上表现优异。
- 超大规模(>1PB):需要分布式架构支持,如Hive、Greenplum。
1.2.3 查询性能
高效的查询性能是数据仓库的重要指标。可以从以下几个方面评估:
- 延迟:对实时性要求较高的场景,ClickHouse和Druid具有优势。
- 吞吐量:针对高并发查询任务,Snowflake和Greenplum表现出色。
- 优化支持:技术栈是否支持分区、索引、缓存等查询优化手段。
1.2.4 生态兼容性
- 技术生态:Hive与Hadoop生态高度兼容,适合已有大数据平台的企业。
- BI工具支持:Snowflake和ClickHouse与主流BI工具(如Power BI、Tableau)集成度高。
- 编程语言支持:Druid原生支持Java、Python SDK。
1.2.5 成本和社区支持
- 硬件与存储成本:
- Hive依赖HDFS,需要部署大规模存储集群。
- ClickHouse和Snowflake具有高效的存储压缩技术。
- 软件与维护成本:
- 开源工具(如Hive、ClickHouse)的硬件成本相对较高,但没有软件许可费用。
- 云端工具(如Snowflake)虽然便于维护,但按需计费可能带来长期成本压力。
- 社区活跃度:
- ClickHouse和Hive的开源社区提供丰富的文档和案例支持。
- 商业工具(如Snowflake)有专业技术支持。
1.2.6 数据安全与隐私
现代数据仓库必须关注数据安全和隐私合规性:
- 支持访问控制和用户权限管理(如Role-Based Access Control)。
- 提供数据加密选项,保护静态和传输中的数据。
- 兼容隐私法规(如GDPR、CCPA)。
数据仓库的核心作用是帮助企业实现数据驱动决策,而技术选型需要结合业务场景、数据规模、性能要求等多个因素进行权衡。对于初学者,建议从明确业务需求出发,选择易上手、社区活跃的技术栈,如Hive(批处理分析)或ClickHouse(实时查询)。后续部分将深入解析主流技术的优缺点及使用场景,帮助大家进一步理解和选择合适的数仓技术栈。
二、Hive:传统批量数仓的代表
Hive作为一种开源的分布式数据仓库,建立在Hadoop生态系统之上,是传统批量数仓的经典代表。它通过提供类SQL的查询语言(HiveQL)简化了复杂的MapReduce编程,深受大规模离线分析场景的青睐。
2.1 Hive的特点
2.1.1 Hive的核心优势
-
SQL兼容性
Hive使用HiveQL,这是一种类似SQL的查询语言,降低了用户学习成本。传统SQL用户可以快速上手,无需掌握复杂的MapReduce编程。 -
大规模数据处理能力
Hive依托Hadoop的分布式存储和计算架构,可以高效处理TB级、PB级的大规模数据,适合大数据离线处理任务。 -
扩展性强
Hive与Hadoop生态深度集成,可以轻松扩展计算节点和存储容量,支持高并发和高吞吐量的任务处理。 -
丰富的功能
支持分区、分桶、文件格式转换(如Parquet、ORC),以及复杂查询(如JOIN、GROUP BY、子查询等),能够胜任复杂的批处理任务。
2.1.2 Hive的技术架构
Hive的架构分为以下几个核心组件:
- CLI/Thrift Server:提供交互式Shell或服务端接口,用户通过这些接口提交HiveQL查询。
- 元数据存储(Metastore):
- 管理表结构、分区信息、文件位置等元数据。
- 通常存储在关系型数据库中(如MySQL、PostgreSQL)。
- 查询处理器:
- 解析、优化HiveQL查询,将其转换为可执行的MapReduce、Tez或Spark任务。
- 存储层:
- 数据存储在HDFS上,支持多种文件格式(如Text、SequenceFile、Parquet、ORC)。
- 计算层:
- 默认使用MapReduce作为执行引擎,也可以切换为更高效的Tez或Spark。
2.2 Hive的使用场景
Hive的设计目标是处理大规模离线数据,因此它在以下场景中表现尤为出色:
2.2.1 历史数据分析
Hive专注于大规模历史数据的批量分析,例如:
- 分析电商平台过去一年的销售数据,识别季节性趋势。
- 从多年的财务数据中提取KPI指标,生成报表。
2.2.2 复杂的ETL任务
Hive支持复杂的数据转换和清洗流程,适合构建企业级的ETL管道。例如:
- 合并多数据源的数据,清洗异常值并生成标准化结果。
- 处理点击流日志,将其转化为适合分析的结构化数据表。
2.2.3 离线报表生成
Hive可以批量计算大规模数据的统计结果,生成各种周期性报表,如:
- 每月的用户活跃度分析。
- 广告投放的效果评估。
2.3 Hive的局限性
尽管Hive在离线批处理场景中表现优异,但它也存在以下不足:
2.3.1 查询延迟较高
- Hive的执行引擎(MapReduce、Tez、Spark)以批处理为主,查询启动和执行需要时间。
- 不适合实时性要求较高的任务,通常查询延迟为分钟级甚至小时级。
2.3.2 对存储的强依赖
- Hive通常依赖HDFS作为存储层,虽然可以集成云存储(如S3),但性能和兼容性可能会受到影响。
- 数据和元数据之间的强关联使得迁移复杂。
2.3.3 对小文件处理能力不足
- Hive在处理大量小文件时性能较差,因为MapReduce任务会为每个文件分配一个Mapper任务,导致资源浪费。
2.3.4 硬件和维护成本高
- 需要强大的分布式计算和存储环境。
- Hadoop生态的维护(如HDFS和YARN)需要专业技能。
2.4 Hive优化策略
为了提升Hive的性能和效率,可以从以下几个方面进行优化:
2.4.1 数据建模
- 分区:为大表设计合理的分区,减少全表扫描。
- 例如,根据日期(
day
)为访问日志分区。
- 例如,根据日期(
- 分桶:将分区进一步划分为更小的单元,提高查询效率。
- 适合需要频繁JOIN的小表。
2.4.2 文件格式优化
- 选择高效的文件格式:
- 使用列式存储格式(如Parquet、ORC),减少I/O操作。
- 控制文件大小:
- 合并小文件,减轻NameNode的元数据压力。
2.4.3 查询优化
- 使用EXPLAIN分析查询计划:
- 检查查询是否包含不必要的全表扫描或笛卡尔积。
- 启用查询缓存:
- 开启Hive的LLAP(Low Latency Analytical Processing),提高查询响应速度。
- 使用Tez或Spark作为执行引擎:
- 替代传统的MapReduce以提升性能。
2.4.4 资源优化
- 合理配置集群资源:
- 根据任务规模调整Mapper和Reducer的数量。
- 压缩中间结果:
- 使用Snappy或Zlib压缩中间结果,减少数据传输量。
2.5 Hive的学习路径
对于初学者,学习Hive可以按照以下步骤进行:
-
环境搭建:
- 在本地或云端搭建Hadoop集群,并安装Hive。
- 熟悉HDFS操作,如文件上传、下载等。
-
掌握HiveQL基础:
- 学习基本的DDL和DML操作,如创建表、插入数据、查询数据等。
- 了解分区、分桶和文件格式的应用。
-
实践批量分析任务:
- 使用公开数据集(如电商数据、日志数据)完成统计分析。
- 构建简单的ETL流程。
-
优化与调优:
- 学习如何设计高效的表结构和分区策略。
- 通过EXPLAIN理解查询计划并进行优化。
-
深入生态集成:
- 了解Hive与其他工具的集成,如与HBase结合实现实时分析,与Spark结合提高计算效率。
Hive作为传统数据仓库的代表,是离线批量分析场景的理想选择。它借助Hadoop生态提供了强大的扩展能力和处理性能,但对于实时性要求较高的任务并不适合。通过掌握Hive的优化策略和实践技巧,读者可以充分发挥其在大规模数据分析中的优势,为深入学习其他数据仓库技术奠定基础。
三、ClickHouse:新一代列式存储数仓
ClickHouse是一款开源的列式存储数据库,因其高性能和实时分析能力在大数据处理领域迅速崭露头角。它由俄 搜索引擎公司Yandex开发,专注于在线分析处理(OLAP)场景,广泛应用于实时监控、数据报表和时间序列分析等领域。
3.1 ClickHouse的特点
3.1.1 高性能查询
ClickHouse的核心优势在于其极高的查询性能,得益于以下设计:
- 列式存储:仅读取查询相关的列,减少了I/O操作,尤其适合处理宽表。
- 向量化执行引擎:支持批量处理数据,提高了CPU的使用效率。
- 数据分区和索引优化:通过分区键和主键索引快速定位数据,避免全表扫描。
3.1.2 实时性
ClickHouse支持高吞吐量的数据写入,并能实时查询最新数据,因此在需要秒级响应的实时分析场景中表现优异。
3.1.3 高效存储
ClickHouse采用多种数据压缩算法,如LZ4和ZSTD,可以极大地减少磁盘空间占用,同时保持解压速度。
3.1.4 灵活的扩展性
ClickHouse支持分布式部署,能够轻松扩展至多节点集群,处理大规模数据的分布式查询和存储。
3.1.5 简单易用
ClickHouse安装和配置相对简单,且支持完整的SQL语法,包括窗口函数、嵌套查询等,降低了学习门槛。
3.2 ClickHouse的使用场景
ClickHouse设计之初就专注于实时、高并发的分析任务,因此在以下场景中表现尤为出色:
3.2.1 实时监控
- 网站流量分析:实时监控用户访问情况,生成热点页面和流量趋势图。
- 日志分析:对服务器日志或应用日志进行实时聚合,发现问题和异常。
3.2.2 报表系统
ClickHouse非常适合构建高并发的报表系统,支持秒级响应和复杂的多维查询。例如:
- 财务部门生成多维度的利润报表。
- 运营团队分析广告投放的转化率。
3.2.3 时间序列数据分析
ClickHouse的分区和排序机制非常适合处理时间序列数据,常见应用包括:
- 物联网传感器数据分析。
- 股票行情数据的实时分析。
3.2.4 大规模数据聚合
ClickHouse在聚合计算方面表现优秀,适用于数据量巨大、查询复杂的场景:
- 对海量用户行为数据进行汇总统计。
- 生成电商平台的实时订单分析。
3.3 ClickHouse的局限性
尽管ClickHouse在实时分析中表现出色,但它也有一些局限性:
3.3.1 写入性能瓶颈
- ClickHouse的高性能查询是通过批量写入优化实现的,对小批量、高频写入场景支持不足。
- 需要通过数据分批处理的方式提升写入效率。
3.3.2 数据更新和删除受限
- ClickHouse的设计理念更适合追加和查询操作,原生不支持传统的UPDATE和DELETE操作。
- 用户需要通过
ALTER TABLE
或REPLACE PARTITION
等间接方式实现数据更新。
3.3.3 SQL功能支持不足
- 对事务支持有限,无法满足事务型需求。
- 子查询功能不如传统关系型数据库强大。
3.3.4 硬件资源依赖
- ClickHouse对硬件要求较高,尤其是内存和磁盘IO性能。
- 在资源不足的环境中,性能可能会大幅下降。
3.4 ClickHouse的优化策略
为了更高效地使用ClickHouse,可以从以下几个方面进行优化:
3.4.1 表结构设计
- 合理选择主键:
- 主键在ClickHouse中既是索引,也是分区键,应根据查询模式设计。
- 例如:对于日志数据,可选用时间戳+用户ID作为主键。
- 分区设计:
- 将数据按日期、地区或其他高效过滤字段分区,减少不必要的数据扫描。
3.4.2 数据写入优化
- 批量写入:
- 优化批量写入的大小,推荐单次批量写入约100,000行数据。
- 数据压缩:
- 配置合适的压缩算法(如ZSTD)以节省存储空间。
- 避免频繁的小批量插入:
- 通过中间缓存或流式处理工具(如Kafka)聚合小批量数据后写入。
3.4.3 查询优化
- 索引优化:
- 使用主键索引和二级索引快速过滤数据。
- 数据分组和预计算:
- 对常用的聚合计算进行物化视图处理。
- 使用分布式表:
- 在多节点集群中配置分布式表,提高查询并发性能。
3.4.4 系统资源优化
- 内存管理:
- 调整
max_memory_usage
参数,防止查询占用过多内存。
- 调整
- 磁盘IO优化:
- 确保磁盘支持高IOPS(如NVMe SSD)。
- 并发管理:
- 限制同时运行的查询数量,防止过载。
3.5 ClickHouse的学习路径
ClickHouse易于上手,但需要深入理解其特性和限制才能发挥最大效能,以下是建议的学习路径:
3.5.1 环境搭建与配置
- 单节点环境:安装ClickHouse并熟悉基础操作。
- 分布式集群:搭建多节点集群,学习分布式表的配置和管理。
3.5.2 数据操作
- 表创建和数据加载:
- 学习如何设计表结构并导入数据。
- 查询基础:
- 掌握基本SQL操作,如SELECT、GROUP BY、JOIN。
- 性能调优:
- 理解分区和主键设计对查询性能的影响。
3.5.3 实际项目
- 实时监控项目:
- 构建网站流量监控系统,分析实时访问情况。
- 时间序列分析:
- 使用IoT或金融数据集进行时间序列分析,优化存储和查询效率。
3.5.4 高级功能
- 物化视图:学习如何创建和维护物化视图以加速查询。
- 与其他工具集成:
- 探索ClickHouse与Kafka、Grafana等工具的集成应用。
ClickHouse是一款为实时分析设计的高性能列式存储数仓,它的高效查询、实时性和灵活性使其成为现代数据分析的热门选择。尽管在写入性能和SQL功能上存在一些限制,但通过合理的优化策略可以克服这些不足。对于需要高并发、秒级响应的场景,ClickHouse无疑是一个理想的选择。
四、其他主流数仓技术
除了Hive和ClickHouse外,市场上还有其他广泛应用的数据仓库技术,如Druid、Greenplum、Snowflake以及Apache Kudu + Impala等。它们各自针对不同的应用场景和需求设计,具备独特的优势与限制。
4.1 Druid:实时分析与高并发查询
4.1.1 Druid的特点
Druid是一款专为实时数据分析设计的分布式数据存储系统,具有以下特点:
- 实时数据摄取:支持从流处理平台(如Kafka)中实时摄取数据,快速生成查询结果。
- 高并发查询:优化了查询性能,能够支持数千用户的并发访问。
- 灵活的索引机制:支持数据分片、分区和多种索引技术(如倒排索引)。
- 时间序列优化:对以时间为主的数据分析性能尤为突出。
4.1.2 使用场景
- 实时仪表盘:如监控系统、广告点击流分析等。
- 时间序列数据分析:分析设备日志、传感器数据等。
- 高并发查询系统:服务于多用户查询的BI系统。
4.1.3 局限性
- 数据建模复杂:需要根据具体场景设计分片和分区策略。
- 批量处理能力较弱:相比Hive等工具,不适合大规模批处理任务。
- 资源消耗高:对硬件要求较高,尤其是在高并发场景下。
4.2 Greenplum:传统企业级数据仓库
4.2.1 Greenplum的特点
Greenplum是基于PostgreSQL开发的分布式数据仓库,擅长处理复杂SQL查询,具有以下特点:
- 强大的SQL支持:支持复杂查询、窗口函数、多表关联等高级SQL功能。
- MPP架构(Massively Parallel Processing):利用多个节点并行处理查询,提供强大的计算能力。
- 数据存储灵活:支持行存储和列存储,用户可根据需求灵活选择。
- 企业级功能:提供高可用性、备份恢复等功能,适合传统企业环境。
4.2.2 使用场景
- 复杂分析任务:如大规模关联查询、数据挖掘、机器学习。
- 传统数仓迁移:适合从Oracle等传统关系型数据库迁移到大数据环境。
- 结构化数据存储和分析:处理以结构化为主的数据集。
4.2.3 局限性
- 硬件成本高:需要性能强大的服务器支持。
- 开源版本功能限制:部分高级功能仅在商业版本中提供。
- 实时性不足:查询性能优异,但不适合实时数据写入和分析。
4.3 Snowflake:云原生数据仓库
4.3.1 Snowflake的特点
Snowflake是一款云原生数据仓库,设计上完全依赖云平台(如AWS、Azure、GCP),具有以下特点:
- 弹性扩展:支持存储和计算资源的独立扩展,根据负载动态调整。
- 跨云兼容:支持在多个云平台之间无缝迁移和操作。
- 数据共享:提供高效的数据共享功能,便于团队或组织间的数据协作。
- 零维护:由Snowflake团队负责所有基础设施的管理和维护。
4.3.2 使用场景
- 敏捷开发团队:适合快速上线和动态扩展的应用。
- 跨团队协作:支持多个团队共享数据和分析结果。
- 云环境为主的企业:完全托管的云原生特性降低了运维成本。
4.3.3 局限性
- 成本高昂:按使用量计费模式可能在长期运行中产生较高成本。
- 供应商锁定:依赖于特定云平台,迁移到其他架构困难。
- 部分功能受限:对于极端复杂或高度自定义的需求,可能无法完全满足。
4.4 Apache Kudu + Impala:低延迟分析的组合
4.4.1 特点
Apache Kudu是一种专为分析场景设计的分布式存储系统,而Impala是一款高性能的分布式查询引擎,两者结合可以实现低延迟的查询和存储:
- 实时性强:支持高频更新和低延迟查询。
- 行列混合存储:Kudu支持行存储和列存储的混合模式,灵活适应不同查询需求。
- 与Hadoop集成良好:可以无缝接入Hadoop生态,利用其计算和存储能力。
4.4.2 使用场景
- 低延迟查询:对数据延迟敏感的分析场景,如在线分析系统。
- 动态数据集:需要频繁更新数据的场景,如实时库存管理。
- Hadoop生态用户:适合已有Hadoop集群的企业扩展低延迟分析能力。
4.4.3 局限性
- 生态较小:社区活跃度不及Hive或ClickHouse。
- 运维复杂:需要专业团队进行部署和调优。
- 高硬件要求:对硬件性能(尤其是磁盘和网络)有较高依赖。
4.5 技术对比表
技术栈 | 主要特点 | 适用场景 | 局限性 |
---|---|---|---|
Druid | 实时分析,高并发支持 | 实时仪表盘、时间序列分析 | 数据建模复杂,批处理较弱 |
Greenplum | 强大SQL支持,适合复杂分析任务 | 企业数仓迁移、复杂关联查询 | 硬件成本高,实时性不足 |
Snowflake | 云原生,弹性扩展 | 云端数据协作、敏捷开发 | 成本高,供应商锁定 |
Kudu+Impala | 低延迟查询与实时更新 | 动态数据集分析、低延迟查询 | 生态小,运维复杂 |
4.6 技术选型建议
根据业务需求选择技术栈时,可以参考以下建议:
- 关注实时性:Druid和Kudu+Impala是低延迟分析的首选。
- 关注复杂SQL支持:Greenplum和Snowflake适合复杂查询和分析任务。
- 关注云部署和协作:Snowflake是云原生架构的最佳选择。
- 关注数据量与成本:对超大规模数据处理(PB级)需求较多的企业可优先考虑Greenplum。
每种数据仓库技术都有其独特的设计理念和应用场景。Druid注重实时性和高并发,Greenplum擅长复杂分析,Snowflake专为云环境优化,而Kudu+Impala提供低延迟查询支持。根据业务需求、数据规模和技术团队能力,选择合适的技术栈可以帮助企业在数据分析领域实现更高的效率和更强的竞争力。
五、技术选型建议与对比分析
数据仓库技术的选型直接影响到企业在数据存储、分析和决策支持方面的能力。为了帮助读者更好地理解和选择合适的数仓技术栈,本部分将通过对比分析各技术的特点,提供基于场景和需求的选型建议。
5.1 技术对比表
以下表格从性能、实时性、数据规模、易用性等方面对Hive、ClickHouse、Druid、Greenplum和Snowflake进行了横向对比:
特性 | Hive | ClickHouse | Druid | Greenplum | Snowflake |
---|---|---|---|---|---|
查询性能 | 中 | 高 | 高 | 中 | 高 |
实时性 | 弱 | 强 | 强 | 弱 | 强 |
数据规模 | PB级 | TB级 | TB级 | PB级 | TB级 |
适用场景 | 离线分析 | 实时分析 | 实时仪表盘 | 复杂分析 | 云端分析 |
SQL支持 | 高 | 中 | 中 | 高 | 高 |
成本 | 低 | 中 | 高 | 高 | 高 |
易用性 | 中 | 高 | 中 | 中 | 高 |
生态兼容性 | 高 | 中 | 高 | 中 | 高 |
5.2 不同场景的技术选型建议
根据实际应用场景和需求特点,以下是针对不同场景的技术选型建议:
5.2.1 离线批处理分析
推荐技术:Hive
Hive是离线批量处理的经典选择,适合处理PB级数据,并支持复杂的ETL流程和历史数据分析。
典型场景:
- 定期生成月度或年度报表。
- 从海量日志数据中提取行为模式。
- 构建企业级数据湖。
注意事项:
- 查询延迟较高,需合理规划任务调度。
- 配合Hadoop生态中的其他组件(如Spark)提升效率。
5.2.2 实时数据分析
推荐技术:ClickHouse、Druid
ClickHouse在实时查询和高并发场景中表现优异,而Druid则更适合构建实时仪表盘和时间序列数据分析。
典型场景:
- 实时监控系统,如用户流量分析。
- 广告点击流数据分析。
- 时间序列数据的快速聚合和查询。
注意事项:
- ClickHouse在小批量写入场景需优化数据写入策略。
- Druid的数据建模复杂性较高,适合专业团队维护。
5.2.3 云端分析与跨团队协作
推荐技术:Snowflake
Snowflake作为云原生数据仓库,可以动态调整存储和计算资源,适合多团队共享数据和分析成果。
典型场景:
- 多团队协同分析。
- 企业云迁移项目。
- 数据共享和可视化需求较高的场景。
注意事项:
- 成本按使用量计费,需注意优化查询和资源分配。
- 避免过于依赖单一供应商,降低锁定风险。
5.2.4 复杂SQL查询与企业迁移
推荐技术:Greenplum
Greenplum在复杂查询、多表关联和传统关系型数据迁移中具有显著优势。
典型场景:
- 企业数据仓库升级或迁移。
- 跨部门复杂数据挖掘任务。
- 高度定制化的SQL查询需求。
注意事项:
- 硬件和运维成本较高,适合大型企业。
- 在实时性要求较高的场景中表现不足。
5.2.5 动态数据集和低延迟查询
推荐技术:Apache Kudu + Impala
Kudu + Impala的组合在动态数据集和低延迟分析中表现良好,适合高频数据更新和在线分析。
典型场景:
- 实时库存管理。
- 动态金融数据分析。
- IoT传感器数据处理。
注意事项:
- 需要与Hadoop生态无缝结合,依赖专业运维能力。
- 社区生态较小,技术支持相对有限。
5.3 选型策略与实战技巧
5.3.1 选型策略
-
明确业务需求:
- 分析数据量级(GB、TB、PB)。
- 判断实时性要求(秒级、分钟级或离线)。
- 确定查询复杂度(简单聚合、多表关联)。
-
评估技术生态:
- 查看当前技术栈与目标工具的兼容性。
- 评估社区支持、文档和培训资源的可用性。
-
进行性能测试:
- 使用小规模数据进行性能基准测试。
- 测试查询延迟、吞吐量和扩展能力。
-
成本与团队能力匹配:
- 评估硬件和运维成本,选择符合预算的方案。
- 确保团队有足够的技术能力支持选定工具的使用。
5.3.2 实战技巧
-
结合工具搭配使用:
- Hive适合离线分析,但可以与Spark或Tez结合,提升实时性。
- ClickHouse适合实时查询,可结合Kafka实现高效的数据流处理。
-
优化存储与查询性能:
- 利用分区、分桶、物化视图等特性减少I/O操作。
- 选择合适的存储格式(如Parquet、ORC)优化查询速度。
-
构建混合数仓架构:
- 在同一项目中采用不同数仓技术组合。例如,Hive用于历史数据存储,ClickHouse用于实时查询,Snowflake支持跨团队协作。
技术选型是一个需要综合考虑业务需求、技术特点和团队能力的过程。对于初学者,建议从简单易用的技术(如ClickHouse或Hive)入手,在实践中逐步掌握优化策略和高级功能。通过基于场景的合理选型和实战经验的积累,大家将能够构建高效的数仓体系,支持复杂数据分析和实时业务需求。
六、如何上手与学习
在选择适合的数仓技术栈之后,初学者需要从理论和实践两方面入手,逐步掌握数仓的搭建、优化和实际应用能力。本部分将提供针对Hive、ClickHouse及其他技术的学习路径和实践建议,帮助读者快速上手并深入掌握核心技能。
6.1 Hive的学习路径
6.1.1 环境搭建
-
本地环境搭建:
- 在个人电脑或虚拟机上安装Hadoop集群并配置Hive。
- 熟悉HDFS的基本操作,如上传、下载文件。
- 测试简单的HiveQL查询。
-
云端环境体验:
- 使用云服务(如AWS EMR、阿里云E-MapReduce)快速部署Hive集群。
- 学习如何在云环境中优化集群资源。
6.1.2 基本操作
-
数据存储与查询:
- 创建表(内部表和外部表)。
- 加载本地或HDFS数据至Hive表。
- 执行基础查询(SELECT、GROUP BY、ORDER BY)。
-
分区和分桶:
- 学习如何为表设计分区以优化查询性能。
- 实践分桶机制,通过分区和分桶减少数据扫描量。
6.1.3 高级功能
-
文件格式优化:
- 了解不同存储格式(如ORC、Parquet)对性能的影响。
- 实践将表存储格式从Text转换为列式存储格式。
-
查询优化:
- 使用EXPLAIN命令分析查询计划。
- 通过启用Tez或Spark引擎提升查询效率。
-
复杂ETL任务:
- 设计简单的ETL流程,如从日志数据中提取特定字段并生成汇总表。
- 使用Hive中的UDF(用户定义函数)处理复杂数据转换逻辑。
6.1.4 项目实践
-
离线分析项目:
- 从开源数据集(如Twitter或电影数据)入手,构建历史分析场景。
- 实现基于时间的多维度统计分析。
-
数据湖建设:
- 结合HDFS、Hive和Spark,搭建一个完整的数据湖框架。
- 实现跨部门数据共享和存储。
6.2 ClickHouse的学习路径
6.2.1 环境搭建
-
单节点安装:
- 在本地或云服务器上安装ClickHouse,测试基本操作。
- 配置合适的存储路径和日志记录。
-
分布式集群部署:
- 学习如何在多台服务器上搭建ClickHouse集群。
- 配置分布式表,实现多节点间的数据存储和查询。
6.2.2 数据处理
-
表设计与数据加载:
- 设计简单的表结构,导入本地CSV或JSON数据。
- 学习批量插入数据的最佳实践。
-
优化查询性能:
- 为表设计合适的主键和排序键。
- 使用物化视图预计算常用查询结果。
6.2.3 高级功能
-
时间序列分析:
- 创建按时间排序的表,分析时间序列数据。
- 实现实时数据聚合和趋势预测。
-
与流处理工具集成:
- 结合Kafka实现数据流的实时写入和分析。
- 学习如何优化高频数据摄入场景。
-
查询调优:
- 调整查询内存使用限制和并发参数。
- 优化复杂查询的分组、过滤和聚合逻辑。
6.3 综合学习路径
6.3.1 理论学习
-
数仓基础:
- 阅读关于数据仓库理论的经典书籍(如《Data Warehousing Fundamentals》)。
- 了解数仓建模方法,如星型模型和雪花模型。
-
生态对比:
- 学习Hive、ClickHouse、Druid等工具的设计理念和适用场景。
- 掌握它们在特定场景下的优劣势。
6.3.2 实践技能
-
优化与调优:
- 针对不同技术栈,学习如何优化存储和查询性能。
- 掌握分区设计、索引优化和查询计划分析等技能。
-
工具集成:
- 学习如何将数仓技术与其他工具(如Spark、Kafka、BI工具)结合。
- 实现从数据摄取到分析展示的完整流程。
嘿嘿 数仓技术栈的选择需要综合考虑业务需求、数据规模和技术特点。Hive擅长离线批量分析,ClickHouse专注实时查询分析,Druid、Greenplum等技术则有各自的特色。在入门阶段,建议读者先熟悉1-2种技术,结合实际场景深入学习,不断优化自己的数仓技能。
相关文章:
数仓建模(五)选择数仓技术栈:Hive ClickHouse 其它
在大数据技术的飞速发展下,数据仓库(Data Warehouse,简称数仓)成为企业处理和分析海量数据的核心工具。市场上主流数仓技术栈丰富,如Hive、ClickHouse、Druid、Greenplum等,对于初学者而言,选择…...
MySQL主从:如何处理“Got Fatal Error 1236”或 MY-013114 错误(percona译文)
错误的 GTID 如今,典型的复制设置使用 GTID 模式,完整的错误消息可能如下所示: mysql > show replica status\G *************************** 1. row ***************************Replica_IO_Running: NoReplica_SQL_Running: YesLast_I…...
01.14周二F34-Day55打卡
文章目录 1. Jim 在看电视的时候他的老婆正在做饭。(两个动作同时进行)2. 他刚睡着电话就响了。3. 我正在想事情,这时忽然有人从后面抓我胳膊。4. 我们总是边吃火锅边唱歌。5. 他一听说出了事故,马上就来了现场。6. He entered the room until I returned. (英译汉)7.直到…...
Docker 部署 Typecho
1. 官网 https://typecho.org/插件 & 主题 https://github.com/typecho-fans/plugins https://typechx.com/ https://typecho.work/2. 通过 compose 文件安装 github官网: https://github.com/typecho/Dockerfile 新建一个目录,存放 typecho 的相…...
electron 打包后的 exe 文件,运行后是空白窗口
一、代码相关问题 1. 页面加载失败 1.1 原因 在 Electron 应用中,若loadFile或loadURL方法指定的页面路径或 URL 错误,就无法正确加载页面,导致窗口空白。 1.2. 解决 仔细检查loadFile或loadURL方法中传入的路径或 URL 是否正确…...
《leetcode-runner》如何手搓一个debug调试器——架构
本文主要聚焦leetcode-runner对于debug功能的整体设计,并讲述设计原因以及存在的难点 设计引入 让我们来思考一下,一个最简单的调试器需要哪些内容 首先,它能够接受用户的输入 其次,它能够读懂用户想让调试器干嘛,…...
matlab实现了一个优化的遗传算法,用于求解注汽站最优位置的问题
function [best_chromosome, best_fitness] optimized_genetic_algorithm()%% 遗传算法参数初始化% 定义井信息,包括坐标、管道长度、流量、压力等wells defineWells(); % 返回井的结构体数组N length(wells); % 注汽井数量% 遗传算法相关参数L_chromosome 20; …...
八股学习 Redis
八股学习 Redis 使用场景常见问题问题1、2示例场景缓存穿透解决方案一解决方案二 问题3示例场景缓存击穿解决方案 问题4示例场景缓存雪崩解决方案 问题5示例场景双写一致性强一致方案允许延时一致方案 问题6RDB方式AOF方式两种方式对比 问题7示例场景惰性删除定期删除 使用场景…...
C++ 中 :: 的各种用法
C 中 :: 的各种用法 文章目录 C 中 :: 的各种用法1. 全局作用域解析示例:访问全局变量 2. 类作用域2.1. 访问类的静态成员示例:访问静态成员2.2. 定义类外成员函数示例:定义类外成员函数 3. 命名空间作用域3.1. 访问命名空间中的成员示例&…...
【Redis】初识分布式系统
目录 单机架构 分布式系统 应用数据分离架构 应用服务集群架构 读写分离/主从分离架构 冷热分离架构 垂直分库 微服务架构 分布式名词概念 本篇博文,将根据分布式系统的演进一步一步介绍每一种架构的形式,最后为大家总结了一些分布式中常用的…...
【EI 会议征稿】第四届材料工程与应用力学国际学术会议(ICMEAAE 2025)
2025 4th International Conference on Materials Engineering and Applied Mechanics 重要信息 大会官网:www.icmeaae.com 大会时间:2025年3月7-9日 大会地点:中国西安 截稿时间:2025年1月24日23:59 接受/拒稿通知…...
redisson 连接 redis5报错 ERR wrong number of arguments for ‘auth‘ command
依赖版本 org.redisson:redisson-spring-boot-starter:3.25.2 现象 启动报错 org.redisson.client.RedisException: ERR wrong number of arguments for ‘auth’ command. channel: [xxx] command: (AUTH), params: (password masked) 原因 redis6以下版本认证参数不包含用…...
GPT(General Purpose Timer)定时器
基本概念: 在嵌入式系统中,General Purpose Timer(GPT)是一种非常重要的硬件组件,用于提供定时功能。 定义:通用定时器是一种能够提供精确时间测量和控制功能的电子设备或电路模块。它可以产生周期性的时…...
Node.js - HTTP
1. HTTP请求 HTTP(Hypertext Transfer Protocol,超文本传输协议)是客户端和服务器之间通信的基础协议。HTTP 请求是由客户端(通常是浏览器、手机应用或其他网络工具)发送给服务器的消息,用来请求资源或执行…...
Vue数据响应式,reaction,ref的使用
目录 数据响应式 如何使用 reactionyu区别 数据响应式 什么是数据响应式 简单来说就是当数据变了的时候,页面的展示也会跟着发生变化。 在Vue当中我们有两个函数可以实现这个功能reaction,ref 如何使用 首先这两个函数在是在Vue对象中我们可以先对…...
【Vue实战】Vuex 和 Axios 拦截器设置全局 Loading
目录 1. 效果图 2. 思路分析 2.1 实现思路 2.2 可能存在的问题 2.2.1 并发请求管理 2.2.2 请求快速响应和缓存带来的问题 3. 代码实现 4. 总结 1. 效果图 如下图所示,当路由变化或发起请求时,出现 Loading 等待效果,此时页面不可见。…...
JVM:ZGC详解(染色指针,内存管理,算法流程,分代ZGC)
1,ZGC(JDK21之前) ZGC 的核心是一个并发垃圾收集器,所有繁重的工作都在Java 线程继续执行的同时完成。这极大地降低了垃圾收集对应用程序响应时间的影响。 ZGC为了支持太字节(TB)级内存,设计了基…...
在 Ubuntu 上安装和配置 Redis
在 Ubuntu 上安装和配置 Redis,并使用发布-订阅(Pub/Sub)功能,可以按照以下步骤进行: 一、安装 Redis 1. 更新包列表 首先,更新本地的包列表以确保获取到最新的软件包信息: sudo apt update…...
【WPS】【WORDEXCEL】【VB】实现微软WORD自动更正的效果
1. 代码规范方面 添加 Option Explicit:强制要求显式声明所有变量,这样可以避免因变量名拼写错误等情况而出现难以排查的逻辑错误,提高代码的健壮性。使用 On Error GoTo 进行错误处理:通过设置错误处理机制,当代码执行…...
相机SD卡照片数据不小心全部删除了怎么办?有什么方法恢复吗?
前几天,小编在后台友收到网友反馈说他在整理相机里的SD卡,原本是想把那些记录着美好瞬间的照片导出来慢慢欣赏。结果手一抖,不小心点了“删除所有照片”,等他反应过来,屏幕上已经显示“删除成功”。那一刻,…...
【机器学习:十四、TensorFlow与PyTorch的对比分析】
1. 发展背景与社区支持 1.1 TensorFlow的背景与发展 TensorFlow是Google于2015年发布的开源深度学习框架,基于其前身DistBelief系统。作为Google大规模深度学习研究成果的延续,TensorFlow从一开始就定位为生产级框架,强调跨平台部署能力和性…...
从零搭建一个Vue3 + Typescript的脚手架——day1
1.开发环境搭建 (1).配置vite vite简介 Vite 是一个由尤雨溪开发的现代化前端构建工具,它利用了浏览器对 ES 模块的原生支持,极大地提升了开发服务器的启动速度和热更新效率。Vite 不仅适用于 Vue.js,还支持 React、Svelte 等多种框架&…...
unity打包sdk热更新笔记
基础打包需要知识: 安装包大小不要超过2G,AB包数量过多会影响加载和构建,多次IO,用Gradle打包,要支持64位系统,不同的渠道包:让做sdk的人支持,提供渠道包的打包工具 配置系统环境变量…...
算法-贪心算法简单介绍
下面是贪心算法视频课的导学内容. 目录 1. 什么是贪心算法?2. 贪心算法简单的三个例子:1. 找零问题2. 最小路径和问题3. 背包问题 3. 贪心算法的特点4. 贪心算法学习的方式? 1. 什么是贪心算法? 简单来说, 我们称以局部最优进而使得全局最优的一种思想实现出来的算法为贪心…...
1Hive概览
1Hive概览 1hive简介2hive架构3hive与Hadoop的关系4hive与传统数据库对比5hive的数据存储 1hive简介 Hive是基于Hadoop的一个数据仓库工具,可以将结构化的数据文件映射为一张数据库表,并提供类SQL查询功能。 其本质是将SQL转换为MapReduce/Spark的任务进…...
Linux SUID提权
文章目录 1. SUID/SGID2. 查找SUID文件3. SUID/SGID提权3.1 SUID配置不当3.2 SUID systemctl提权3.3 $PATH变量劫持 参考 1. SUID/SGID SUID(Set User ID)意味着如果某个用户对属于自己的文件设置了这种权限,那么其他用户在执行这一脚本时也…...
RabbitMQ确保消息可靠性
消息丢失的可能性 支付服务先扣减余额和更新支付状态(这俩是同步调用),然后通过RabbitMq异步调用支付服务更新订单状态。但是有些情况下,可能订单已经支付 ,但是更新订单状态却失败了,这就出现了消息丢失。…...
用plotly制作一条带颜色的时间轴,显示学习情况
前一篇文章我写到用matplotlib制作一条带颜色的时间轴,显示学习情况-CSDN博客,这是我在工作地方写的程序,我回家后发现家里的笔记本用不了matplotlib,所以我尝试用plotly这另外的模块也写一段程序,让我的程序能够回家使…...
MySQL:索引
目录 1.MySQL索引是干什么的 2.铺垫知识 3.单个page的理解 4.页目录 单页情况 多页情况 1.MySQL索引是干什么的 MySQL的索引是提高查询效率,主要提高海量数据的检索速度。 2.铺垫知识 操作系统与磁盘之间IO的基本单位是4kb。 数据库是一个应用层软件&#…...
Kylin: `GLIBC_2.34‘ not found
需要查看服务器GLIBC版本 strings /lib64/libc.so.6 |grep GLIBC_如果没有,有两种办法,一种是libc.so.6降级,但是这样很容易将服务器搞崩溃 所以可以尝试下载对应版本 glibc 打包编译,重新建立软连,下列是RPM资源可以…...
ASP.NET Core - 依赖注入(四)
ASP.NET Core - 依赖注入(四) 4. ASP.NET Core默认服务5. 依赖注入配置变形 4. ASP.NET Core默认服务 之前讲了中间件,实际上一个中间件要正常进行工作,通常需要许多的服务配合进行,而中间件中的服务自然也是通过 Ioc…...
【全套】基于分类算法的学业警示预测信息管理系统
【全套】基于分类算法的学业警示预测信息管理系统 【摘 要】 随着网络技术的发展基于分类算法的学业警示预测信息管理系统是一种新的管理方式,同时也是现代学业预测信息管理的基础,利用互联网的时代与实际情况相结合来改变过去传统的学业预测信息管理中…...
《零基础Go语言算法实战》【题目 2-25】goroutine 的执行权问题
《零基础Go语言算法实战》 【题目 2-25】goroutine 的执行权问题 请说明以下这段代码为什么会卡死。 package main import ( "fmt" "runtime" ) func main() { var i byte go func() { for i 0; i < 255; i { } }() fmt.Println("start&quo…...
回归预测 | MATLAB实RVM相关向量机多输入单输出回归预测
回归预测 | MATLAB实RVM相关向量机多输入单输出回归预测 目录 回归预测 | MATLAB实RVM相关向量机多输入单输出回归预测预测效果基本介绍程序设计参考资料 预测效果 基本介绍 RVM-Adaboost相关向量机集成学习多输入单输出回归预测是一种先进的机器学习方法,用于处理…...
【OJ刷题】同向双指针问题3
这里是阿川的博客,祝您变得更强 ✨ 个人主页:在线OJ的阿川 💖文章专栏:OJ刷题入门到进阶 🌏代码仓库: 写在开头 现在您看到的是我的结论或想法,但在这背后凝结了大量的思考、经验和讨论 目录 1…...
数据挖掘实训:天气数据分析与机器学习模型构建
随着气候变化对各行各业的影响日益加剧,精准的天气预测已经变得尤为重要。降雨预测在日常生活中尤其关键,例如农业、交通和灾害预警等领域。本文将通过机器学习方法,利用历史天气数据预测明天是否会下雨,具体内容包括数据预处理、…...
RAG 带来的一些问题
RAG (Retrieval-Augmented Generation) 提高了查询的准确性,但也引入了一些新的问题。主要问题集中在信息检索和生成模型的结合方式上,这些问题影响了系统的性能、效率和输出质量。以下是 RAG 带来的主要问题以及相应的解决方法。 1. 依赖外部检索系统的…...
大疆上云API基于源码部署
文章目录 大疆上云API基于源码部署注意事项1、学习官网2、环境准备注意事项3、注册成为DJI开发者4、下载前后端运行所需要的包/依赖前端依赖下载后端所需要的Maven依赖包 用到的软件可以在这里下载5、MySQL数据库安装安装MySQL启动MySQL服务在IDEA中配置MySQL的连接信息 6、Red…...
【Python系列】Python 中使用 pymysql 连接 MySQL 数据库进行数据查询
💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…...
【数据结构学习笔记】19:跳表(Skip List)
介绍 跳表是一个能在 O ( n l o g n ) O(nlogn) O(nlogn)时间完成查找、插入、删除的数据结构,相比于树形结构优点就是很好写(所以也用于实现Redis ZSet)。其核心思想就是维护一个元素有序的,能随机提升索引层数的链表。最下面一…...
《计算机网络》课后探研题书面报告_网际校验和算法
网际校验和算法 摘 要 本文旨在研究和实现网际校验和(Internet Checksum)算法。通过阅读《RFC 1071》文档理解该算法的工作原理,并使用编程语言实现网际校验和的计算过程。本项目将对不同类型的网络报文(包括ICMP、TCP、UDP等&a…...
【论文阅读+复现】High-fidelity Person-centric Subject-to-Image Synthesis
以人物为中心的主体到图像的高保真合成,CVPR2024 code:CodeGoat24/Face-diffuser: [CVPR2024] Official implementation of High-fidelity Person-centric Subject-to-Image Synthesis. paper:2311.10329 背景 研究问题:这篇文…...
Flink集成TDEngine来批处理或流式读取数据进行流批一体化计算(Flink SQL)拿来即用的案例
Flink 以其流批一体化的编程模型而备受青睐。它支持高吞吐、低延迟的实时流计算,同时在批处理方面也表现出色。Flink 提供了丰富的 API,如 DataStream API 和 DataSet API,方便开发者进行数据处理操作,包括转换、聚合、连接等,使得开发者能够轻松构建复杂的数据处理逻辑。…...
Zookeeper特性与节点数据类型详解
1、 Zookeeper介绍 ZooKeeper 是一个开源的分布式协调框架,是Apache Hadoop 的一个子项目,主要用来解决分布式集群中应用系统的一致性问题。Zookeeper 的设计目标是将那些复杂且容易出错的分布式一致性服务封装起来,构成一个高效可靠的原语集…...
C# HslCommunication库
C# HslCommunication库是一个用于建立TCP连接并进行Modbus通讯的库。下面将详细介绍如何使用该库进行TCP通讯。 首先,需要在C#项目中引用HslCommunication库。 创建一个TCP连接对象,可以使用HslCommunication.ModBus.ModbusTcpNet类,例如&am…...
springMVC实现文件上传
目录 一、创建项目 二、引入依赖 三、web.xml 四、编写上传文件的jsp页面 五、spring-mvc.xml 六、controller 七、运行 一、创建项目 二、引入依赖 <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.o…...
【深度学习】Windows系统Anaconda + CUDA + cuDNN + Pytorch环境配置
在做深度学习内容之前,为GPU配置anaconda CUDA cuDNN pytorch环境,在网络上参考了很多帖子,但pytorch的安装部分都有些问题或者比较复杂繁琐,这里总结了相对简单快速的配置方式 文章目录 AnacondaCUDAcuDNNpytorchtorchtorchau…...
springboot整合rabbitmq
1. 添加依赖 首先,在你的 pom.xml 文件中添加 RabbitMQ 的依赖: <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-amqp</artifactId> </dependency> 2. 配置 RabbitMQ …...
【React】脚手架进阶
目录 暴露webpack配置package.json的变化修改webpack.config.js配置less修改域名、端口号浏览器兼容处理处理跨域 暴露webpack配置 react-scripts对脚手架中的打包命令进行封装,如何暴露这些打包配置呢?上篇写到在package.json中的scripts配置项中有eje…...
Unreal Engine 5 (UE5) Metahuman 的头部材质
在图中,你展示了 Unreal Engine 5 (UE5) Metahuman 的头部材质部分,列出了头部材质的多个元素。以下是对每个部分的解释: 材质解释 Element 0 - MI_HeadSynthesized_Baked 作用: 这是 Metahuman 的主要头部材质,控制整…...