Druid总结

1, 什么时候druid realtime节点数据持久化到deep storage

 SegmentGranularity and windowPeriod control when the segment is persisted in the deep storage and handed over to the historical node. 
 Realtime node collects data for an interval until the (segmentGranularity + windowPeriod) for that segment interval elapses. After this period metadata for the segment is added to the database and segment is pushed to deep storage.

{
  "dataSources" : {
  "metrics-kafka" : {
    "spec" : {
        "dataSchema" : {
        "dataSource" : "pageviews-kafka",
        "parser" : {
              "type" : "string",
              "parseSpec" : {
                   "timestampSpec" : {
                        "column" : "time",
                        "format" : "auto"
                    },
          "dimensionsSpec" : {
            "dimensions" : ["url", "user"],
            "dimensionExclusions" : [
              "timestamp",
              "value"
            ]
          },
          "format" : "json"
        }
      },
      "granularitySpec" : {
        "type" : "uniform",
        "segmentGranularity" : "hour",
        "queryGranularity" : "none"
      },
      "metricsSpec" : [
        {
          "name": "views",
         "type": "count"
        },
       {
          "name": "latencyMs", 
          "type": "doubleSum",
          "fieldName": "latencyMs"
        }
      ]
    },
    "ioConfig" : {
      "type" : "realtime"
    },
    "tuningConfig" : {
      "type" : "realtime",
      "maxRowsInMemory" : "100000",
      "intermediatePersistPeriod" : "PT10M",
      "windowPeriod" : "PT10M"
    }
  },
  "properties" : {
    "task.partitions" : "1",
    "task.replicants" : "1",
    "topicPattern" : "pageviews"
  }
}
},
"properties" : {
"zookeeper.connect" : "localhost",
"druid.discovery.curator.path" : "/druid/discovery",
"druid.selectors.indexing.serviceName" : "druid/overlord",
"commit.periodMillis" : "15000",
"consumer.numThreads" : "2",
"kafka.zookeeper.connect" : "localhost",
"kafka.group.id" : "tranquility-kafka"
}
}

2 . 关于segment合并的问题.

对于realtime node, segment的持久化取决与两个条件:
(1).  intermediatePersistPeriod
(2).  maxRowsInMemory
以上任意的一个条件满足,就会生成一个segment文件持久化到磁盘;
若干segment granularity  设置为hour,那么如果当前时间>segment granularity + windowPeriod 
就会合并当前小时内生成的所有segment文件,然后保存到deep storage.

3.Druid是否支持非结构化数据?

Druid不支持非结构化数据,数据的摄入依赖定义好的schema.

4.Druid支持什么的格式数据入库?

Druid支持json, cvs, tsv或者有明确分隔符的原始数据.

5.Druid数据写入失败的原有?

实时: 实时流的数据写入有一个以当前时间为基准的时间窗口(windowPeriod)设置,若待写入数据的时间不在该窗口内,则无法写入Druid.
离线:离线写入的数据时间需在指定的interval范围内.

6 . 实时写入方式的Segment没有落地的原因?

Druid更新Metadata Storage失败, 需要确保连接Metadata Storage正确.
历史节点没有足够的容量用于本地缓存Segment
Deep Storage连接配置不正确.

7 . 如何更新历史数据?

Druid中历史数据的更新基于Segment,新的Segment生成,就会替代旧的Segment.

8. 如何监控批量入Druid方式的任务?

以Hadoop导入数据方式为例:
(1) 首先离线ETL处理后把待写入Druid的数据放置在指定HDFS路径中.

(2) 然后通过inputSpec发送Http post给Overlord节点并获取返回的taskId
(3) 最后定期利用taskId向Overlord节点发送Http Get请求检查任务状态.

9.Druid是内存数据库吗?

早起的Druid的确被设计为内存数据库,所有数据都在内存中,后来由于应用需要支持更多数据,内存大小提升有限和SSD技术的发展, Druid采用了内存映射加使用配置管理的方式,就是将最需要被查询的数据放在内存中,超出部分和不常用的数据放在磁盘或SSD中.

10 . 什么是Druid的深度存储?

Druid依赖深度存储系统保存Segment文件, 如果历史节点挂掉, Druid可以从深度存储中加载Segment恢复数据支持查询.深度存储系统可以使用hdfs,s3等.

11 . Zookeeper 会不会因为单点失效影响Druid?

首先,Zookeeper 可以部署为多节点;
其次,即使全部失败了,Druid的查询部分也可以正常对外服务,但是新写入的数据将无法进入系统,因为Druid需要通过Zookeeper管理Segment.

12 . Coordinator会不会存在单点失效问题?

Coordinator的运行采用Master/Slave模式,每次只有一个Master工作, 多个slave节点处于预备状态, Coordinator和Zookeeper一样,如果全部失效,将影响Segment的分配和管理,但是对于已有的查询不影响.

13.查询是否会绕过Coordinator?

Coordinator只会参与和管理Segment,而不参与查询.

