4-Druid数据摄入-1 - CSDN博客

博客 学院 下载 GitChat 论坛 问答 商城 VIP 活动 招聘 ITeye 码云 CSTO   写博客  发Chat 登录 注册 4-Druid数据摄入-1 翻译 2017年11月19日 12:06:50 标签: Druid . . 一、数据格式 【1】Data Formats http://druid.io/docs/0.10.1/ingestion/data-formats.html (1)摄入规范化数据:JSON、CSV、TSV (2)自定义格式 Regex parser or the JavaScript parsers 来解析数据 (3)其他格式 http://druid.io/docs/0.10.1/development/extensions.html 【2】Configuration 对数据格式进行配置dataSchema中的parseSpec字段 具体见: http://druid.io/docs/0.10.1/ingestion/data-formats.html 二、数据schema 主要是摄入的规则ingestion Spec 摄入规则主要包含3个部分 { “dataSchema” : { … }, “ioConfig” : { … }, “tuningConfig” : { … } } Field Type Description Required dataSchema JSON Object 标识摄入数据的schema,不同specs可共享 yes ioConfig JSON Object 标识data从哪来,到哪去。根据不同的ingestion method不同 yes tuningConfig JSON Object 标识如何调优不同的ingestion parameters。根据不同的ingestion method不同 no DataSchema “dataSchema” : { “dataSource” : “wikipedia” , “parser” : { “type” : “string” , “parseSpec” : { “format” : “json” , “timestampSpec” : { “column” : “timestamp” , “format” : “auto” }, “dimensionsSpec” : { “dimensions” : [ “page” , “language” , “user” , “unpatrolled” , “newPage” , “robot” , “anonymous” , “namespace” , “continent” , “country” , “region” , “city” , { “type” : “long” , “name” : “countryNum” }, { “type” : “float” , “name” : “userLatitude” }, { “type” : “float” , “name” : “userLongitude” } ], “dimensionExclusions” : [], “spatialDimensions” : [] } } }, “metricsSpec” : [{ “type” : “count” , “name” : “count” }, { “type” : “doubleSum” , “name” : “added” , “fieldName” : “added” }, { “type” : “doubleSum” , “name” : “deleted” , “fieldName” : “deleted” }, { “type” : “doubleSum” , “name” : “delta” , “fieldName” : “delta” }], “granularitySpec” : { “segmentGranularity” : “DAY” , “queryGranularity” : “NONE” , “intervals” : [ “2013-08-31/2013-09-01” ] } } Field Type Description Required dataSource String 要摄入的datasource名称,Datasources可看做为表 yes parser JSON Object ingested data如何解析 yes metricsSpec JSON Object array aggregators 器列表 yes granularitySpec JSON Object 如何建立.segments,如何上卷数据 yes Parser “parser” : { “type” : “string” , “parseSpec” : { “format” : “json” , “timestampSpec” : { “column” : “timestamp” , “format” : “auto” }, “dimensionsSpec” : { “dimensions” : [ “page” , “language” , “user” , “unpatrolled” , “newPage” , “robot” , “anonymous” , “namespace” , “continent” , “country” , “region” , “city” , { “type” : “long” , “name” : “countryNum” }, { “type” : “float” , “name” : “userLatitude” }, { “type” : “float” , “name” : “userLongitude” } ], “dimensionExclusions” : [], “spatialDimensions” : [] } } } type 默认为string,其他数据格式见: extensions list . String Parser Field Type Description Required type String 一般为string,或在Hadoop indexing job中使用hadoopyString no parseSpec JSON Object 标识格式format和、imestamp、dimensions yes ParseSpec 两个功能: String Parser用parseSpec判定将要处理rows的数据格式( JSON, CSV, TSV) 所有的Parsers 用parseSpec判定将要处理rows的 timestamp 和 dimensionsAll format字段默认为tsv格式 JSON ParseSpec Field Type Description Required format String json . no timestampSpec JSON Object timestamp的列和format yes dimensionsSpec JSON Object 数据的dimensions yes flattenSpec JSON Object 标识嵌套JSON如何打平的配置,详见 Flattening JSON no JSON Lowercase ParseSpec 将输入的JSON数据小写处理 Field Type Description Required format String T jsonLowercase . yes timestampSpec JSON Object timestamp的列和format yes dimensionsSpec JSON Object 数据的dimensions yes CSV ParseSpec 使用String Parser 加载CSV,Strings用net.sf.opencsv library. parsed Field Type Description Required format String csv . yes timestampSpec JSON Object timestamp的列和format yes dimensionsSpec JSON Object 数据的dimensions yes listDelimiter String 多值dimensions的分割符 no (default == ctrl+A) columns JSON array 数据列 yes TimestampSpec Field Type Description Required column String timestamp的列 yes format String iso, millis, posix, auto or any Joda time format. no (default == ‘auto’ DimensionsSpec Field Type Description Required dimensions JSON array dimension schema 对象或dimension names,标识维度列,否则将timestamp列外的所以string列作为维度列 yes dimensionExclusions JSON String array ingestion之外的dimensions no (default == [] spatialDimensions JSON Object array spatial dimensions no (default == [] Dimension Schema dimension schema标识要摄入dimension的type和name,不特殊标识type时为string “dimensionsSpec” : { “dimensions” : [ “page” , “language” , “user” , “unpatrolled” , “newPage” , “robot” , “anonymous” , “namespace” , “continent” , “country” , “region” , “city” , { “type” : “long” , “name” : “countryNum” }, { “type” : “float” , “name” : “userLatitude” }, { “type” : “float” , “name” : “userLongitude” } ], “dimensionExclusions” : [], “spatialDimensions” : [] } GranularitySpec “granularitySpec” : { “segmentGranularity” : “DAY” , “queryGranularity” : “NONE” , “intervals” : [ “2013-08-31/2013-09-01” ] } granularity spec 默认是uniform,可以通过type字段配置,目前支持uniform和 arbitrary types Uniform Granularity Spec 标识uniform intervals. Field Type Description Required segmentGranularity string 建立segments的周期 no (default == ‘DAY’) queryGranularity string 可query结果的最小granularity,数据已这个granularity在segment中granularity 例如: “minute” 说明 data已分钟级别的granularity聚合,也就是当 (minute(timestamp), dimensions) tuple中有collisions时,将用aggregators聚合值,而不是对各个rows排序 no (default == ‘NONE’) rollup boolean rollup or not no (default == true) intervals string raw data摄入的intervals列表,对于real-time摄取忽略 yes for batch, no for real-time Arbitrary Granularity Spec 按照segments的大小决定intervals,不支持real-time Field Type Description Required queryGranularity string 同上 no (default == ‘NONE’) rollup boolean rollup or not no (default == true) intervals string 同上 yes for batch, no for real-time 三、Schema Design Druid将规范化后的数据分为3类:a timestamp, a dimension, or a measure (or a metric/aggregator as they are known in Druid). 更多信息: Timestamp每行必须,数据以时间分区,每个query有一个时间filter ,Query results 可以用时间分桶( minutes, hours, days, and so on) Dimensions可以filtered或者grouped by,一般是单Strings,Strings数组,单Longs,单Floats Metrics可以aggregated,可排序 一般生产tables(datasources)少于100个维度列,100个metrics Numeric dimensions 数据类型的维度 (Long or Float) 必须在dimensionsSpec中标识,否则默认是字符串,数值型列在group时快,但由于没有索引在过滤时慢, Dimension Schema . High cardinality dimensions (e.g. unique IDs) 实际中count-distinct不需要,对IDs列排序将杀掉 roll-up ,影响压缩,再aggregations带着排序的IDS,增加性能减少存储,Druid’s hyperUnique aggregator 基于Hyperloglog, here . Nested dimensions 不支持嵌套维度,下面 {“foo”:{“bar”: 3}} 在索引前转化为: {“foo_bar”: 3} Counting the number of ingested events count aggregator 在数据摄入阶段计算摄入的数据量,在查询时用 longSum aggregator.,根据这个计算结果决定roll-up 的速率 ingestion spec: … “metricsSpec” : [ { “type” : “count”, “name” : “count” }, … : 按照如下查询摄入的量 … “aggregations”: [ { “type”: “longSum”, “name”: “numIngestedEvents”, “fieldName”: “count” }, … Schema-less dimensions dimensions在spec缺失时,所有非timestamp 的列作为string型作为维度 Including the same column as a dimension and a metric 一个列作为维度,同时由于去重计算需要,也作为hyperUnique,作为metric,这需要在ETL组织时就增加出来, ETL中复制一列=: {“device_id_dim”:123, “device_id_met”:123} 在metricsSpec : { “type” : “hyperUnique”, “name” : “devices”, “fieldName” : “device_id_met” } device_id_dim 自动作为维度 四、Schema Changes datasources可以在任何时间改变,支持segments中存在不同的schemas Replacing Segments segments标识:datasource, interval, version, and partition number.partition number只在同一个granularity产生多个segments时可见,如hourly segments,在一个小时中的数据量超出一个segment存储范围,同一小时产生多个segments,以partition number区分 foo_2015-01-01/2015-01-02_v1_0 foo_2015-01-01/2015-01-02_v1_1 foo_2015-01-01/2015-01-02_v1_2 dataSource = foo, interval = 2015-01-01/2015-01-02, version = v1, partitionNum = 0. 如果此时用新的schema索引数据,新产生的segment有更高的version id。 foo_2015-01-01/2015-01-02_v2_0 foo_2015-01-01/2015-01-02_v2_1 foo_2015-01-01/2015-01-02_v2_2 Druid是批量构建索引的(either Hadoop-based or IndexTask-based),保证interval-by-interval间的原子性更新,例如直到 2015-01-01/2015-01-02 间隔内的 v2 segments加载到集群中后吗,queries才不再使用 v1 segments,此时v1从集群中卸载。 updates是夸过个segment的,指示在每个interval内是原子性的,不是整个更新的如下: foo_2015-01-01/2015-01-02_v1_0 foo_2015-01-02/2015-01-03_v1_1 foo_2015-01-03/2015-01-04_v1_2 v2 segments 完全更新前,混存: foo_2015-01-01/2015-01-02_v1_0 foo_2015-01-02/2015-01-03_v2_1 foo_2015-01-03/2015-01-04_v1_2 此时的查询可以命中V1和V2的混合 In this case, queries may hit a mixture of v1 and v2 segments. Different Schemas Among Segments datasource的segments可以有不同的schemas,如果一个stringcolumn (dimension) 在一个segment A中存在,另一个B不存在,认为B中该维度为null。对于numeric column,Aggregations跳过这条  目前您尚未登录,请 登录 或 注册 后进行评论 … … … … … … … . hjw199089 . 原创 115 粉丝 13 喜欢 7 评论 3 . 等级: 访问量: 6万+ 积分: 2143 排名: 2万+ . 博主最新文章 更多文章 . Calcite-[1]-Tutorial-2 . Hive和sparksql中的dayofweek . Presto-[16]-Presto UDFs开发 . 数据资产与驱动基石 . 好书推荐-Designing Data-Intensive Applications . . 文章分类 [1]Hive 13篇 . [2]Tools 8篇 . [3]Spark 31篇 . [4]Scala 3篇 . [5]Mysql 2篇 . [6]sparkMLib 5篇 . [7]python 3篇 . [8]Hadoop 7篇 . [9]Java 15篇 . [10]book-favorite 4篇 . [11]设计模式 5篇 . [12]Kafka 3篇 . [13]spark streaming 13篇 . [14]storm 11篇 . [15]Data Mining 1篇 . [16]统计学习方法 1篇 . [17]Redis 5篇 . [18]机器学习 17篇 . [19]DataStruct 1篇 . [20]Basic 5篇 . [21]Druid 7篇 . [22]Calcite 6篇 . [23]Presto 17篇 . [24]Alluxio 1篇 . 展开  文章存档 2018年4月 2篇 . 2018年3月 1篇 . 2018年2月 3篇 . 2018年1月 13篇 . 2017年12月 33篇 . 2017年11月 9篇 . 2017年10月 4篇 . 2017年9月 9篇 . 2017年8月 4篇 . 2017年7月 23篇 . 2017年6月 6篇 . 2017年5月 28篇 . 2017年4月 5篇 . 2017年3月 8篇 . 2017年2月 6篇 . 2017年1月 12篇 . 2016年12月 14篇 . 2016年10月 1篇 . 2016年9月 1篇 . 2016年7月 1篇 . 展开  博主热门文章 sublime中分号替换成换行  11152 spark-DataFrame学习记录-[2]解决spark-dataframe的JOIN操作之后产生重复列(Reference ’***’ is ambiguous问题解决) …  3643 spark-DataFrame学习记录-[3]以Json字符串构建RDD转DF  3573 hive-随机取样  2904 基于sparkMLlib的机器学习_[1]_基本数据类型[2]向量标签LabeledPoint  2736 Spark SQL中防止数据倾斜sqlContext.sql中添加distribute by rand()  2189 spark-spark-SparkSQL的3种Join实现(转)  1566 Spark Streaming场景应用-Kafka数据读取方式  1520 iterm 分屏切换快捷键与配色设置  1515 Spark SQL通过JDBC连接MySQL读写数据  1427 联系我们 请扫描二维码联系客服 webmaster@csdn.net 400-660-0108 QQ客服 客服论坛 关于 招聘 广告服务 百度 ©1999-2018 CSDN版权所有 京ICP证09002463号 经营性网站备案信息 网络110报警服务 中国互联网举报中心 北京互联网违法和不良信息举报中心 .  .  .  . . 加入CSDN,享受更精准的内容推荐,与500万程序员共同成长! 登录 注册 . . 

#mysql #redis #python #hadoop #存储