Druid總結(jié)

1, 什么時候druid realtime節(jié)點數(shù)據(jù)持久化到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 . 關(guān)于segment合并的問題.

對于realtime node, segment的持久化取決與兩個條件:
(1).  intermediatePersistPeriod
(2).  maxRowsInMemory
以上任意的一個條件滿足,就會生成一個segment文件持久化到磁盤;
若干segment granularity  設(shè)置為hour,那么如果當(dāng)前時間>segment granularity + windowPeriod 
就會合并當(dāng)前小時內(nèi)生成的所有segment文件痴脾,然后保存到deep storage.

3.Druid是否支持非結(jié)構(gòu)化數(shù)據(jù)?

Druid不支持非結(jié)構(gòu)化數(shù)據(jù),數(shù)據(jù)的攝入依賴定義好的schema.

4.Druid支持什么的格式數(shù)據(jù)入庫?

Druid支持json, cvs, tsv或者有明確分隔符的原始數(shù)據(jù).

5.Druid數(shù)據(jù)寫入失敗的原有?

實時: 實時流的數(shù)據(jù)寫入有一個以當(dāng)前時間為基準(zhǔn)的時間窗口(windowPeriod)設(shè)置,若待寫入數(shù)據(jù)的時間不在該窗口內(nèi)艘儒,則無法寫入Druid.
離線:離線寫入的數(shù)據(jù)時間需在指定的interval范圍內(nèi).

6 . 實時寫入方式的Segment沒有落地的原因?

Druid更新Metadata Storage失敗, 需要確保連接Metadata Storage正確.
歷史節(jié)點沒有足夠的容量用于本地緩存Segment
Deep Storage連接配置不正確.

7 . 如何更新歷史數(shù)據(jù)?

Druid中歷史數(shù)據(jù)的更新基于Segment,新的Segment生成夫偶,就會替代舊的Segment.

8. 如何監(jiān)控批量入Druid方式的任務(wù)?

以Hadoop導(dǎo)入數(shù)據(jù)方式為例:
(1) 首先離線ETL處理后把待寫入Druid的數(shù)據(jù)放置在指定HDFS路徑中.

(2) 然后通過inputSpec發(fā)送Http post給Overlord節(jié)點并獲取返回的taskId
(3) 最后定期利用taskId向Overlord節(jié)點發(fā)送Http Get請求檢查任務(wù)狀態(tài).

9.Druid是內(nèi)存數(shù)據(jù)庫嗎?

早起的Druid的確被設(shè)計為內(nèi)存數(shù)據(jù)庫界睁,所有數(shù)據(jù)都在內(nèi)存中,后來由于應(yīng)用需要支持更多數(shù)據(jù)兵拢,內(nèi)存大小提升有限和SSD技術(shù)的發(fā)展, Druid采用了內(nèi)存映射加使用配置管理的方式翻斟,就是將最需要被查詢的數(shù)據(jù)放在內(nèi)存中,超出部分和不常用的數(shù)據(jù)放在磁盤或SSD中.

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

Druid依賴深度存儲系統(tǒng)保存Segment文件, 如果歷史節(jié)點掛掉, Druid可以從深度存儲中加載Segment恢復(fù)數(shù)據(jù)支持查詢.深度存儲系統(tǒng)可以使用hdfs,s3等.

11 . Zookeeper 會不會因為單點失效影響Druid说铃?

首先访惜,Zookeeper 可以部署為多節(jié)點;
其次腻扇,即使全部失敗了疾牲,Druid的查詢部分也可以正常對外服務(wù),但是新寫入的數(shù)據(jù)將無法進入系統(tǒng)衙解,因為Druid需要通過Zookeeper管理Segment.

12 . Coordinator會不會存在單點失效問題阳柔?

Coordinator的運行采用Master/Slave模式,每次只有一個Master工作, 多個slave節(jié)點處于預(yù)備狀態(tài), Coordinator和Zookeeper一樣,如果全部失效蚓峦,將影響Segment的分配和管理舌剂,但是對于已有的查詢不影響.

13.查詢是否會繞過Coordinator?

Coordinator只會參與和管理Segment,而不參與查詢.

14 . Druid和Elasticsearch比較?

Druid是通過數(shù)據(jù)預(yù)聚合的方式壓縮數(shù)據(jù)并提升訪問速度暑椰,但是原始數(shù)據(jù)將丟失. Elasticsearch保存原始數(shù)據(jù)并通過建立倒排索引的方式對文檔索引查詢霍转,因此適合檢索的場景,Druid需要預(yù)先定義數(shù)據(jù)的Schema一汽,Elasticsearch則Schema free,因此可以寫入各種json數(shù)據(jù).

15 . 如何設(shè)置Broker節(jié)點的內(nèi)存?

