CarbonData是一种高性能大数据存储方案,支持快速过滤查找和即席OLAP分析,已在20+企业生产环境上部署应用,其中最大的单一集群数据规模达到几万亿。针对当前大数据领域分析场景需求各异而导致的存储冗余问题,业务驱动下的数据分析灵活性要求越来越高,CarbonData提供了一种新的融合数据存储方案,以一份数据同时支持多种应用场景,并通过多级索引、字典编码、预聚合、动态Partition、准实时数据查询等特性提升了IO扫描和计算性能,实现万亿数据分析秒级响应。

注脚

展开查看详情

1.CarbonData: 大数据交互式分析实践

2. Agenda • 为什么需要CarbonData • CarbonData介绍 • 性能测试 • 应用案例 • 未来计划 2

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 3

4. 数据应用举例 过去1天使用Whatapp应用的终端按流量排名情况? 过去1天上海市每个小区的网络拥塞统计? Tracing and Record Query for Operation Engineer 4

5. 来自数据的挑战 • Data Size 百亿级数据量 • Single Table >10 B • Fast growing • Multi-dimensional 多维度 • Every record > 100 dimension • Add new dimension occasionally • Rich of Detail 细粒度 • Billion level high cardinality • 1B terminal * 200K cell * 1440 minutes = 28800 (万亿) 5

6. 来自应用的挑战 • 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 Query Small Scan Query • Full scan Vs Small scan • Precise search & Fuzzy search 6

7. How to choose storage? 如何构建数据平台? 7

8. 选择1: NoSQL Database Key-Value store: low latency, <5ms 只能通过Key访问,一键一值 适合实时应用对接,不适合分析型应用 8

9. 选择2:Parallel database • Parallel scan + Fast compute 细粒度控制并行计算,适合中小规模 数据分析(数据集市) • Questionable scalability and fault-tolerance • Cluster size < 100 data node 扩展能力有上限 • Not suitable for big batch job 查询内容错能力弱 不适合海量数据分析(企业级数仓) 9

10. 选择3: Search engine •All column indexed 适合多条件过滤,文本分析 •Fast searching •Simple aggregation •Designed for search but not OLAP 无法完成复杂计算 •Not for TopN, join, multi-level aggregation •3~4X data expansion in size 数据膨胀 •No SQL support 专用语法,难以迁移 10

11. 选择4: SQL on Hadoop •Modern distributed architecture, scale well in computation. •Pipeline based: Impala, Drill, Flink, … 并行扫描+并行计算 适合海量数据计算 •BSP based: Hive, SparkSQL •BUT, still using file format designed for batch job 仍然使用为批处理设 计的存储,场景受限 •Focus on scan only •No index support, not suitable for point or small scan queries 11

12. 适用场景 只针对某个场景设计,解决一部分问题 Option Store Good Bad KV Store HBase, Multi-dimensional OLAP Query Cassandra, … Parallel Greenplum, database Vertica, … Search Solr, engine ElasticSearch ,… SQL on Impala, Hadoop - HAWQ, Pipeline Drill, … Full Scan Query Small Scan Query SQL on Hive, Hadoop - SparkSQL BSP 12

13. 架构师如何选择? Choice 1: Compromising Choice 2: Replicating of data 做出妥协,只满足部分应用 复制多份数据,满足所有应用 App1 App2 App3 App1 App2 App3 Loading Replication Data Data 13

14.CarbonData目标: 一份数据满足多种业务需求,与大数据生态无缝集成 Multi-dimensional OLAP Query CarbonData: Unified Storage Full Scan Query Small Scan Query 一份数据满足多种分析场景 详单过滤,海量数仓,数据集市,… 14

15. Apache CarbonData社区介绍 15

16. Apache CarbonData • 2016年6月,进入Apache孵化器 Compute • 2016年9月,第一个生产系统部署 • 2017年4月,Apache毕业,成为Apache顶级项目 http://carbondata.apache.org • 共发布: Storage • 5个稳定版本 • 最新版本: 1.1.0 • 目前可访问CarbonData的计算引擎: • Spark, Presto, Hive, Flink 16

17. Growing Community 每个月约100个JIRA 每个月约100个PR 每两个月新增约15个贡献者 •Diversity organization: •In production: 17

