重大更新!Druid 0.18.0 發布—Join登場,支持Java11


file
Apache Druid本質就是一個分布式支持實時數據分析的數據存儲系統。

能夠快速的實現查詢與數據分析,高可用,高擴展能力。

距離上一次更新剛過了二十多天,距離0.17版本剛過了三個多月,Druid再次迎來重大更新,Druid也越來越強大了。

Apache Druid 0.18.0 本次更新了 42位貢獻者的200多個新功能,性能增強,BUG修復以及文檔改進。

新功能

Join支持

Join是數據分析中的關鍵操作。在0.18.0之前,Druid支持一些與Join有關的功能,例如SQL中的Lookups或半聯接。但是,這些功能的用例非常有限,對於其他聯接用例,用戶在攝取數據時必須對數據源進行規范化,而不是在查詢時將其加入,這可能導致數據量激增和攝取時間延長。

Druid 0.18.0有史以來第一次支持真正的Join,Druid 目前支持INNER,LEFT和CROSS的join。對於原生查詢,join作為新的數據源被引入,以表示兩個數據源的Join。

當前,僅允許 left-deep join。這意味着左側數據源僅允許一個table或另一個join數據源。對於右側的數據源,lookupinline,或者query數據源是允許的。

Druid SQL也支持Join了!其實本質上是SQL JOIN查詢被轉換為一個或幾個包含原生查詢。

Join會影響查詢的性能,我們需要注意:

  • LOOKUP函數性能更好,LOOKUP如果適合需求,請考慮使用該功能。
  • 在Druid SQL中使用Join時,請記住,它會生成未明確包含在查詢中的子查詢。
  • 式子查詢生成的一個常見原因是相等的兩半的類型是否不匹配。例如,由於查找鍵始終是字符串,因此druid.d JOIN lookup.l ON d.field = l.field如果d.field為字符串,則性能最好。
  • 從Druid 0.18.0開始,join運算符必須評估每一行的條件。將來,我們希望同時進行早期條件評估和延遲條件評估,並希望在常規情況下可以大大提高性能。

未來的工作:

RIGHT OUTER 和 FULL OUTER JOIN

改善性能

內聯查詢

Druid現在可以通過內聯子查詢來執行嵌套查詢。任何類型的子查詢都可以位於另一個類型的子查詢之上,例如以下示例:

			 topN
               |
       (join datasource)
         /          \
(table datasource)  groupBy

為了執行此查詢,Broker首先評估groupBy子查詢;它將子查詢發送到數據節點並收集結果。收集的結果將在Broker存儲中實現。Broker收集了groupBy查詢的所有結果后,它將通過使用具有groupBy查詢結果的內聯數據源替換groupBy來重寫topN查詢。最后,將重寫的查詢發送到數據節點以執行topN查詢。

查詢通道和優先級

當一次運行多個查詢時,有時您可能希望根據查詢的優先級來控制查詢的資源分配。例如,可能希望限制分配給不太重要的查詢的資源,以便重要的查詢可以及時執行,而不會因為不太重要的查詢而中斷。

使用查詢通道,就可以控制查詢工作負載的利用率。具體設置如下:

Property Description Default
druid.query.scheduler.numThreads Maximum number of HTTP threads to dedicate to query processing. To save HTTP thread capacity, this should be lower than druid.server.http.numThreads, but it is worth noting that like druid.server.http.enableRequestLimit is set that query requests over this limit will be denied instead of waiting in the Jetty HTTP request queue. Unbounded
druid.query.scheduler.laning.strategy 通道策略 none
druid.query.scheduler.prioritization.strategy 優先級策略 manual

查詢指標的新維度

subQueryId 每個子查詢具有不同subQueryId的,但有相同的 queryId

新配置

druid.server.http.maxSubqueryRows Broker內存中實現的最大行數

SQL分組

現在支持GROUPING SETS,允許您將多個GROUP BY子句組合為一個GROUP BY子句。

SQL動態參數

Druid現在支持SQL的動態參數。要使用動態參數,請用問號(?)字符替換查詢中的所有文字。

重要變化

applyLimitPushDownToSegments 默認禁用

applyLimitPushDownToSegments已在0.17.0中添加,但是如果查詢處理涉及許多段,則可能導致性能下降。這是因為“限制下推到分段掃描”會為每個分段初始化一個聚合緩沖區,其開銷不可忽略。僅以后當查詢涉及每個歷史或實時任務的段數相對較少時,才啟用此配置。

Kinesis的新滯后指標

