目錄
參考:
Hortonworks官方文檔-https://hortonworks.com/open-source/druid/
Apache Druid官方文檔-https://druid.apache.org/docs/latest/design/
以最新版0.15.0版本闡述~,非使用服務商提供的版本~企業用戶安裝請使用-Cm或者Ambari--個人筆記本安裝暫未成功
概述:
Apache Druid (incubating) is a real-time analytics database designed for fast slice-and-dice analytics ("OLAP" queries) on large data sets. Druid is most often used as a database for powering use cases where real-time ingest, fast query performance, and high uptime are important. As such, Druid is commonly used for powering GUIs of analytical applications, or as a backend for highly-concurrent APIs that need fast aggregations. Druid works best with event-oriented data.
Apache Druid(孵化)是一個實時分析的數據庫,用於對大型數據集進行快速的切片和OLAP查詢。Druid提供低延遲(實時)的數據攝入,靈活的數據探索和加速數據聚合。現有的Druid部署已經擴展到了數萬億事件和數PB的數據。Druid常用於爲面向用戶分析應用程序提供支持。
Druid有什麼作用:
主要特點:
特徵 | 描述 |
亞秒查詢 | Druid提供亞秒查詢,即使您有數TB的數據和數十個維度 |
實時數據攝取 | Druid使實時成爲現實。查詢數據到達後幾秒鐘。與Apache Kafka的本機集成使得實現實時分析變得簡單 |
與Apache Hive集成 | 使得任何與HIve兼容的工具構建OLAP多維數據集並運行亞秒級SQL查詢 |
與Apache Ambari集成 | Apache Ambari使Druid的部署,配置和監控變得輕而易舉 |
Druid如何工作:
Druid很快,因爲數據被轉換爲重度索引的列式格式,非常適合典型的OLAP查詢模式。通過Hive SQL,使用HDP中的Druid to Hive連接器或通過本機REST API查詢Druid。
Hdp-Druid文檔配圖
Apache Druid官方架構圖
Druid常見應用領域:
1.點擊流分析(網絡和移動分析)
2.網絡遙測分析(網絡性能監控)
3.服務器指標存儲
4.供應鏈分析(製造指標)
5.應用性能指標
6.數字營銷/廣告分析
7.商業智能/OLAP
什麼時候我該使用Druid:
如果您的用例符合以下幾個描述,Druid可能是一個不錯的選擇:
1。插入效率非常高
2。您的大多數查詢都是聚合和報告查詢("分組依據"查詢)。您可能還有搜索和掃描查詢。
3.您將延遲定位在100毫秒到幾秒
4.您的數據有一個時間組件(Druid包括與實踐特別相關的優化和設計選擇)
5.您可能有多個表,但每個查詢只能訪問一個大的分佈式表。查詢可能會遇到多個較小的“查找表”
6.您有高基數數據列(例如URL,用戶ID),需要對它們進行快速技術和排名
7.您希望從Kafka,HDFS,對象存儲-數據湖?加載數據。
構建:
Druid的進程和服務器
Druid與集中過程類型,簡要描述如下:
Coordinator(協調器) 進程管理集羣上的數據可用性。
OverIord進程控制數據提取工作負載的分配。
Broker進程處理來自外部客戶端的分配。
Router進程使可選的進程,可以將請求路由到Broker,Coordinator和OverIords。
Historical進程存儲可查詢的數據。
MiddleManager進程負責提取數據。
druid可以按照您喜歡的方式進行部署,但是爲了便於部署,我們建議講他們組織爲三種服務類型:Master,Query和Datta
Master:運行Coordinator和Overlord流程,管理數據可用性和攝取
Query:運行Broker和可選的Router進程,處理來自外部客戶端的查詢。
Data:運行Historical和MiddleManager流程,執行提取工作負載並存儲所有可查詢數據。
使用:
加載數據:
通過Druid Overlord提交攝取任務規範來啓動數據加載。
提取規範可以手寫或使用內置於Druid控制器中的“數據加載器編寫”。數據加載器可以通過對數據進行採樣並迭代配置各種攝取參數來幫助您構建攝取規範。數據加載器目前僅支持本機批量提取(智齒流式傳輸,包括存儲在Apache Kafka和Aws Kinesis中的數據,將在未來的版本中提供)。流式數據攝取只能通過今天的書面提取規範獲得。
使用數據加載器加載數據
如果你安裝完本地模式,此處未成功安裝,按照官方給的示例圖片來描述。 -請知悉 --原文出處Druid官網-https://druid.apache.org/docs/0.15.0-incubating/tutorials/tutorial-batch.html。
導航到localhost:8888 並點擊Load data控制檯標題。選擇Load disk。
輸入quickstart/tutorial目錄下wikkiticker-2015-09-12-sampled.json.gz過濾器。如果需要從多個文件中提取數據,則會分離基目錄和通配符文件過濾器。
點擊Preview並確保您看到的數據正確無誤。
找到數據後,可以單擊“next:parse time”轉到下一步。數據加載器講嘗試自動確定數據的正確解析器。在這種情況下,它將成功確定json。您可以使用不同的解析器來預覽Druid講如何讓解析您的數據。
隨着json解析器選中,單擊Next:Parse time去確定主timestamp列中的步驟。Druid的架構需要一個主時間戳列(內部存儲在一個名爲_time的列中)。如果數據中沒有時間戳,請選擇Constant Value。在我們的示例中,數據加載器將確定time原始數據中的列使唯一可用作主時間列的候選列。
點擊“Next:Transform”兩次經過Transform和Filter步驟。您無需再這些步驟中輸入任何內容,應用攝取時間轉換和過濾器待會講述-
在該Configure schema步驟中,您可以配置將那些維度(和指標)提取Druid。這正是Druid一旦被攝取就會出現的數據。由於給的數據集非常小,請Rollup通過點擊開關並確定更改來關閉並關閉。
對架構配置滿意後,宕機Next轉到partition可以微調數據分區方式的步驟。在這裏,您可以調整數據在Druid中分割成段的方式。由於這是一個小數據集,因此在步驟中無需進行任何調整。
點擊Tune步驟,我們進入發佈步驟,這裏我們可以指定Druid中的數據源名稱,我們將折耳根數據源命名爲wikipedia。
最後,點擊Next查看您的規範。這是你構建的規範,你可以返回並在之前的步驟中進行修改。同樣,您也可以直接編輯規範,並在前面的步驟中看到他。
對規範滿意之後,點擊Submit並創建一個攝取任務。
您將進入任務視圖,重點是新創建的任務。
在任務視圖中,您可以點擊Refresh幾次,直到你的任務成功。
當任務成功時,意味着它構建了一個或多個現在由數據服務器失去的段。
導航到DataSooures視圖並點擊刷新,直到wikipedia出現數據源(),加載可能需要幾秒鐘。
一旦看到綠色(Fully availiable)標誌時,就可以查詢數據了。此時,您可以轉到Query視圖以對數據源運行SQL查詢。由於這是一個小型數據集,您只需運行SELECT * FROM wikipedia查詢即可查看結果。
使用規範加載數據(通過控制檯)
Druid軟件包中由quickstart/tutorial/wikipedia-index.json,爲方便起見,此處顯示已配置爲讀取quickstart/tutorial/Wikiticker-2015-09-12
{
"type" : "index",
"spec" : {
"dataSchema" : {
"dataSource" : "wikipedia",
"parser" : {
"type" : "string",
"parseSpec" : {
"format" : "json",
"dimensionsSpec" : {
"dimensions" : [
"channel",
"cityName",
"comment",
"countryIsoCode",
"countryName",
"isAnonymous",
"isMinor",
"isNew",
"isRobot",
"isUnpatrolled",
"metroCode",
"namespace",
"page",
"regionIsoCode",
"regionName",
"user",
{ "name": "added", "type": "long" },
{ "name": "deleted", "type": "long" },
{ "name": "delta", "type": "long" }
]
},
"timestampSpec": {
"column": "time",
"format": "iso"
}
}
},
"metricsSpec" : [],
"granularitySpec" : {
"type" : "uniform",
"segmentGranularity" : "day",
"queryGranularity" : "none",
"intervals" : ["2015-09-12/2015-09-13"],
"rollup" : false
}
},
"ioConfig" : {
"type" : "index",
"firehose" : {
"type" : "local",
"baseDir" : "quickstart/tutorial/",
"filter" : "wikiticker-2015-09-12-sampled.json.gz"
},
"appendToExisting" : false
},
"tuningConfig" : {
"type" : "index",
"maxRowsPerSegment" : 5000000,
"maxRowsInMemory" : 25000
}
}
}
此規範將創建名爲“wikipedia”的數據源。
從任務視圖中,單擊Submit task並選擇Raw JSON task。
這將顯示規範提交對話框,您可以在其中粘貼上面的規範。
提交規範後,您可以按照上述相同的說明等待數據加載後進行查詢。
使用規範加載數據(命令行)
爲了方便起見,Druid包中包含批量攝取數據的腳本bin/post-index-task
此腳本會將攝取任務POST給Druid Overlord並輪詢Druid,知道數據可用於查詢。
bin/post-index-task --file quick/tutorial/winkipedia-index.json -url http://localhost:8081
有下面的輸出後,您可以按照上面闡述過的方法進行查詢。
Beginning indexing data for wikipedia
Task started: index_wikipedia_2018-07-27T06:37:44.323Z
Task log: http://localhost:8081/druid/indexer/v1/task/index_wikipedia_2018-07-27T06:37:44.323Z/log
Task status: http://localhost:8081/druid/indexer/v1/task/index_wikipedia_2018-07-27T06:37:44.323Z/status
Task index_wikipedia_2018-07-27T06:37:44.323Z still running...
Task index_wikipedia_2018-07-27T06:37:44.323Z still running...
Task finished with status: SUCCESS
Completed indexing data for wikipedia. Now loading indexed data onto the cluster...
wikipedia loading complete! You may now query your data
不使用腳本加載數據
我們簡要討論一下如何在不適用腳本多的情況下提交攝取任務。您不需要運行這些命令。
要提交任務,請在druid的根目錄下的終端窗口將其發佈到Druid
curl -X 'post' -H 'Content-Type:application/json' -d @quickstart/tutorial/wikipedia-index.json http://localhost:8081/druid/indexer.v1.task
提交成功後,將打印任務的ID:
{"task":"index_wikipedia_2018-06-09T21:30:32.802Z"}
可以從控制檯監視任務的狀態。
清理:
如果你要瀏覽器他攝取教程,則需要關閉集羣並刪除var druid包下目錄的內容來重置集羣狀態。