Broker節(jié)點內(nèi)存主要利用JVM堆內(nèi)內(nèi)存合并歷史節(jié)點和實時節(jié)點的查詢結(jié)果避消,而堆外內(nèi)存則提供group by查詢操作時處理線程使用, Broker節(jié)點內(nèi)存設(shè)置注意事項如下:
JVM參數(shù):-XX:MaxDirectMemorySize指定最大的堆外內(nèi)存大小.
MaxDirectMemorySize >= (processing.numThreads + 1) * druid.processing.buffer.sizeBytes.

16 . 如何設(shè)置Historical節(jié)點的內(nèi)存?

Historical節(jié)點利用堆外內(nèi)存存儲中間計算結(jié)果集,并通過內(nèi)存映射的方式裝載Segment召夹, 因此可以綜合兩方面的數(shù)據(jù)獲得推薦內(nèi)存配置岩喷,Segment數(shù)據(jù)可用內(nèi)存大小的計算公式如下:
memory_for_segments = total_memory-heap-direct_memory-jvm_overhead

Historical節(jié)點內(nèi)存設(shè)置注意事項如下:
JVM參數(shù)-XX:MaxDirectMemorySize指定最大的堆外內(nèi)存大小
MaxDirectMemorySize >= (processing.numThreads + 1) * druid.processing.buffer.sizeBytes.

17 . Historical節(jié)點配置的maxSize含義?

maxSize 用于設(shè)置一個節(jié)點的最大累計Segment大小(單位是字節(jié)).修改這個參數(shù)將影響內(nèi)存和磁盤的使用比例.如果這個參數(shù)的值大于總的內(nèi)存容量,則很容易引起系統(tǒng)過于頻繁換頁监憎,導(dǎo)致查詢過慢.

18 . 查詢結(jié)果返回為空原因?

數(shù)據(jù)源不存在
查詢的字段不存在
查詢的數(shù)據(jù)時間范圍不匹配.

19 . 查詢實時寫入的數(shù)據(jù)時纱意,數(shù)據(jù)來源?

已完成切換(Hand off)的Segment數(shù)據(jù)將被加載至歷史節(jié)點中供查詢.
已完成切換(Hand off)的Segment數(shù)據(jù)由實時節(jié)點或中間管理者中的Peon提供查詢.

20 . Druid的外部依賴

深度存儲(HDFS)
元數(shù)據(jù)管理數(shù)據(jù)庫(Mysql)
協(xié)調(diào)管理(Zookeeper)

21 . Druid如何配置Segment的保留時間

