大数据OLAP几两类,一类是预计算,Kylin和Druid都属于这类。
另外一类是内存实时计算,Impala、Spark SQL、Presto、Phoenix属于这类。
第一类预计算和写入需要时间,计算性能快,并发高,缺点就是因为预聚合,不能查明细。
第二类可以查明细数据,但是由于内存实时计算,占用资源比较高,QPS偏低。
Kylin和Druid区别:
1.Druid使用大宽表模型预汇聚数据,而Kylin使用Cube,RollUP和DrillDown操作会合理些。
2.由于列式存储大宽表append性质,Druid可提供准实时查询。
Druids数据按datasorce存储(类似rdbms table),类Hive partition,Druid有Chunk,类Hive二级或者多级Partition,Chunk按时间分Segments存储,Segment内部按300-500G文件大小分Partition/Shard。
Druid存储目录
/druid/segments/<datasource>/<interval_start>-<interval_end>/<segmentGeneratetime>/<shardNum>
Druid逻辑数据结构
Druid物理数据存储:
目录包括
descriptor.json
index.zip
descriptor.json是这个Segment的描述文件,其内容也保存在Druid集群的元数据的druid_segments表中。其内容如下:
{
"dataSource": "AD_active_user",
"interval": "2018-04-01T00:00:00.000+08:00/2018-04-02T00:00:00.000+08:00",
"version": "2018-04-01T00:04:07.022+08:00",
"loadSpec": {
"type": "hdfs",
"path": "/druid/segments/AD_active_user/20180401T000000.000+0800_20180402T000000.000+0800/2018-04-01T00_04_07.022+08_00/1/index.zip"
},
"dimensions": "appkey,spreadid,pkgid",
"metrics": "myMetrics,count,offsetHyperLogLog",
"shardSpec": {
"type": "numbered",
"partitionNum": 1,
"partitions": 0
},
"binaryVersion": 9,
"size": 168627,
"identifier": "AD_active_user_2018-04-01T00:00:00.000+08:00_2018-04-02T00:00:00.000+08:00_2018-04-01T00:04:07.022+08:00_1"
}
index.zip文件中包括了该segment中的数据。它包含了以下三类文件:
version.bin:Segment内部标识的版本号,标识为v9. 内容为00000009。
xxxxx.smoosh:xxxxx从0开始编号,最大为2G,是为了满足Java内存文件映射MapperByteBuffer限制。在segment生成阶段,Druid会为每列数据生成对应的索引,并将压缩后的聚合数据以及索引存入到以列命名的drd文件中(比如上segment的__time.drd,index.drd,appkey.drd...)。所有的*drd文件最终被合并成*.smoosh文件。其中压缩编码后的每列原始数据包含两部分1)使用Jackson序列化的ColumnDescriptor,包含列数据的元信息,比如数据的类型,是否包含multi-value。。。2)其余部分为编码以后的二进制数据。
meta.smoosh: 该文件用于记录该segment数据的元信息。文件格式为csv。包含两部分:
第一行为文件头:
其中v1代表segment的版本号,2147483647(2GB)为xxxxx.smoosh文件的最大大小。1表示分片数量,即index.zip文件中xxxxx.smoosh文件的个数。
从第二行开始为文件体:
每行都是4列,column表示列名,smooshid表示分片编号,从0开始编号,对于包含多个xxxxx.smoosh文件的index.zip,meta.smooth文件会记载多个xxxxx.smoosh文件中每列的元信息。startPos为该列在第smooshid分片中的开始位置,endPos为其结束位置。
Druid包括很多分布式算法:
行程编码字符串
RoaringBitmap/Bitmap索引
BitMap压缩技术
hyberloglog 预估算法等。
值得一提的是Druid存储 histrical和计算Broker分离,这点ES没法与其相比,存储和计算分离好处是横向扩展容易,多租户支撑较好。这点Pulsar与Druid类似。
物理存储转自原文:https://blog.csdn.net/mytobaby00/article/details/79801425
网友评论