開發者學堂課程【資料湖 JindoFS + OSS 實操幹貨36講:指定表和分區來預先緩存,查詢分析更高效】學習筆記,與課程緊密聯系,讓使用者快速學習知識。
課程位址:
https://developer.aliyun.com/learning/course/833/detail/13974指定表和分區來預先緩存,查詢分析更高效
内容介紹
一、背景介紹
二、功能介紹
三、實觀原理
四、實操示範
1.1傳統叢集架構
存儲計算一體
存儲量與計算量無法始終比對
存儲無法水準擴充
計算節點 計算節點 計算節點
NodeManager NodeManager NodeManager
DataNode DataNode DataNode
為什麼需要指定表和分區來預先緩存,首先講一下傳統的叢集架構。
傳統的大資料分析,通常采用存儲、計算一體的方式,計算節點上既有存儲服務,也有計算服務。
這種方式存儲量和計算量沒法做到始終比對,比如擴充一台節點,就需要計算資源和存儲資源一起。
然後第二點,它存儲服務無法做到水準擴充,因為受到 HDFS 的單點限制,叢集擴大到一定規模的時候就無法繼續擴充,因為一般它都将原資料都儲存在記憶體,單機的記憶體畢竟是有限的,現在我們通常建議采用的是存算分離的架構。
1.2存算分離架構
計算資源動态伸縮
海量的存儲空間
穩定可靠的存儲服務
計算節點剩餘的磁盤、記憶體資源可以用于緩存加速
緩存 緩存 緩存
OSS 對象存儲
計算節點上隻部署計算服務,部署存儲服務存儲,使用遠端的OSS對象存儲。
這種方式,有四個優點
第一點,是計算資源,可以動态的擴縮容釋放節點,不會導緻資料丢失。
第二,它具有海量的存儲空間,OSS的存儲空間非常大。
第三,OSS 的服務非常穩定可靠。
第四,點式計算節點,剩餘的磁盤記憶體資源可以用于緩存加速,利用緩存加速,我們可以同時利用本地磁盤 OS 的貸款,提高計算速度。
這是 TBCDS 生成的一份标準輸倉的資料,其中的圍表,比如說是比較經常通路的,是以我們可以先緩存适時表,通常采用時間分區,對于接近最近幾天的資料,也可以預先緩存有一些比較老的,比如說一兩個月之前的資料,是比較冷的,這些資料隻儲存在 OSS 就可以了。
Jindo Namespace Service
Jindo Storage Service
Jindo SDK
JindoFS緩存服務的架構圖,包含三個部分,Namespace服務儲存檔案的中繼資料和緩存原始資訊的中繼資料。
Jindo SDK 是用戶端,部署spark服務上。
Storage服務負責管理緩存塊的資料,整個流程是計算服務,通過Jindo SDK通路資料,記錄 SDK,從Namespacs服務查詢緩存位置資訊,然後向叢集中的 storage 服務,讀取出緩存資料,如果命中緩存直接傳回,如果沒有命中緩存,則從OSS讀取資料,并且将緩存寫入到 storage 服務供下次使用。
部署緩存服務
1. 下載下傳最新 Release 包 b2smartdata-x.x.x.tar.gz,解壓并部署到叢集所有節點上
2. 修改配置檔案conf/bigboot.cfg
[
bigboot-storage]
storage.rpc.port - 6101
storage.data-dirs =/mnt/disk1/bigboot,/mnt/disk2/bigboot,/mnt/disk3/bigboot,/mnt/disk4/bigboot
storage.data-dirs.capacities = 527371075584,527371075584,527371075584,527371075584
storage.namespace.rpc.address = emr-header-1:8101
storage.watermark.high.ratio-0.4 storage.watermark.low.ratio-0.2
[bigboot-namespace] namespace.rpc.port = 8101
namespace.meta-dir =/mnt/disk1/bigboot
3. 修改 sbin/nodes,配置所有storage service的節點清單
4. 啟動所有服務./sbin/start-service.sh
詳細文檔可參考:
https://github.com/aliyun/alibabacloud-jindofs/blob/master/docs/jindofs_cache_modedeploy.md
部署Jindo SDK
1. 安裝jar包:下載下傳最新的jar包 jindofs-sdk-xx.xjar,在所有 Hadoop 節點安裝。
cp ./jindofs-sdk-*.jar/share/hadoop/hdfs/lib/jindofs-sdkjar
2. 配置 JindoFS 實作類:将 JindoFS 實作類配置到Hadoop的core-site.xml中。
3. 将 OSS 的 A ccess Key、Access Key Secret、Endpoint 等預先配置在 Hadoop 的core-site.xml中。
指定表和分區來預先緩存
-cache
•文法
jindo table -cache {-t}[-p] 【-pin]
•功能
表示緩存指定表或分區的資料至叢集本地磁盤上。
表或分區的路徑需要位于 OSS 或 JindoFS。指定表時使用 database.table 的格式;指定分區時使用 partitionCol1
=1,partitionCol2=2,...的格式;指定-pin 時,在緩存空間不足時盡量不删除相關資料。
•示例:緩存2020-03-16日db1.t1表的資料至本地磁盤上。
jindo table -cache -t db1.tl -p date=2020-03-16
-uncache
jindo table -uncache {-t}[-p]
表示删除叢集本地磁盤上指定表或分區的緩存資料。
對應的路徑需要位于 OSS 或 JindoFS。指定表時使用 database.table 的格式,指定分區時使用 partitioncol1=1,
partitionCol2=2,...的格式。
相關資源
JindoFS SDK
https://github.com/aliyun/alibabacloud-jindofs/blob/master/docs/indofs _sdk download.md
JindoFS 緩存服務
jindofs/blob/master/docs/indofs cache mode deploy.md
下載下傳最新版本的 SDK 和s martdate
程式安裝好後進行配置部署
然後準備測試資料
Overview
Start Time: Sun Jun 27 23:06:53 2021
Status: Active
Meta Backend: RocksDB (Standalone) emr-header-1.cluster-234515:8101 [192.168.0.30](Active)
Node: Live Nodes:[3], Decommission Nodes:[0]
Version: 3.6.0
Build No: 1d2d462e9844d63d587127504ece7c87b58ad/42
Namespace Info (3)
Namespace: ifs:/ftest/
Namespaces: test
Mode: BLOCK_MODE
Backend URI: oss://chengli-sh-test/uyue/C-DBD8BBF30589E5BE
Summary: Directory Count:[1], File Count: [0], File Size:[0], Task Count:[0], Computed at 2021-06-27 23:07:01
Storage Overview
Node: emr-worker-2.cluster-234515:6101
Start Time: Sun Jun 27 23:06:53 2021
Status: online
Version: 3.6.0
Build Version: 1d2d462e9844d63d587f27504ece7c87b58adf42
Storage Lists (1)
Volume Storage Type Used/Capacity Last Eviction Time Diskid
/mnt/disk1/bigboot Disk oBRp3.57 GB
1