Druid中已生成的Segment會永久存儲在Deep Storage中, 但是可以利用Coordinator的管理頁面(http://coordinator_ip:port)配置指定DataSource的Segment在本地服務(wù)器上的保留時間.

22 . 如何做到Druid服務(wù)升級不停止對外服務(wù)?

升級順序如下:
(1) 歷史節(jié)點
(2)統(tǒng)治節(jié)點
(3)中間管理者節(jié)點
(4)查詢節(jié)點
(5)協(xié)調(diào)節(jié)點
因為涉及正在處理的寫入的任務(wù),因此在中間管理者節(jié)點中有如下兩種方式進行任務(wù)回復(fù).
設(shè)置druid.index.task.restoreTasksOnRestart=true.服務(wù)重啟后可以回復(fù)任務(wù)狀態(tài).
首先鲸阔,停止MiddleManager服務(wù)狀態(tài), 通過HTTP POST 請求 http://middlemanager_ip:port/druid/worker/v1/disable .該服務(wù)將不在接收新任務(wù)偷霉,然后迄委,確認該服務(wù)的所有任務(wù)已完成. 通過HTTP GET請求http://middlemanager_ip:port/druid/worker/v1/tasks 查詢. 最后,重啟升級后的MiddleManager服務(wù)并開啟任務(wù)接收类少,通過HTTP POST請求http://middlemanager_ip:port/druid/worker/v1/enable

23 . 如何做基數(shù)統(tǒng)計

使用內(nèi)置聚合器HyperUnique叙身, 其基于HyperLogLog算法,支持并集操作,統(tǒng)計結(jié)果誤差為2%左右.
使用擴展庫DataSketch, 七基于ThetaSketch算法硫狞,支持交集曲梗,并集和差集運算,可配置最大去重精度.

24 . 如何做留存分析?

比如求滿足留存條件"第一周網(wǎng)站瀏覽過商品A后妓忍,第二周又來該網(wǎng)站瀏覽購買了商品A"的獨立用戶數(shù),可以利用ThetaSketch聚合器分別求出滿足上訴兩周條件的獨立用戶數(shù)愧旦,然后利用postAggregation對兩個結(jié)果做交集運算世剖,即為留存下來的獨立用戶數(shù).

25 . 關(guān)于mmap參數(shù)

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

增加map文件句柄數(shù)
臨時增加: 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
如果希望設(shè)置更大的值,需要重新編譯內(nèi)核才可以.

26 . segment 過期

https://groups.google.com/forum/#!topic/druid-development/SBLwuatv4TM
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末笤虫,一起剝皮案震驚了整個濱河市旁瘫,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌琼蚯,老刑警劉巖酬凳,帶你破解...
    沈念sama閱讀 221,576評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異遭庶,居然都是意外死亡宁仔,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,515評論 3 399
  • 文/潘曉璐 我一進店門峦睡,熙熙樓的掌柜王于貴愁眉苦臉地迎上來翎苫,“玉大人,你說我怎么就攤上這事榨了〖宓” “怎么了?”我有些...
    開封第一講書人閱讀 168,017評論 0 360
  • 文/不壞的土叔 我叫張陵龙屉,是天一觀的道長呐粘。 經(jīng)常有香客問我,道長转捕,這世上最難降的妖魔是什么作岖? 我笑而不...
    開封第一講書人閱讀 59,626評論 1 296
  • 正文 為了忘掉前任,我火速辦了婚禮五芝,結(jié)果婚禮上鳍咱,老公的妹妹穿的比我還像新娘。我一直安慰自己与柑,他們只是感情好谤辜,可當(dāng)我...
    茶點故事閱讀 68,625評論 6 397
  • 文/花漫 我一把揭開白布蓄坏。 她就那樣靜靜地躺著,像睡著了一般丑念。 火紅的嫁衣襯著肌膚如雪涡戳。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,255評論 1 308
  • 那天脯倚,我揣著相機與錄音渔彰,去河邊找鬼。 笑死推正,一個胖子當(dāng)著我的面吹牛恍涂,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播植榕,決...
    沈念sama閱讀 40,825評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼再沧,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了尊残?” 一聲冷哼從身側(cè)響起炒瘸,我...
    開封第一講書人閱讀 39,729評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎寝衫,沒想到半個月后顷扩,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,271評論 1 320
  • 正文 獨居荒郊野嶺守林人離奇死亡慰毅,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,363評論 3 340
  • 正文 我和宋清朗相戀三年隘截,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片汹胃。...
    茶點故事閱讀 40,498評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡技俐,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出统台,到底是詐尸還是另有隱情雕擂,我是刑警寧澤,帶...
    沈念sama閱讀 36,183評論 5 350
  • 正文 年R本政府宣布贱勃,位于F島的核電站井赌,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏贵扰。R本人自食惡果不足惜仇穗,卻給世界環(huán)境...
    茶點故事閱讀 41,867評論 3 333
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望戚绕。 院中可真熱鬧纹坐,春花似錦、人聲如沸舞丛。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,338評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至谷誓,卻和暖如春绒障,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背捍歪。 一陣腳步聲響...
    開封第一講書人閱讀 33,458評論 1 272
  • 我被黑心中介騙來泰國打工户辱, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人糙臼。 一個月前我還...
    沈念sama閱讀 48,906評論 3 376
  • 正文 我出身青樓庐镐,卻偏偏與公主長得像,于是被迫代替她去往敵國和親变逃。 傳聞我的和親對象是個殘疾皇子必逆,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,507評論 2 359

推薦閱讀更多精彩內(nèi)容

  • 概述 設(shè)計原則 快速查詢:部分數(shù)據(jù)的聚合 + 內(nèi)存化 + 索引 水平擴展能力:分布式數(shù)據(jù) + 并行化處理 實時分析...
    zfylin閱讀 2,667評論 0 1
  • 一個用于實時分析的開源數(shù)據(jù)存儲 摘要 Druid是專用于基于大數(shù)據(jù)集的實時探索分析的開源數(shù)據(jù)存儲。該系統(tǒng)包括列式存...
    Sisyphus秋居拾遺閱讀 3,019評論 1 5
  • Druid 是一個為在大數(shù)據(jù)集之上做實時統(tǒng)計分析而設(shè)計的開源數(shù)據(jù)存儲韧献。這個系統(tǒng)集合了一個面向列存儲的層,一個分布式...
    曹振華閱讀 8,463評論 1 24
  • Druid具有高可用研叫、高容錯的特性锤窑。 本文將搭建一個簡單的Druid集群,并且將會討論如何進一步配置以滿足您的需求...
    helloworld1214閱讀 7,143評論 1 5
  • 01 “爹爹嚷炉,您說的那個才智過人渊啰,玉樹臨風(fēng)的護國大將軍什么時候來啊申屹?” “阿瑜啊绘证,你一個女孩子家家,整天不學(xué)女孩子...
    珍澈兒閱讀 221評論 0 1