1. 程式人生 > >比Hive快800倍!大資料實時分析領域黑馬開源ClickHouse

比Hive快800倍!大資料實時分析領域黑馬開源ClickHouse

一. 概述

隨著物聯網 IOT 時代的來臨,IOT 裝置感知和報警儲存的資料越來越大,有用的價值資料需要資料分析師去分析。大資料分析成了非常重要的環節。當然近兩年開啟的開源大潮,為大資料分析工程師提供了十分富餘的工具。但這同時也增加了開發者選擇合適的工具的難度,尤其對於新入行的開發者來說。學習成本,框架的多樣化和複雜度成了很大的難題。例如 Kafka,Hdfs,Spark,Hive 等等組合才能產生最後的分析結果。把各種開源框架、工具、庫、平臺人工整合到一起所需工作之複雜,是大資料領域開發和資料分析師常有的抱怨之一,也是他們支援大資料分析平臺簡單化和統一化的首要原因。

二.ClickHouse 發展歷史

Yandex 在 2016 年 6 月 15 日開源了一個數據分析的資料庫,名字叫做 ClickHouse,這對保守俄羅斯人來說是個特大事。更讓人驚訝的是,這個列式儲存資料庫的跑分要超過很多流行的商業 MPP 資料庫軟體,例如 Vertica。如果你沒有聽過 Vertica,那你一定聽過 Michael Stonebraker,2014 年圖靈獎的獲得者,PostgreSQL 和 Ingres 發明者(Sybase 和 SQL Server 都是繼承 Ingres 而來的), Paradigm4 和 SciDB 的創辦者。Michael Stonebraker 於 2005 年創辦 Vertica 公司,後來該公司被 HP 收購,HP Vertica 成為 MPP 列式儲存商業資料庫的高效能代表,Facebook 就購買了 Vertica 資料用於使用者行為分析。

三.ClickHouse 支援特性剖析

在看 ClickHouse 執行場景之前,架構師或開發人員必須要了解技術的功能特性以及弊端。只有”知己知彼”才可以”百戰不殆”,接下來我們看一下 ClickHouse 的具體特點。我們來看看其中的一些功能:

1. 真正的面向列的 DBMS

在一個真正的面向列的 DBMS 中,沒有任何“垃圾”儲存在值中。例如,必須支援定長數值,以避免在數值旁邊儲存長度“數字”。例如,十億個 UInt8 型別的值實際上應該消耗大約 1 GB 的未壓縮磁碟空間,否則這將強烈影響 CPU 的使用。由於解壓縮的速度(CPU 使用率)主要取決於未壓縮的資料量,所以即使在未壓縮的情況下,緊湊地儲存資料(沒有任何“垃圾”)也是非常重要的。

因為有些系統可以單獨儲存單獨列的值,但由於其他場景的優化,無法有效處理分析查詢。例如 HBase,BigTable,Cassandra 和 HyperTable。在這些系統中,每秒鐘可以獲得大約十萬行的吞吐量,但是每秒不會達到數億行。

另外,ClickHouse 是一個 DBMS,而不是一個單一的資料庫。ClickHouse 允許在執行時建立表和資料庫,載入資料和執行查詢,而無需重新配置和重新啟動伺服器。

2. 資料壓縮

一些面向列的 DBMS(InfiniDB CE 和 MonetDB)不使用資料壓縮。但是,資料壓縮確實提高了效能。

3. 磁碟儲存的資料

許多面向列的 DBMS(SAP HANA 和 GooglePowerDrill)只能在記憶體中工作。但即使在數千臺伺服器上,記憶體也太小,無法在 Yandex.Metrica 中儲存所有瀏覽量和會話。

4. 多核並行處理

多核多節點並行化大型查詢。

5. 在多個伺服器上分散式處理

上面列出的列式 DBMS 幾乎都不支援分散式處理。在 ClickHouse 中,資料可以駐留在不同的分片上。每個分片可以是用於容錯的一組副本。查詢在所有分片上並行處理。這對使用者來說是透明的。

6.SQL 支援