Kinesis索引服務現在提供下面列出的新滯后指標:

  • ingest/{supervisor type}/lag/time:流中最新偏移量的總時間(以毫秒為單位)

  • ingest/{supervisor type}/maxLag/time:流的最新偏移量之后的最長時間(以毫秒為單位)

  • ingest/{supervisor type}/avgLag/time:流的最新偏移量之后的平均時間(以毫秒為單位)

默認Roaring bitmaps

Druid 支持兩種 bitmap, Roaring 和 CONCISE,由於性能原因,默認切換為 Roaring

數組表達式語法更改

Druid表達式現在支持用於創建數組的類型化構造函數。可以使用顯式類型定義數組。例如,<LONG>[1, 2, null]創建的陣列LONG型含12,和null。請注意,您仍然可以創建沒有顯式類型的數組。例如,[1, 2, null]仍然是創建等效數組的有效語法。在這種情況下,Druid將根據其元素推斷數組的類型。此新語法也適用於空數組。<STRING>[]<DOUBLE>[]以及<LONG>[]將創建的空數組STRINGDOUBLELONG類型。

自定義Transform

為開發人員公開了transform的擴展接口 詳情:https://druid.apache.org/docs/0.18.0/development/modules.html#writing-your-own-extensions

chunkPeriod已刪除

chunkPeriod從0.14.0開始不推薦使用,因為它的用法有限,現在,此查詢已從0.18.0中刪除。

支持Java 11

Druid現在支持Java11。您可以使用Java 11運行與Java 8相同的Druid二進制包。我們在Travis上進行的測試包括:

  • 使用Java 11編譯和運行單元測試
  • 使用Java 8進行編譯並使用Java 11運行集成測試

從Java 9開始,當發現某些庫使用反射非法訪問JDK的內部API時,它將發出警告。這些警告將通過在以后的版本中修改Druid代碼或升級庫版本來解決。目前,可以通過添加JVM選項(例如--add-opens或)來抑制這些警告--add-exports

2020-01-22T21:30:08,893 WARN [main] org.apache.druid.java.util.metrics.AllocationMetricCollectors - Cannot initialize org.apache.druid.java.util.metrics.AllocationMetricCollector
java.lang.reflect.InaccessibleObjectException: Unable to make public long[] com.sun.management.internal.HotSpotThreadImpl.getThreadAllocatedBytes(long[]) accessible: module jdk.management does not "exports com.sun.management.internal" to unnamed module @6955cb39

可以通過添加禁止顯示此警告--add-exports java.base/jdk.internal.perf=ALL-UNNAMED

WARNING: An illegal reflective access operation has occurred
WARNING: Illegal reflective access by com.google.inject.internal.cglib.core.$ReflectUtils$1 to method java.lang.ClassLoader.defineClass(java.lang.String,byte[],int,int,java.security.ProtectionDomain)
WARNING: Please consider reporting this to the maintainers of com.google.inject.internal.cglib.core.$ReflectUtils$1
WARNING: Use --illegal-access=warn to enable warnings of further illegal reflective access operations
WARNING: All illegal access operations will be denied in a future release

可以通過添加禁止顯示此警告--add-opens java.base/java.lang=ALL-UNNAMED

2020-01-22T21:30:08,902 WARN [main] org.apache.druid.java.util.metrics.JvmMonitor - Cannot initialize GC counters. If running JDK11 and above, add --add-exports java.base/jdk.internal.perf=ALL-UNNAMED to the JVM arguments to enable GC counters.

可以通過添加禁止顯示此警告--add-exports java.base/jdk.internal.perf=ALL-UNNAMED

將Kafka客戶端更新到2.2.2

Kafka客戶端庫已更新至2.2.2

Bug修復

德魯伊0.18.0包括40個錯誤修復。有關錯誤修復的完整列表,請參見https://github.com/apache/druid/pulls?page=1&q=is%3Apr+milestone%3A0.18.0+is%3Aclosed+label%3ABug

  • 修復superbatch合並最后一個分區邊界(#9448
  • 在流索引中重用轉換器(#9625
  • 保留壓縮后的數值類型尺寸的空值(#9622
  • DruidInputSource可以在重新攝取期間添加新尺寸(#9590
  • 價值計數器溢出錯誤,而不是寫入錯誤的段(#9559
  • 修復了帶有空值的數字列上的過濾器的一些問題(#9251
  • 在UTC時區之外修復timestamp_format expr(#9282
  • 設置帶有時區的segmentGranularity(#8690)時,KIS任務失敗
  • 通過提取Fn,表達式,聯接等的限制下推來解決分組問題(#9662

大數據流動 專注於大數據實時計算,數據治理,數據可視化等技術分享與實踐。
請在后台回復關鍵字下載相關資料。相關學習交流群已經成立,歡迎加入~


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM