天天看點

指定表和分區來預先緩存,查詢分析更高效 | 學習筆記

開發者學堂課程【資料湖 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_mode

deploy.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