- 快召唤伙伴们来围观吧
- 微博 QQ QQ空间 贴吧
- 文档嵌入链接
- 复制
- 微信扫一扫分享
- 已成功复制到剪贴板
Apache CarbonData技术原理及使用介绍
展开查看详情
1 .Apache CarbonData技术原理及使用介绍
2 .内容大纲 1. 项目背景 2. CarbonData 技术原理 3. CarbonData 使用介绍 4. What’s coming in 1.5
3 .企业中包含多种数据应用,从商业智能、批处理到机器学习 Report & Dashboard OLAP & Ad-hoc Batch processing Machine learning Realtime Analytics Big Table Small table data Ex. CDR, transaction, Small table Web log,… Unstructured data
4 . 来自数据的挑战 • Data Size 数据规模 • Single Table >10 B 单表大于100亿行 • Fast growing 快速增长 • Nested data structure for complex object 数据结构复杂 • Multi-dimensional 数据维度多 • Every record > 100 dimensions 分析的维度超过100 • Add new dimension occasionally 维度不断增长 • Billion level high cardinality 不同值范围在亿级别
5 .来自应用的挑战 • Enterprise Integration 企业应用集成 • SQL 2003 Standard Syntax Multi-dimensional OLAP Query • BI integration, JDBC/ODBC • Flexible Query 灵活查询 无固定模式 • Any combination of dimensions • OLAP Vs Detail Record • Full scan Vs Small scan Full Scan Query Small Scan Query • Precise search & Fuzzy search
6 .How to choose storage? 如何构建大数据统一存储平台?
7 .How to choose storage 当前各种大数据方案分析 1. NoSQL Data(适合实时应用,不适合分析型应用) •只支持单列key value查询 <5ms •不支持标准SQL 2. MPP Data(适合中小规模数据分析) •Shared-nothing架构,并行计算 •不支持大集群 <100节点,没有容错,扩展能力有上 限,不能与大数据生态集成 3. Cube Data(适合BI类MOLAP应用) •预聚合,查询快 •但数据膨胀大,支持维度少,不支持查明细数据 4. Search Engine Data(适合文本类分析) •通过索引快速找到数据 •数据膨胀大2-4倍,不支持标准SQL 5. SQL on Hadoop •聚焦计算引擎的分布式扫描 •存储效率不高
8 .架构师的苦恼:不同应用不同数据存储,如果让数据存储统一? Choice 1: Compromising Choice 2: Replicating of data 做出妥协,只满足部分应用 复制多份数据,满足所有应用 App1 App2 App3 App1 App2 App3 Loading Replication Data Data
9 .CarbonData目标: 一份数据满足多种业务需求,与大数据生态无缝集成 Multi-dimensional OLAP Query CarbonData: Unified Storage Full Scan Query Small Scan Query 一份数据满足多种分析场景 详单过滤,海量数仓,数据集市,…
10 .内容大纲 2. CarbonData 技术原理 CarbonData File 文件格式 CarbonData Table DataMap 介绍
11 .CarbonData设计思路 数据统一存储:一份数据支持多种业务场景,减少数据孤岛和冗余,通过数 据共享产生更大价值。 大集群:区别于以往的单机系统,用户希望新的大数据存储方案能应对日益 增多的数据,随时可以通过增加资源的方式横向扩展,无极扩容。 易集成:提供标准接口,新的大数据方案与企业已采购的工具和IT系统要能 无缝集成,支撑老业务快速迁移。与大数据生态软件能无缝集成。 高性能:数据分析要求越来越高效、实时。 开放生态:通过开源开放,让更多的客户和合作伙伴的数据连接在一起,发 挥更大的价值,与当前大数据生态无缝集成。
12 .CarbonData File文件格式 包含索引的列式文件格式
13 .CarbonData File文件格式 Carbon Data File File Header • 数据布局 Version • Block:一个HDFS文件 Schema • Blocklet:文件内的列存数据块,是最小的IO读取单元 • Column chunk: Blocklet内的列数据 Blocklet 1 Column 1 Chunk • Page:Column chunk内的数据页,是最小的解码单元 header Page1 Page2 … Column 2 Chunk … • 元数据信息 Column n Chunk • Header:Version,Schema … • Footer: Blocklet Offset, Index & 文件级统计信息 Blocklet N • 内置索引和统计信息 File Footer • Blocklet索引:B Tree start key, end key Blocklet Offset, Index & Stats • Blocklet级和Page级统计信息:min,max等
14 .CarbonData File • 压缩编码 • RLE, 本地字典编码, 全局字典编码 • 自适应编码 • Snappy, Zstd • 数据类型 SMALLINT, INT/INTEGER, BIGINT, DOUBLE, DECIMAL TIMESTAMP, DATE STRING, CHAR, VARCHAR ARRAY, STRUCT, MAP BOOLEAN, BINARY
15 .CarbonData Table 支持索引的、对CarbonData File的原子化读写操作
16 .CarbonData Table • 支持Segment级的读写操作的数据一致性和原子性。 • 一次Load/Insert对应生成一个Segment • 每个Segment 包含数据和元数据: CarbonData File和Index文件 • 不同的Segment可以有不同的文件格式 • 流式入库的Streaming Segment采用了写优化的文件格式 • 历史数据的Batch Segment采用读优化的文件格式 • 将支持更多其他格式,例如: CSV, Parquet
17 . CarbonData Table Layout Spark Driver Table Level Index Spark HDFS /table_name/fact/segment_id /table_name/meta Carbon File Carbon File Carbon File Carbon File Index File Dictionary Schema File File Data Data Data Data All Footer Dictionary Latest Footer Footer Footer Footer Map Schema
18 .CarbonData DataMap 数据地图
19 .DataMap执行模型 Query • 下推filter和projection到DataMap Spark Driver • DataMap可以是集中式或者分布 DataMap Execution 式的(避免大内存问题) Spark Driver (集中式, 分布式) • DataMap可以缓存在内存或者存 储在磁盘上 Executor Executor Executor • 主要包括Index DataMap和MV DataMap Carbon Data Carbon Data Carbon Data File Map File Map File Map Data Node Data Node Data Node
20 .Index DataMap • 主索引 • B-Tree • MinMax • 二级索引 • B-Tree:适合一般OLAP多维分析 • BloomFilter:适合id类字段过滤,如手机号,终端ID,车牌等
21 . MV DataMap • 物化视图可以进行预汇聚、Join等操作,用 数据入库时间换取查询时间 • 入库方式: • 立即入库:入库主表时自动入库MV • 延迟入库:用户手动操作 • 查询时会将查询语句转换为Modular Plan的 查询计划,将原SQL改写为针对MV的SQL • 当命中多个MV时,自动选取代价最小 的MV • 当前支持projection, filter, groupby, join, having等语法
22 .内容大纲 3. CarbonData 使用介绍 CarbonData File 读写 CarbonData Table 操作 DataMap 使用 流式入库介绍
23 .CarbonData File读写 使用CarbonData SDK读写CarbonData文件
24 .CarbonData File 读写 CarbonWriter writer = CarbonWriter.builder() .outputPath(path) .buildWriterForCSVInput(new Schema(fields)); writer.write(row); writer.close; CarbonReader reader = CarbonReader .builder(path, "_temp") .projection(strings) .build(); reader.readNextRow(); reader.close();
25 .CarbonData Table操作 与SparkSQL深度集成
26 .新建CarbonData表 CREATE TABLE [IF NOT EXISTS] [db_name.]table_name [(col_name data_type , ...)] STORED AS carbondata [TBLPROPERTIES (property_name=property_value, ...)] [LOCATION 'path'] 如何正确配置Table Properties,提升查询性能?
27 .配置Table Properties • SORT_COLUMNS • 默认按所有维度列在schema中的顺序对数据做row排序 • 详单过滤:频繁使用的过滤条件列,越靠前的列过滤效果越好 • OLAP分析:查询使用的列,按基数由低到高排序,提升压缩率,降IO • COLUMN_META_CACHE • 默认会缓存所有列的Min/Max值 • 建议:查询中使用的过滤条件列,可以减少索引对内存的使用 • CACHE_LEVEL • Block:默认值,占用较少的内存,降低部分driver侧过滤性能 • Blocklet:更加精准的driver侧过滤,占用较多的内存
28 .配置Table Properties • DICTIONARY_INCLUDE • 低基数String列,提升压缩率 • 延迟解码,可以提升Group by效率 • LOCAL_DICTIONARY • Blocklet级别的字典编码,可以节省存储空间,提升查询速度 • SORT_SCOPE • NO_SORT, BATCH_SORT, LOCAL_SORT, GLOBAL_SORT
29 .数据导入 使用SQL LOAD DATA [LOCAL] INPATH 'folder path' [OVERWRITE] • 符合事务的原子性,一致性 INTO TABLE tablename OPTIONS(...) • 支持多并发数据导入 INSERT INTO TABLE tablennme select ... FROM table1 • 支持并发导入和查询 使用Dataframe df.write .format(“carbondata") .options("tableName“, “t1")) .mode(SaveMode.Overwrite) .save()