14 . Druid和Elasticsearch比较?

Druid是通过数据预聚合的方式压缩数据并提升访问速度,但是原始数据将丢失. Elasticsearch保存原始数据并通过建立倒排索引的方式对文档索引查询,因此适合检索的场景,Druid需要预先定义数据的Schema,Elasticsearch则Schema free,因此可以写入各种json数据.

15 . 如何设置Broker节点的内存?

Broker节点内存主要利用JVM堆内内存合并历史节点和实时节点的查询结果,而堆外内存则提供group by查询操作时处理线程使用, Broker节点内存设置注意事项如下:
JVM参数:-XX:MaxDirectMemorySize指定最大的堆外内存大小.
MaxDirectMemorySize >= (processing.numThreads + 1) * druid.processing.buffer.sizeBytes.

16 . 如何设置Historical节点的内存?

Historical节点利用堆外内存存储中间计算结果集,并通过内存映射的方式装载Segment, 因此可以综合两方面的数据获得推荐内存配置,Segment数据可用内存大小的计算公式如下:
memory_for_segments = total_memory-heap-direct_memory-jvm_overhead

Historical节点内存设置注意事项如下:
JVM参数-XX:MaxDirectMemorySize指定最大的堆外内存大小
MaxDirectMemorySize >= (processing.numThreads + 1) * druid.processing.buffer.sizeBytes.

17 . Historical节点配置的maxSize含义?

maxSize 用于设置一个节点的最大累计Segment大小(单位是字节).修改这个参数将影响内存和磁盘的使用比例.如果这个参数的值大于总的内存容量,则很容易引起系统过于频繁换页,导致查询过慢.

18 . 查询结果返回为空原因?

数据源不存在
查询的字段不存在
查询的数据时间范围不匹配.

19 . 查询实时写入的数据时,数据来源?

已完成切换(Hand off)的Segment数据将被加载至历史节点中供查询.
已完成切换(Hand off)的Segment数据由实时节点或中间管理者中的Peon提供查询.

20 . Druid的外部依赖

深度存储(HDFS)
元数据管理数据库(Mysql)
协调管理(Zookeeper)

21 . Druid如何配置Segment的保留时间

Druid中已生成的Segment会永久存储在Deep Storage中, 但是可以利用Coordinator的管理页面(http://coordinator_ip:port)配置指定DataSource的Segment在本地服务器上的保留时间.

22 . 如何做到Druid服务升级不停止对外服务?

升级顺序如下:
(1) 历史节点
(2)统治节点
(3)中间管理者节点
(4)查询节点
(5)协调节点
因为涉及正在处理的写入的任务,因此在中间管理者节点中有如下两种方式进行任务回复.
设置druid.index.task.restoreTasksOnRestart=true.服务重启后可以回复任务状态.
首先,停止MiddleManager服务状态, 通过HTTP POST 请求 http://middlemanager_ip:port/druid/worker/v1/disable .该服务将不在接收新任务,然后,确认该服务的所有任务已完成. 通过HTTP GET请求http://middlemanager_ip:port/druid/worker/v1/tasks 查询. 最后,重启升级后的MiddleManager服务并开启任务接收,通过HTTP POST请求http://middlemanager_ip:port/druid/worker/v1/enable

23 . 如何做基数统计

使用内置聚合器HyperUnique, 其基于HyperLogLog算法,支持并集操作,统计结果误差为2%左右.
使用扩展库DataSketch, 七基于ThetaSketch算法,支持交集,并集和差集运算,可配置最大去重精度.

24 . 如何做留存分析?

比如求满足留存条件"第一周网站浏览过商品A后,第二周又来该网站浏览购买了商品A"的独立用户数,可以利用ThetaSketch聚合器分别求出满足上诉两周条件的独立用户数,然后利用postAggregation对两个结果做交集运算,即为留存下来的独立用户数.

25 . 关于mmap参数

查看map文件句柄
cat /proc/$PID/maps | wc -l
cat /proc/sys/vm/max_map_count

增加map文件句柄数
临时增加: sudo sysctl -w vm.max_map_count=1024000
永久增加:
echo 'vm.max_map_count=1024000' > /etc/sysctl.conf  
sudo sysctl -p

vim /etc/security/limits.conf
* soft nofile 1024000
* hard nofile 1024000
如果希望设置更大的值,需要重新编译内核才可以.

26 . segment 过期

https://groups.google.com/forum/#!topic/druid-development/SBLwuatv4TM
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 157,298评论 4 360
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 66,701评论 1 290
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 107,078评论 0 237
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,687评论 0 202
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,018评论 3 286
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,410评论 1 211
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,729评论 2 310
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,412评论 0 194
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,124评论 1 239
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,379评论 2 242
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 31,903评论 1 257
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,268评论 2 251
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 32,894评论 3 233
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,014评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,770评论 0 192
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,435评论 2 269
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,312评论 2 260

推荐阅读更多精彩内容