當前位置:
首頁 > 最新 > 實現一份數據的夢想,Apache CarbonData里程碑式版本1.3發布

實現一份數據的夢想,Apache CarbonData里程碑式版本1.3發布

CarbonData是一種高性能大數據存儲方案,支持快速過濾查找和即席OLAP分析,已在20+企業生產環境上部署應用,其中最大的單一集群數據規模達到幾萬億。針對當前大數據領域分析場景需求各異而導致的存儲冗餘問題,業務驅動下的數據分析靈活性要求越來越高,CarbonData提供了一種新的融合數據存儲方案,以一份數據同時支持多種應用場景,並通過多級索引、字典編碼、預聚合、動態Partition、准實時數據查詢等特性提升了IO掃描和計算性能,實現萬億數據分析秒級響應。

我們來看下,CarbonData 1.3.0有哪些重大特性:

1、支持與Spark 2.2.1集成

CarbonData 1.3.0支持與最新Spark穩定版Spark 2.2.1版本集成。

2、支持預聚合,靈活高性能多維分析,無需預先數據建模

在1.3.0中,CarbonData的預聚合特性,與傳統BI系統的CUBE方案最大區別是,用戶不需要預先進行Cube建模以及修改任何SQL語句,既可加速OLAP分析性能,又可查詢明細數據,做到一份數據滿足多種應用場景。具體的用法如下:

a)創建主表:

CREATE TABLE sales (

order_time TIMESTAMP,

user_id STRING,

sex STRING,

country STRING,

quantity INT,

price BIGINT)

STORED BY "carbondata"

b) 基於上面主表sales創建預聚合表:

c)當用戶做查詢時,首先用戶不需要改SQL查詢語句,仍然使用主表進行查詢。當收到查詢請求後,CarbonData會對SQL做基於代價的自動優化,將SQL改寫為預聚合表上的查詢,例如下列語句會命中預聚合表,顯著提升查詢性能:

d)在1.3.0版本中,支持的預聚合表達式有:SUM、AVG、MAX、MIN、COUNT

e)在1億數據量上實測性能可提升10+倍以上,數據越大,性能提升效果越好。大家可以參考例子:/apache/carbondata/examples/PreAggregateTableExample.scala

3、針對時間序列數據內置時間維的預聚合,支持自動上卷

對於時間序列數據,CarbonData內置了對時間維度的理解,為用戶提供了易用語法創建預聚合表。具體用法如下:

a)創建主表:

CREATE TABLE sales (

order_time TIMESTAMP,

user_id STRING,

sex STRING,

country STRING,

quantity INT,

price BIGINT)

STORED BY "carbondata"

b)分別創建Year、Month、Day、Hour、Minute粒度的聚合表:

c)用戶可不用創建所有時間粒度的聚合表,系統支持自動roll-up上卷,如:已創建了Day粒度的聚合表,當查詢Year、Month粒度的group by聚合時,系統會基於已聚合好的Day粒度值推算出Year、Month粒度的聚合值:

(Year、Month粒度的聚合查詢,可用上面創建的agg_day上卷)

此特性為Alpha特性,當前時間粒度支持設置為1,比如:支持按1天聚合,暫不支持指定3天,5天的粒度進行聚合,下個版本將支持。支持自動上卷(Year,Month,Day,Hour,Minute)

4、流式准實時入庫,提升數據時效性同時避免小文件問題

在許多業務場景中,數據時效性是一個非常重要的指標,即數據產生多久後可被查詢。而在現有的開源大數據方案中,能做實時入庫和實時查詢的方案非常少,而且實時入庫常常伴隨著小文件的產生,所以一般都需要多個存儲系統組合使用,如HBase做實時入庫,每天導出為Parquet文件後用Impala做分析,數據時效性延遲了一天,而且需要管理多個集群,維護非常困難。

在CarbonData1.3.0中,通過行列混合存儲並與Spark的Structured Streaming集成,支持用戶准實時導入數據到CarbonData表,並立即可查詢這些數據。因為實時導入的表格和歷史表是同一張表,所以也不需要在多個表格間來回切換,只需對一張表進行查詢即可同時查詢實時數據和歷史數據。

a)實時獲取數據:

val readSocketDF= spark.readStream

.format("socket")

.option("host", "localhost")

.option("port", 9099)

.load()

b)寫數據到CarbonData表

qry = readSocketDF.writeStream

.format("carbondata")

.trigger(ProcessingTime("5 seconds"))

.option("checkpointLocation", tablePath.getStreamingCheckpointDir)

.option("dbName", "default")

.option("tableName", "carbon_table")

.start()

(具體可參考例子/apache/carbondata/examples/CarbonStructuredStreamingExample.scala)

5、支持標準Hive分區,兼容Spark、Hive的分區使用方法

Hive靜態分區和動態分區經過多年的應用,已經為大多數開發人員熟悉,CarbonData 1.3.0中支持標準Hive分區,可以使大數據應用更容易地遷移到CarbonData方案上來。

因為CarbonData具備索引能力,用戶在建立分區的同時,可以選擇與SORT_COLUMNS組合使用,在分區數據里建立MDK索引,起到多級索引的效果,滿足任意維度組合的快速過濾查詢,做到一份數據滿足多種應用場景

例如創建下面表,設置productDate作為partition欄位,數據按天進行分區;再通過SORT_COLUMNS建立多維索引。這樣即可按照productDate,productName, storeProvince,storeCity任意過濾組合快速查詢數據。

6、支持CREATE TABLE AS SELECT語法

CTAS (CREATETABLE AS SELECT)允許用戶從Parquet/Hive/CarbonData表中SELECT來創建新的CarbonData表, 方便用戶把Parquet、Hive格式數據轉成CarbonData格式數據。

7、支持指定導入批次進行查詢

CarbonData每批次導入的數據,會產生一個segment,在1.3.0里用戶可以指定Segment ID對某個Segment的數據進行查詢,即:用戶可以指定數據批次查詢。

a) 查詢Segment ID列表

b) 設置Segment ID

(具體可參考例子:/apache/carbondata/examples/QuerySegmentExample.scala)

1.3.0下載地址:https://dist.apache.org/repos/dist/release/carbondata/1.3.0

喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 ApacheCarbonData 的精彩文章:

TAG:ApacheCarbonData |