如果你熟悉標準的 SQL 語法,那麼大家在談論 ClickHouse SQL 語法的支援層面上,就不能算真正全面的支援 SQL 語法了。ClickHouse SQL 有跟真正 SQL 不一樣的函式名稱。不過語法基本跟 SQL 語法相容,支援 JOIN、FROM、IN 和 JOIN 子句以及標量子查詢支援子查詢。不支援關聯子查詢。ClickHouse 支援基於 SQL 的宣告性的查詢語言,並且在許多情況下符合 SQL 標準。支援 FROM BY、IN 和 JOIN 子句中的 GROUP BY、ORDER BY,標量子查詢和子查詢。不支援特殊的子查詢和視窗函式。

7. 向量化引擎

資料不僅按列儲存,而且由向量 - 列的部分進行處理。這使我們能夠實現高 CPU 效能。

8. 實時資料更新

ClickHouse 支援主鍵表。為了快速執行對主鍵範圍的查詢,資料使用合併樹 (MergeTree) 進行遞增排序。由於這個原因,資料可以不斷地新增到表中。新增資料時無鎖處理。

9. 索引

例如,帶有主鍵可以在特定的時間範圍內為特定客戶端(Metrica 計數器)抽取資料,並且延遲時間小於幾十毫秒。

10. 支援線上查詢

這讓我們使用該系統作為 Web 介面的後端。低延遲意味著可以無延遲實時地處理查詢,而 Yandex.Metrica 介面頁面正在載入(線上模式)。

11. 支援近似計算

  1. 系統包含用於近似計算各種值,中位數和分位數的集合函式。
  2. 支援基於部分(樣本)資料執行查詢並獲得近似結果。在這種情況下,從磁碟檢索比例較少的資料。
  3. 支援為有限數量的隨機金鑰(而不是所有金鑰)執行聚合。在資料中金鑰分發的特定條件下,這提供了相對準確的結果,同時使用較少的資源。

12. 資料複製和對資料完整性的支援。

使用非同步多主複製。寫入任何可用的副本後,資料將分發到所有剩餘的副本。系統在不同的副本上保持相同的資料。資料在失敗後自動恢復

ClickHouse 不完美之處:

  1. 不支援事物。
  2. 不支援 Update/Delete 操作。
  3. 支援有限作業系統。

現在支援 ubuntu,CentOS 需要自己編譯,不過有熱心人已經編譯好了,拿來用就行。對於 Windows 不支援。

ClickHouse 與已有大資料分析技術有何不同

知道了 ClickHouse 的特性和不完美,下面我們可以對比一下之前的大資料分析跟現在的有啥區別?

| 代替複雜的多樣大資料技術組合架構

之前的大資料分析,例如 Hadoop 家族由很多技術和框架組合而成,猶如一頭大象被拆分後其實所剩下的價值也就是 HDFS、Kafka、Spark ,其他的幾乎都沒有任何價值。

這些可以用 ClickHouse 一項技術代替。

 

 

 

典型的大資料分析架構 =>ClickHouse

 

| 查詢速度快快快

以下為新浪公司實戰得出的測試結果:

 

叢集部署 4 臺機器,每臺機器配置 :CPU [email protected] ,開啟超執行緒後 24core ,48g 記憶體,3T × 12 Raid5Select count(*) 300 億 資料 0.9 秒

 

select date, count(*) from xx group by date ,300 億資料 group by 日期 查詢 9.8 秒

| 官方壓測

下面是 100M 資料集的跑分結果:ClickHouse 比 Vertia 快約 5 倍,比 Hive 快 279 倍,比 My SQL 快 801 倍;雖然對不同的 SQL 查詢,結果不完全一樣,但是基本趨勢是一致的。ClickHouse 跑分有多塊?舉個例子:ClickHouse 1 秒,Vertica 5.42 秒,Hive 279 秒;

 

四.ClickHouse 應用場景

