列名无效如何解决_XSKY ClickHouse如何实现存算分离
在介紹ClickHouse之前,說一下OLAP。OLAP也叫聯機分析處理(Online Analytical Processing)。OLAP系統以維度模型來存儲歷史數據,其主要存儲描述性的數據并且在結構上都是同質的。
01ClickHouse
OLAP應用有如下特點:
1、大多數的請求是讀請求;
2、每次查詢都從數據庫中讀取大量的行,但是同時又僅需要少量的列;
3、寬表,即每個表包含著大量的列;
4、處理單個查詢時需要高吞吐量(每個服務器每秒高達數十億行);
5、每一個查詢除了一個大表外都很小;
6、查詢結果明顯小于源數據,換句話說,數據被過濾或聚合后能夠被盛放在單臺服務器的內存中。
OLAP引擎的痛點:
· SparkSQL & Hive性能不夠快;
· Impala對內存要求高,需要依賴Hadoop生態軟件和基礎。
綜上,市面上的OLAP引擎不夠理想,這時,ClickHouse來了。ClickHouse由俄羅斯yandex公司開發,專為在線數據分析而設計,能夠使用SQL查詢生成實時數據報告,在2016年開源。
首先,也是ClickHouse最突出的優點:"快"。ClickHouse官方測試對比,1億的數據集測試中,ClickHouse的性能,比Hive快259倍,比MySQL快801倍;
ClickHouse vs Vertica vs Greeplum
其次,ClickHouse足夠輕量,不依賴Hadoop生態。除了解決上述的問題,ClickHouse還有如下優點:
1、列式存儲+數據壓縮;
2、并行和分布式查詢;
3、支持SQL;
4、實時數據更新。
02存儲需求
ClickHouse作為OLAP的新寵備受關注,國內大廠也紛紛跟進大規模使用。那么ClickHouse對存儲有什么需求?
ClickHouse早期并沒有走Hadoop生態,而是采用Local attached storage(本地存儲)的存儲方式,其可靠性通過原生支持shard + replication來保障。也可以通過RAID 5方式,來提高磁盤數據的可靠性和讀取能力。
但ClickHouse存儲畢竟不是專業存儲,面臨著以下幾個問題:
1、在ClickHouse眾多的表引擎中,又屬合并樹(MergeTree)表引擎及其家族系列(*MergeTree)最為強大,在生產環境絕大部分場景中都應該使用此系列的表引擎。ReplicatedMergeTree實現了ClickHouse的replication特性,需要依賴ZooKeeper實現分布式系統的協作,當并發寫入量較大時,ZooKeeper對表元數據同步有延遲,會成為集群的瓶頸,降低集群整體性能;
2、當數據寫入ClickHouse某個節點異常,導致副本間的數據不一致;
3、難擴容,難維護。
針對上述問題,XSKY為用戶的ClickHouse需求打造了高可用的軟件定義存儲解決方案:
· 本身高可用的存儲,去中心化設計,不會出現單個瓶頸的情況;
· 強一致性存儲系統,保證數據一致性;
· 支持無限制橫向擴展,使存儲性能與容量同步線性增長,同時配合圖形化的管理界面,解決運維問題。
03ClickHouse on S3
上面提到了MergerTree,這里說一下MergeTree在ClickHouse存儲方式。默認情況下ClickHouse的數據存儲在/var/lib/clickhouse/data目錄下:
說明:
1、default:數據庫名;
2、hdfs_engine_table:表名;
3、2a1dedbe81258ce26f3c450185e5550811_0:其中的一個part,每次插入數據就會生成一個part,part會不定時的merge成更大的一個part,每個part里的數據都是按照主鍵排序存儲;
4、checksums.txt:校驗值文件;
5、columns.txt:列名文件,記錄了表中的所有列名;
6、x.bin:每一列的真實數據;
7、x.mrk2:每一列的mrk文件;
8、primary.idx:主鍵文件,存儲了主鍵值。
早在去年的時候,ClickHouse社區就進了一個PR:https://github.com/ClickHouse/ClickHouse/pull/7946,關于支持S3&HDFS 的計劃,并在之后陸續合入了DiskS3,終于在ClickHouse v20.4.2.9版本正式合入PR: https://github.com/ClickHouse/ClickHouse/pull/9646,MergeTree全面支持S3。
那么,怎么讓ClickHouse的數據存儲在S3上?僅需如下兩個步驟即可:
一、創建存儲配置
在/etc/clickhouse-server/config.d目錄下創建配置文件并添加如下配置:
說明:
1、YOUR_ENDPOINT:對象存儲的endpoint,如:10.0.x.x:8060;
2、BUCKET_NAME:桶名;
3、OBJECT_PREFIX:對象名前綴;
4、AK:對象用戶的訪問密鑰;
5、SK:對象用戶的秘密密鑰。
二、創建MergeTree表
在創建表時設置上一步驟中創建的存儲策略SETTINGS storage_policy = 's3'即可。
經過上述兩個步驟就可以進行插入刪除操作。
我們先來看看s3_table是怎么存儲到對象存儲上的?
如下,這么看跟普通的MergeTree沒有區別?
其實真實的數據已經存儲在對象存儲上,比如:1_2_2_0/count.txt文件中記錄著真正的位置。
可通過S3 Browser查看到指定目錄下已存了真實數據。
04應用測試
如上講述了如何使用對象存儲存儲ClickHouse的數據,下面就做一個簡單的測試。這里使用航班飛行的真實數據。
說明:該ClickHouse環境為虛機測試環境,16G的內存,4核CPU,不能體現出性能,僅做功能測試。
1、通過如下命令下載2017年的飛行數據:
2、創建ontime數據庫:
3、將下載好的數據導入到ClickHouse:
4、進行數據查詢:
· 查看導入的數據量:
· 查詢2017最受歡迎的目的地:
· 查詢最受歡迎的出發城市:
05總結
近年來ClickHouse發展迅猛,除了其豐富的功能,優秀的性能,還有就是在當下不可忽視的數據量增長。XSKY對象存儲可為企業提供全面的云存儲安全服務,其可擴展的性能、先進的數據存儲和管理功能,更重要的是能夠實現ClickHouse的存算分離,讓應用更加專注于應用。
—END—
總結
以上是生活随笔為你收集整理的列名无效如何解决_XSKY ClickHouse如何实现存算分离的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 中国最深的淡水湖深度 中国第一深水湖喀纳
- 下一篇: cmd小游戏_使用pygame制作Fla