18. 感谢社区用户的贡献 • Partition – 上汽集团 • Bitmap Encoding – 上汽集团 • Presto Integration – 携程 • Hive Integration – 滴滴、Knoldus 18

19. CarbonData + Spark: 打造大数据交互式分析引擎 19

20. CarbonData大数据生态 • 支持Spark、Hive、Presto、Flink • 内置Hadoop和Spark深度优化 • Hadoop: > 2.2 Data Query • Spark 1.5, 1.6, 2.1 Management Optimization • 接口 • SQL Read/Write/Update • DataFrame API • 支持操作: Carbon File Carbon File Carbon File • 查询:支持SparkSQL优化器 • 数据管理:批量入库、更新、删除、合并 (Compaction)、增删列 20

21.使用方式:入库 • SQL CREATE TABLE tablename (name String, PhoneNumber String) STORED BY “carbondata” TBLPROPERTIES (...) LOAD DATA [LOCAL] INPATH 'folder path' [OVERWRITE] INTO TABLE tablename OPTIONS(...) INSERT INTO TABLE tablennme select_statement1 FROM table1; • Dataframe df.write .format(“carbondata") .options("tableName“, “t1")) .mode(SaveMode.Overwrite) .save() 21

22.使用方式:查询 • SQL SELECT project_list FROM t1 WHERE cond_list GROUP BY columns ORDER BY columns • Dataframe df = sparkSession.read .format(“carbondata”) .option(“tableName”, “t1”) .load(“path_to_carbon_file”) df.select(…).show 22

23.使用方式:更新和删除 Modify one column in table1 UPDATE table1 A phone, 70 60 SET A.REVENUE = A.REVENUE - 10 car,100 WHERE A.PRODUCT = ‘phone’ phone, 30 20 Modify two columns in table1 with values from table2 UPDATE table1 A SET (A.PRODUCT, A.REVENUE) = ( SELECT PRODUCT, REVENUE FROM table2 B table1 table2 WHERE B.CITY = A.CITY AND B.BROKER = A.BROKER ) WHERE A.DATE BETWEEN ‘2017-01-01’ AND ‘2017-01-31’ Delete records in table1 DELETE FROM table1 A 123, abc WHERE A.CUSTOMERID = ‘123’ 456, jkd 23

24. CarbonData介绍 CarbonData CarbonData 文件 表格 数据管理 查询 24

25. CarbonData介绍 CarbonData CarbonData 文件 表格 数据管理 查询 25

26. CarbonData文件格式 Carbon Data File •Blocklet: 文件内的数据块 File Header •Data are sorted along MDK (multi-dimensional keys) Version •Clustered data enabling efficient filtering and scan Schema •Column chunk: Blocklet内的列数据 Blocklet 1 Column 1 Chunk •一次IO单元 Page1 Page2 Page3 … •内部分为多个Page,解压单元 Column 2 Chunk … •元数据和索引信息 Column n Chunk •Header:Version,Schema … •Footer: Blocklet Index & statistics Blocklet N •内置索引 File Footer •Multi-dimensional Index Blocklet Index & Stats •Statistics: Column Min/Max, Cardinality 26

27.索引建立过程介绍 Years Quarters Months Territor y Countr y Quantity Sales 2003 QTR1 Jan EMEA Germany 142 11,432 2003 QTR1 Jan APAC China 541 54,702 2003 QTR1 Jan EMEA Spain 443 44,622 •数据和索引合一存储,数据即索引 2003 QTR1 Feb EMEA Denmark 545 58,871 •多维索引 (Multi-Dimensional Key) 2003 2003 QTR1 QTR1 Feb Mar EMEA APAC Italy India 675 52 56,181 9,749 •全局字典编码 2003 2003 QTR1 QTR1 Mar Mar EMEA Japan UK Japan 570 561 51,018 55,245 2003 QTR2 Apr APAC Australia 525 50,398 2003 QTR2 Apr EMEA Germany 144 11,532 Blocklet (Columnar view) Sorted MDK Index Encoding C1 C2 C3 C4 C5 C6 C7 1 1 1 1 1 142 11432 [1,1,1,1,1] : [142,11432] [1,1,1,1,1] : [142,11432] 1 1 1 1 3 443 44622 [1,1,1,1,3] : [443,44622] [1,1,1,3,2] : [541,54702] 1 1 1 3 2 541 54702 [1,1,1,3,2] : [541,54702] [1,1,1,1,3] : [443,44622] 1 1 2 1 4 545 58871 1 1 2 1 5 675 56181 [1,1,2,1,4] : [545,58871] [1,1,2,1,4] : [545,58871] 1 1 3 1 7 570 51018 [1,1,2,1,5] : [675,56181] [1,1,2,1,5] : [675,56181] 1 1 3 2 8 561 55245 [1,1,3,1,7] : [570,51018] Sort [1,1,3,3,6] : [52,9749] 1 1 3 3 6 52 9749 [1,1,3,2,8] : [561,55245] (MDK Index ) 1 2 4 1 1 144 11532 [1,1,3,1,7] : [570,51018] 1 2 4 3 9 525 50398 [1,1,3,3,6] : [52,9749] [1,1,3,2,8] : [561,55245] [1,2,4,1,1] : [144,11532] [1,2,4,3,9] : [525,50398] [1,2,4,3,9] : [525,50398] [1,2,4,1,1] : [144,11532] 27

28.索引建立过程介绍(二) Blocklet File Footer Blocklet 1 Blocklet Index • Build in-memory file level MDK index tree for 1 1 1 1 1 1 12000 filtering 1 1 1 2 1 2 5000 Blocklet1 1 1 2 1 1 1 12000 • Major optimization for efficient scan 1 1 2 2 1 2 5000 Start Key1 1 1 3 1 1 1 12000 End Key1 1 1 3 2 1 2 5000 Start Key1 Blocklet 2 C1(Min, Max) 1 2 1 3 2 3 11000 End Key4 1 2 2 3 2 3 11000 …. 1 2 3 3 2 3 11000 1 3 1 4 3 4 2000 C7(Min, Max) Start Key1 1 3 1 5 3 4 1000 Start Key3 1 3 2 4 3 4 2000 End Key2 End Key4 Blocklet 3 1 3 2 5 3 4 1000 1 3 3 4 3 4 2000 Start Key1 Start Key2 Start Key3 Start Key4 1 3 3 5 3 4 1000 Blocklet4 1 4 1 4 1 1 20000 End Key1 End Key2 End Key3 End Key4 1 4 2 4 1 1 20000 Start Key4 1 4 3 4 1 1 20000 C1(Min,Max) C1(Min,Max) C1(Min,Max) C1(Min,Max) Blocklet 4 End Key4 2 1 1 1 1 1 12000 … … … … 2 1 1 2 1 2 5000 C1(Min, Max) C7(Min,Max) C7(Min,Max) C7(Min,Max) C7(Min,Max) 2 1 2 1 1 1 12000 …. 2 1 2 2 1 2 5000 2 1 3 1 1 1 12000 C7(Min, Max) 2 1 3 2 1 2 5000 28

29. 利用两级索引架构减少Spark Task数和磁盘IO Spark Driver • 第一级:文件级索引 用于过滤文件(HDFS Block), Catalyst 避免扫描不必要的文件,减少多 Block Index 达95%的Spark Task Executor Executor • 第二级:Blocklet索引 Blocklet Index Blocklet Index 用于过滤文件内部的Blocklet, 避免扫描不必要的Blocklet,减 少磁盘IO Carbon File Carbon File Carbon File Data Data Data Footer Footer Footer 29

30.Column Chunk Inverted Index Blocklet ( sort column within column chunk) [1|1] :[1|1] :[1|1] :[1|1] :[1|1] : [142]:[11432] • Optionally store column data as inverted index within [1|2] :[1|2] :[1|2] :[1|2] :[1|9] : [443]:[44622] [1|3] :[1|3] :[1|3] :[1|4] :[2|3] : [541]:[54702] column chunk [1|4] :[1|4] :[2|4] :[1|5] :[3|2] : [545]:[58871] [1|5] :[1|5] :[2|5] :[1|6] :[4|4] : [675]:[56181] • suitable to low cardinality column [1|6] :[1|6] :[3|6] :[1|9] :[5|5] : [570]:[51018] • better compression & fast predicate filtering [1|7] :[1|7] :[3|7] :[2|7] :[6|8] [1|8] :[1|8] :[3|8] :[3|3] :[7|6] : : [561]:[55245] [52]:[9749] [1|9] :[2|9] :[4|9] :[3|8] :[8|7] : [144]:[11532] [1|10]:[2|10]:[4|10]:[3|10] :[9|10] : [525]:[50398] Column chunk Level Blocklet Physical View inverted Index C1 C2 C3 C4 C5 C6 C7 Run Length Encoding & Compression d r d r d r d r d r d r Blocklet Rows Columnar Store Measure1 Measure2 1 1 1 1 1 1 1 1 1 1 142 11432 Dim1 Block Dim2 Block Dim3 Block Dim4 Block Dim5 Block Block Block 10 10 8 10 3 10 6 2 2 1 [142]:[11432] 443 44622 1(1-10) 1(1-8) 1(1-3) 1(1-2,4-6,9) 1(1,9) 2 2 2 4 2 9 [443]:[44622] 541 54702 2(9-10) 2(4-5) 2(7) 2(3) 2 2 1 3 1 1 [541]:[54702] 545 58871 3(6-8) 3(3,8,10) 3(2) 3 3 9 3 3 4(9-10) 4(4) [545]:[58871] 675 56181 3 3 1 1 1 5(5) [675]:[56181] 570 51018 4 7 4 2 6(8) [570]:[51018] 561 55245 2 1 1 1 7(6) [561]:[55245] 52 9749 3 5 4 8(7) [52]:[9749] 144 11532 1 1 1 9(10) [144]:[11532] 525 50398 … … … [525]:[50398] 30

31. 支持嵌套数据类型:Array, Struct Array Struct • Represented as a composite of two columns • Represented as a composite of finite number of columns • One column for the element value • Each struct element is a separate column • One column for start index & length of Array Name Array Ph_Number [start,len] John 0,2 192 Name Array<Ph_Number> Name Info Name Info.age Info.gender Sam 2,3 191 Strut<age,gender> John [192,191] John 31 M Bob 5,2 121 John [31,M] Sam [121,345,333] Sam 45 F 345 Sam [45,F] Bob [198,787] Bob 16 M 333 Bob [16,M] 198 787 31

32. CarbonData介绍 CarbonData CarbonData 文件 表格 数据管理 查询 32

33. CarbonData表格组成 CarbonData Table Metadata: Global Dictionary, Schema Index Index & Statistics File Load in batch Data source Immutable Delta File for CarbonData Delta File Data File Update/Delete File Segment 33

34. CarbonData表格组成:多次入库 CarbonData Table Dictionary (append) Schema (Overwrite) Index (new tree) Load in batch Data source Data File Carbon Delta Carbon Delta File File File File (new folder) Segment 2 Segment 1 34

35. CarbonData表格物理存储 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 35

36. Segment管理 Leveraging HDFS File Lock to manage the Segment State, Data Update Segment Manager JDBCServer (HDFS File Lock): JDBCServer (Load) • Incremental Load (Query) • Batch Update Carbon Table Segment Segment Segment … Carbon Carbon Carbon File File File 36

37. CarbonData介绍 CarbonData CarbonData 文件 表格 数据管理 查询 37

38. 文件级对接:MapReduce InputFormat/OutputFormat Index Carbo Carbon Carbon HDFS n File File File Segment 3 Segment 2 Segment 1 38

39. SQL引擎对接:表格 SQL Read Index Carbo Carbon Carbon HDFS n File File File Segment 3 Segment 2 Segment 1 39

40. SparkSQL深度对接 与SparkSQL优化器 SQL 深度集成 CarbonData Table Read/Write/Update/Delete/Alter Table Metadata: Dictionary Index Carbo Carbon Carbon HDFS n File File File Segment 3 Segment 2 Segment 1 40

41. SparkSQL Data Source对接 SparkSQL Catalyst Framework Spark Core Parser/Analyzer Optimizer Physical Planning Execution SQL or DataFrame Parser Rule-based Strategy RDD Resolve Relation Cost-based Carbon Data Source New SQL syntax Carbon-specific optimization rule: CarbonScanRDD: • DML related statement • Lazy Decode leveraging • Leveraging multi level index for global dictionary efficient filtering and scan DML related RDDs 41

42. 利用两级索引架构减少Spark Task数和磁盘IO Spark Driver • 第一级:文件级索引 用于过滤文件(HDFS Block), Catalyst 避免扫描不必要的文件,减少多 Block Index 达95%的Spark Task Executor Executor • 第二级:Blocklet索引 Blocklet Index Blocklet Index 用于过滤文件内部的Blocklet, 避免扫描不必要的Blocklet,减 少磁盘IO Carbon File Carbon File Carbon File Data Data Data Footer Footer Footer 42

43.一个完整的过滤查询过程 SELECT c3, c4 FROM t1 WHERE c2=’beijing’ Spark Driver 1. File pruning 3. Read and decompress filter column 4. Binary search using inverted index, skip to next blocklet if no matching Spark Executor Blocklet Task Task 2. Blocklet C1 C2 C3 C4 Cn pruning … HDFS File File File File Blocklet Blocklet Blocklet Blocklet Blocklet Blocklet Blocklet Blocklet … Blocklet Blocklet Blocklet Blocklet … 5. Decompress projection column Footer Footer Footer Footer 6. Return decoded data to spark 43

44.文件内扫描优化,与Spark向量化处理对接 Spark向量化处理 + Whole Stage CodeGen ColumnBatch 结构 大颗粒IO单元(Carbon V3格式): •Blocklet内部一个Column Chunk 是一个IO单元, 向量化CarbonReader Blocklet按大小切分,默认64MB,大概有100万行记 录。大颗粒顺序读提升扫描性能。 Header Version Schema Timestamp 跳跃解码(Carbon V3格式) : Blocklet 1 •增加数据页Page概念,按Page进行过滤和解码,减 PageHeader … 少不必要的解码解压缩,提升CPU利用率 C1 PageData … PageHeader … 向量化解码 + Spark向量化处理 C2 PageData … •解码和解压缩采用向量化处理,与Spark2.1向量化、 Codegen结合,在扫描+聚合场景下提升性能4X Blocklet 2 … 堆外内存: •处理大结果集时,解码解压缩过程中堆外完成,减 Footer BlockletHeader … 少GC 44

45. 利用全局字典做延迟解码,提升GroupBy性能 SELECT c3, sum(c2) FROM t1 GROUP BY c3 Before applying Lazy Decode After applying Lazy Decode Stage 2 Stage 2 将字典值解码 Dictionary Decode 还原为原始值 Final Aggregation (字符串) Final Aggregation 使用字典值(Int) Stage 1 Stage 1 做汇聚、shuffle Partial Aggregation Partial Aggregation Scan Scan (decode c2, c3) (decode c2 only) 45

46. CarbonData介绍 CarbonData CarbonData 文件 表格 数据管理 查询 46

47. 增量入库:排序Key和排序范围 CREATE TABLE table(c1 STRING, c2 INT, c3 STRING, c4 INT, c5 DOUBLE) STORED BY “carbondata” TBLPROPERTIES (‘SORT_COLUMNS’=‘c2, c3’) LOAD DATA INPATH ‘source path’ INTO TABLE table OPTIONS (‘SORT_SCOPE’=‘NO_SORT/BATCH_SORT/LOCAL_SORT’) 通过SORT_COLUMNS指定需要排序的Key。 如果不指定,系统会使用默认规则(查询性能最大化): • 在所有维度列上建立MDK索引 • 排序范围是LOCAL_SORT 每次入库时可指定三种排序范围: • NO_SORT:不排序,在Compaction时建立索引。 • BATCH_SORT:使用配置的内存大小进行“尽量排序” • LOCAL_SORT:在节点内部排序(Merge Sort) 47

48. 入库流水线介绍 Mapper Spark Task Carbon Data Load Pipeline Index- Input Convert Write Build 按照 读取和解析输入 字典编码转换, 列式编码、压缩、 SORT_SCOPE (CSV或RDD) 嵌套类型拉平 写文件 进行排序 48

49. 全局字典的生成方式 Two Pass Single Pass Pre-defined Dictionary Job1:生成字典 由Dictionary Server在 入库前手工生成字典 Job2:执行入库流程 线生成字典 Dictionary LOAD DATA ‘path’ INTO TABLE t Server OPTIONS(‘COLUMNDICT’=‘nplist’) nplist := column_name:path,… 场景:首次入库 场景:非首次入库; 场景:通过静态维表预生产字典 若维度Cardinality不高, 也可用于首次入库 49

50. 数据更新和删除 • 场景: – 批量更新的事实表,如更新某些度量值,ID值 – 缓慢变化的维表,如刷新用户信息 • ACID属性: – 支持更新语句原子性(要么成功要么失败),一致性(更新串行化) – 更新过程中不影响查询 – 适用于OLAP型+批量更新场景,不支持毫秒级实时更新,不支持 OLTP类应用 50

51. 删除数据 Delete CarbonData Table No change in dictionary No change in index Base Delete Bitmap file that mark File Delta deleted rows Segment 51

52. 数据更新 Update CarbonData Table Dictionary append if needed New index added for inserted delta Bitmap file for delete Base Delete Insert delta and regular data File Delta Delta file for inserted delta 52 Segment

53. Compaction CarbonData Table Dictionary Index Carbon Delta Carbon Delta Carbon Data File File File File File File Segment 2 Segment 1 Segment 1.1 53

54. 性能测试 54

55. 测试用例 1. TPC-H benchmark 测试 (500GB) 2. 真实场景测试(十亿级数据) 3. 可扩展性测试 (100个节点,万亿级数据,103TB) • 存储层 – Parquet: • 分区列:time column (c1) – CarbonData: • 多维索引:c1~c10 • 计算层 – Spark 2.1 55

56.TPC-H: 查询速度 500GB,TPC-H查询响应时间 (秒) 3000 1.5X 2500 2000 1500 1000 1.5X 1.5X 2.0X 6.0X 2.5X 2.3X 500 0 parquet carbon 56

57. 为什么Query12快了6倍? /* TPC_H Query 12 - Shipping Modes and Order Priority */ SELECT L_SHIPMODE, SUM(CASE WHEN O_ORDERPRIORITY = '1-URGENT' OR O_ORDERPRIORITY = '2- HIGH' THEN 1 ELSE 0 END) AS HIGH_LINE_COUNT, SUM(CASE WHEN O_ORDERPRIORITY <> '1-URGENT' AND O_ORDERPRIORITY <> '2- HIGH' THEN 1 ELSE 0 END ) AS LOW_LINE_COUNT FROM ORDERS, LINEITEM WHERE O_ORDERKEY = L_ORDERKEY AND L_SHIPMODE IN ('MAIL','SHIP') AND L_COMMITDATE < L_RECEIPTDATE AND L_SHIPDATE < L_COMMITDATE AND L_RECEI PTDATE >= '1994-01-01' AND L_RECEIPTDATE < dateadd(mm, 1, cast('1995-09-01' as date)) GROUP BY L_SHIPMODE ORDER BY L_SHIPMODE Parquet资源使用(nmon) Carbon资源使用(nmon) 57

58.TPC-H: 入库速度和压缩率 Loading Thoughput Compression Ratio (MB/Sec/Node) (higher is better) 60 3.50 52 3.07 50 3.00 2.84 41 40 2.50 2.00 30 1.50 20 1.00 10 0.50 0 0.00 parquet carbon parquet carbon 58

59.过滤测试(真实场景) 过滤查询,c1到c10组合条件过滤 Filter 响应时间(sec) Task数 Query c1 c2 c3 c4 c5 c6 … c10 Parquet CarbonData Parquet CarbonData Q1 6.4 1.3 55 5 Q2 65 1.3 804 5 Q3 71 5.2 804 9 Q5 64 4.7 804 9 Q4 67 2.7 804 161 Q6 62 3.7 804 161 Q7 63 21.85 804 588 Q8 69 11.2 804 645 Carbon通过利用索引,减少Task任务下发,同时单Task内减少磁盘IO 59

60.大数据集测试 数据:2000亿到1万亿数据 (中国某省份半年 Response Time (% of 200B) 数据) 500.00% 400.00% 集群: 70 nodes, 1120 cores 300.00% 查询: 200.00% Q1: filter (c1~c4), select * 100.00% Q2: filter (c10), select * 0.00% Q3: full scan aggregate 200B 400B 600B 800B 1000B Q1 Q2 Q3 结果 l 过滤查询:5倍数据量,时间增加<1倍。 l 汇总分析:有效利用计算资源,可线性扩展 60

61. 成功案例介绍 61

62. 银行:使用CarbonData解决性能、规模、集群资源利用问题 业务场景:用户需要同时做复杂分析和多维查询,支持大规模数据 优化前 优化后 复杂分析: 多维查询: 1. 一份数据完成复杂分析和多维 1.只适合Join/Orderby 1、对6个关键维度查询,需要 点查,简化存储 的业务,不适合做点查; 建立4个二级索引,数据膨胀 2.扩展性不足,不能支 太大,数据同步复杂 2. 支持千亿数据量分析,秒级响 撑上万亿数据查询 2、无法用YARN统一资源管理 应,高扩展性 Impala HBase Spark 方案优化 CarbonData 复制 交易流水详单 交易流水详单 62

63. 电信:数仓分析场景,替换SybaseIQ和磁盘阵列 SybaseIQ CarbonData 典型业务场景优化对比(忙时性能对比): 业务 SQL特征 优化前 优化后 提升 服务器 业务1 多过滤(IO型) 10~20S 3S 5倍 业务2 高维计数TopN(全 15S 7S 3倍 光交换机 表扫描+用户数统计) 物理机或云 磁盘 IaaS 业务3 多过滤(IO型) 8倍 20S-30S 3S 阵列 业务3 高维聚合(千万级 超时 20~30S -- 原方案 新方案 汇聚+全表扫描) l 成本高:需要部署光交换机、 l 使用Carbon替换:整个产品融合为 磁盘阵列 一个HDFS存储,不依赖磁阵。 Carbon忙闲时性能对比(闲时并发15,忙时并发50): 业务 闲时 忙时 l 无法云化:数据存储在磁阵上, l 性能提升:Carbon索引提升IO效率 无法支持容器、VM部署 业务1 2S 3~5S 和分布式计算效率,提升整体性能 3~8倍 业务2 10S 20~30S l 查询性能差:在忙时查询性能 业务3 3S 4~5S 无法满足要求,需要扩容磁阵 l 规模:迁移15个业务,1000+张表; 每15分钟、1小时、1天加载一次数据 63

64. Hulu公司:上线CarbonData,提升OLAP业务查询效率 Hulu典型数据类型 关系型结 嵌套型结 宽表 构表 构表 Hulu OLAP应用 CarbonData 在Hulu OLAP引擎的优化与应用: http://mp.weixin.qq.com/s/XFjUdVvbD-RMWAvJID0zmA 64

65.总结:CarbonData的优秀DNA 查询: • 两级索引,减少IO:适合ad-hoc查询,任意维度组合查询场景 • 延迟解码,向量化处理:适合全表扫描、汇总分析场景 数据管理: • 增量入库,多级排序可调:由用户权衡入库时间和查询性能 • 增量更新,批量合并:支持快速更新事实表或维表,闲时做Compaction合并 大规模: • 计算与存储分离:支持从GB到PB大规模数据,万亿数据秒级响应 部署: • Hadoop Native格式:与大数据生态无缝集成,利用已有Hadoop集群资产 65

66. Summary Query: • Multi-level Index:interactive ad-hoc query, any dimension filtering • Vectorize and Lazy Decode:fast scan and aggregate query Data Management: • Incremental Load, multi-scope sorting: balanced between loading and query • Batch update and delete: fast update on fact table and dimension table, merge change when compaction Scale: • GB to PB scale,trillion records second level response time Deployment: • Hadoop Native: integrate with ecosystem on existing Hadoop deployment 66

67. What’s Next 下一步计划 67

68. CarbonData目标: 一份数据满足多种业务需求,与大数据生态无缝集成 Multi-dimensional OLAP Query CarbonData: Unified Storage Full Scan Query Small Scan Query 一份数据满足多种分析场景 详单过滤,海量数仓,数据集市,… 68

69.优化了三种IO访问模式,支持批量更新,满足一般数仓分析要求 足够了吗? 69

70. 大数据时代的数据处理和分析至少还有 时间序列 空间位置 图分析 文本检索 。。。 分析 分析 70

71. 一个业务场景 1 流水审计, 2 3 4 由交易信息构建资金交易关系网 根据交易关系网络发 根据社交网络、交易网络 多维度ad- 络、社交关系、和媒介关系网络 现个体或群体的异常 做进一步算法检测分析 hoc分析 交易行为 用户信息 维表X 维表Y 交易流水 维表Z 事实表B 事实表C 5 配置表 使用各种维度统计交易指标 事实表D 。。。 SQL分析 时间序列分析 图查询 文本检索、图分析 71

72. 场景抽象 • 这种场景在各行各业都有 – 打电话、发短信 – 点击广告 – 交易 – 看视频 – 传感器读数 – 。。。 • 他们的原始数据都是某种“行为事件”,或叫“原始详单”: – 时间 – 事件源,人或物 – 行为属性 – 行为产生的度量值 • 针对这些“行为事件”,不同阶段要做不同的业务分析 72

73. 当前的解决方案 SQL分析 图查询 文本检索 Store A ETL Store B ETL Store C 行为事件 时间序列分析 • 一个库干一件事情,部署多个集群 • 多次ETL转换,不断导入导出 Store D • 关联分析? 73

74. CarbonData 2.0追求的解决方案 SQL分析 时间序列分析 图分析 文本检索 CarbonData存储 • 一个存储系统提供多 种分析能力、API • 提供针对不同分析任 CarbonData 行为事件 领域模型 务优化的领域模型 详单 • 基于同一个基础格式, CarbonData基础格式 可关联分析 74

75. 领域分析的特点 时间序列分析 图分析 空间位置分析 文本检索 。。。 • 大吞吐写入 • 给定顶点在边 • 遍历区域内的 • 分词 • 高压缩率 上遍历 点 • 倒排、跳跃表 • 高并发点查 • 按边、顶点属 • 按区域聚合 • 模糊匹配 • 按时间聚合 性过滤 • 给定点计算 • 按维度聚合 • 按维度聚合 KNN距离 • 快速老化 • 迭代式计算 每个领域都有自己的“元素”和“操作” 75

76. 基于列式存储的领域模型 时间序列 图 空间位置 文本 列含义 时间 维度 度量 源顶点 目的顶点 边属性 经度 纬度 文本字段 行含义:时间 边 空间数据点 文档 序列数据点 Clustering:单维排序 Clustering:单维排序 Clustering: 多维空间聚集 Clustering:无 Scan:快速时间定位 Scan:按边遍历 Scan:快速定位区域和点 Scan:模糊匹配 Carbon基础格式: • 列式存储 • 基本类型+嵌套类型 • Clustering操作 • Scan操作 76

77. 领域模型查询过程 Query 1、领域模型由两部分组成: 3、提供多种DSL,符合 • Data*:模型数据 API & DSL 行业内领域分析语法要求 SQL-TS, SQL-GS, SQL-Search, Gremlin • DataMap:模型辅助数据 Spark Driver 2、将查询分解为两段式查询: Spark Driver DataMap • Q1查询DataMap • Q2读取Data*(根据领域 CarbonInputFormat Q1 模型有不同操作) Q2 Executor Executor Executor Scan* Scan* Scan* Data* Data* Data* Data Node Data Node Data Node 77

78. 欢迎参与Apache CarbonData社区 • website: http://carbondata.apache.org • Code: https://github.com/apache/carbondata • JIRA: https://issues.apache.org/jira/browse/CARBONDATA • Mail list: dev@carbondata.apache.org, user@carbondata.apache.org • 欢迎在Maillist上提问,共同探讨和开发CarbonData 2.0新特性 78

79.Copyright©2016 Huawei Technologies Co., Ltd. All Rights Reserved. The information in this document may contain predictive statements including, without limitation, statements regarding the future financial and operating results, future product portfolio, new technology, etc. There are a number of factors that could cause actual results and developments to differ materially from those expressed or implied in the predictive statements. Therefore, such information is provided for reference purpose only and constitutes neither an offer nor an acceptance. Huawei may change the information at any time without notice.

user picture
CarbonData是一种高性能大数据融合存储方案,以一份数据同时支持多种应用场景,通过多级索引、字典编码、预聚合、动态Partition等特性提升了IO扫描和计算性能,已在30+企业生产环境上部署应用,其中最大的单一集群数据规模达到十万亿。

相关文档