自從 ClickHouse2016 年 6 月 15 日開源後,ClickHouse 中文社群隨後成立。中文開源組開始以易觀、新浪、海康威視、美團、京東、58、騰訊、酷狗音樂和俄羅斯開源社群等人員組成,隨著開源社群的不斷活躍,陸續有神州數碼、青雲、PingCAP、中軟國際等公司成員加入。一開始只是幾個 ClickHouse 愛好者在群裡討論 ClickHouse 技術,後來因為加入的人越來越多,群內分享不太方便,社群建立了 ClickHouse 中文論壇。在交流中,我們瞭解到一些一線大廠已經把 ClickHouse 運用到生產環境中,社群也從各個公司運用中吸收了經驗。

ClickHouse 目前已經應用於以下場景:

  1. 電信行業用於儲存資料和統計資料使用。
  2. 新浪微博用於使用者行為資料記錄和分析工作。
  3. 用於廣告網路和 RTB、電子商務的使用者行為分析。
  4. 資訊保安裡面的日誌分析。
  5. 檢測和遙感資訊的挖掘。
  6. 商業智慧。
  7. 網路遊戲以及物聯網的資料處理和價值資料分析。
  8. 最大的應用來自於 Yandex 的統計分析服務 Yandex.Metrica,類似於谷歌 Analytics(GA),或友盟統計、小米統計,幫助網站或移動應用進行資料分析和精細化運營工具。據稱 Yandex.Metrica 為世界上第二大的網站分析平臺。ClickHouse 在這個應用中,部署了近四百臺機器,每天支援 200 億的事件和歷史總記錄超過 13 萬億條記錄,這些記錄都存有原始資料(非聚合資料),隨時可以使用 SQL 查詢和分析,生成使用者報告。

五.ClickHouse 和一些技術的比較

  1. 商業 OLAP 資料庫
  • 例如:HP Vertica, Actian the Vector,
  • 區別:ClickHouse 是開源而且免費的
  1. 雲解決方案
  • 例如:亞馬遜 RedShift 和谷歌的 BigQuery
  • 區別:ClickHouse 可以使用自己機器部署,無需為雲付費

3.Hadoop 生態軟體

  • 例如:Cloudera Impala, Spark SQL, Facebook Presto , Apache Drill
  • 區別:
  • ClickHouse 支援實時的高併發系統
  • ClickHouse 不依賴於 Hadoop 生態軟體和基礎
  • ClickHouse 支援分散式機房的部署
  •  
  1. 開源 OLAP 資料庫
  • 例如:InfiniDB, MonetDB, LucidDB
  • 區別:這些專案的應用的規模較小,並沒有應用在大型的網際網路服務當中,相比之下,ClickHouse 的成熟度和穩定性遠遠超過這些軟體。
  1. 開源分析,非關係型資料庫
  • 例如:Druid , Apache Kylin
  • 區別:ClickHouse 可以支援從原始資料的直接查詢,ClickHouse 支援類 SQL 語言,提供了傳統關係型資料的便利。

六.總結

在大資料分析領域中,傳統的大資料分析需要不同框架和技術組合才能達到最終的效果,在人力成本,技術能力和硬體成本上以及維護成本讓大資料分析變得成為昂貴的事情。讓很多中小型企業非常苦惱,不得不被迫租賃第三方大型公司的資料分析服務。

ClickHouse 開源的出現讓許多想做大資料並且想做大資料分析的很多公司和企業耳目一新。

ClickHouse 正是以不依賴 Hadoop 生態、安裝和維護簡單、查詢速度快、可以支援 SQL 等特點在大資料分析領域越走越遠。

歡迎工作一到五年的Java工程師朋友們加入Java程式設計師開發: 854393687 群內提供免費的Java架構學習資料(裡面有高可用、高併發、高效能及分散式、Jvm效能調優、Spring原始碼,MyBatis,Netty,Redis,Kafka,Mysql,Zookeeper,Tomcat,Docker,Dubbo,Nginx等多個知識點的架構資料)合理利用自己每一分每一秒的時間來學習提升自己,不要再用"沒有時間“來掩飾自己思想上的懶惰!趁年輕,使勁拼,給未來的自己一個交代!