數據倉庫
Kappa架構:將實時和離線代碼統一(優化lambda架構),但是不好修正數據,開發周期長,成本浪費,對于歷史數據的高吞吐量力不從心
原一代數據倉庫:
- 離線:hive+maxcompute
- 實時:clickhouse+driud
- 整合離線和實時:drill+presto
- 保存:mysql+redis
- 最后API
下一代:
- 要實時,很實時
- 離線和實時一體化,減少數據移動
- 通用性,要解耦
- 云原生,標準且生態
特點 | 數據庫 | 缺點 |
---|---|---|
支持事務+ACID | Mysql+presetSQL | 彈性伸縮難做到PD級別,且不能做復雜查詢 |
分析加速,分布式 | presto+druid+hive+clickhouse… | 面向分析師 |
面向服務產品,高并發,查詢簡單 | hbase+redis+casandra |
既可以支持分析也可以支持事務:HTAP混合事務分析系統
- 需要事務機制保證ACID + 適合模型簡單,簡單分析場景,TP解決AP問題
既可以分析也可以服務:HSAP服務/分析一體化:Hologres
- 無事務開銷(分布式鎖、同步)
- 以數據倉庫模型(抽象、服用、標準)解決數據服務問題
Hologres
產品特性:
- 分析服務一體化:point(點查詢hbase/redis遇到的) /Ad-hoc(即席分析clickhouse)/OLAP(聯機分析) 分析
- 以實時為中心:很快,數據實時寫入和更新,與Flink原生集成,寫入即可見
- 計算存儲分離:存儲資源和計算資源分離部署并獨立擴展+和Maxcompute無縫打通
- 開放生態:兼容PF生態+對接PG開發工具+對接BI
Flink+hologres組合:實時大屏等
hologres:報表等離線加速
Flink+hologres+maxcompute:數據中臺+精準營銷+多維分析
Hologres架構原理
計算和存儲相分離
計算:
- 接入節點Frontend(FE):SQL認證解析和優化,可以包含多個,兼容postgres11
- worker:執行引擎HQE(hologres query engine,極致查詢)/PQE(postgres query engine,兼容postgres)/SQE(對接maxcompute,本地兼容訪問maxcompute)+存儲引擎(SH,shard,CURD)+緩存+調度(HOS輕量級)
- MetraService(管理元數據信息,同時提供給FE)+Holo Master(拉起Worker)
存儲:
- 盤古文件系統
- 數據湖
SQL發送請求-frontend解析分發-worker執行-走不同路徑-SE存儲獲取數據,合并后返回給FE
(點查直接搜Fixed FE)
HSAP挑戰和Hologres應對策略
存儲計算分離:三種
存儲使用盤古
流批統一:底層支持行(PK)、列(OLAP)、行列共存
執行引擎+優化器
名詞解釋:
hologres開發工具:
PSQL客戶端
JDBC連接hologres
數據同步
支持多種異構數據源的離線、實時寫入
實時寫入數據到hologres
進入hologres控制臺–建庫建表(1)-進入實時計算Flink控制臺-作業開發-新建作業-創建原表和目標表(2)-執行-上線-運維-進入作業運維可以看到提交的作業-啟動作業即可-在holoweb控制臺查看是否成功(3)
(1)create table if not exists test1(a int ,b bigint ,c text,d timestamp);
(2_1)create temporary table datagen_source(a int ,b bigint,c string,proctime as proctime()) with ('connector'='datagen')
flink隨機源
(2_2)create temporary table holo_sink(a int,b bigint,c varchar,d timestamp) with ('connector'='hologres','endpoint'='XXX(hologres實例列表控制臺查看)','username'='XX','password'='XX','dbname'='XX','tablename'='test1(上面建的表)')
holo目標表
(2_3)insert into holo_sink select * from datagen_source;
數據實時寫入目標表
(3)select * from test1 order by d limit 2;/select count(1) from test1;
Maxcompute離線加速查詢
單表創建/批量外表創建
dataworks控制臺
- 數據開發
- 臨時查詢-新建數據源
- 創建表并插入數據
create table if not exists odps_test(
shop_name string,
customer_id string,
total_price int
)
partitioned by (
sale_date string
)
#插入數據
insert into odps_test partition(sale_date='20221111') values('a','張三',50),('b','李四',55);# 查看數據
read odps_test;
- 創建holoweb外部表(元數據管理可視化創建/sql創建)
create foreign table t_odps(shop_name text,customer_id text,total_price int8,sale_date text
)
server odps_server
options(project_name 'XXX項目空間名',table_name 'odps_test');# 驗證是否創建,相應會很快,dataworks慢,hologres加速查詢!
select * from t_odps;
- 外表完成加速查詢完成
COPY命令導入導出數據
在psql里面,連接后測試copy命令
#\d查看數據表
#建表
create table copy_test(
id int,
age int,
name text
);
# 從控制臺(stdin)輸入數據并復制到表
copy copy_test from stdin with delimiter as ',' null as '';
# 驗證
select * from copy_test;#從txt文件導入數據
cmd
psql -U XXX -p 80 -h XX -d X數據庫名X -c "copy copy_test from stdin with delimiter ','; " < X文件路徑X#COPY N,代表寫入了多少條數據# 下載數據到本地
psql
\copy (select * from copy_test) to '本地路徑/寫入OSS';#下載數據到OSS
psql/HoloWEB SQL編輯器
\copy (select * copy_test limit 2) to program '
hg_dump_to_odd
--AccessKeyId XX
--AccessKeySecret XX
--BucketName XX
--DirName X路徑X
--FileName X文件名X
--BatchSize X多少記錄X
'
# 最后到OSS查看驗證即可