1. 程式人生 > 其它 >GooseFS透明加速能力,助力加速 CosN 訪問 COS 的效能

GooseFS透明加速能力,助力加速 CosN 訪問 COS 的效能

GooseFS帶您快速上雲~

01 前言

原生的物件儲存介面協議並不相容HDFS檔案語義,因此物件儲存COS提供了COSN工具這一的標準的 Hadoop 檔案系統實現,可以為 Hadoop、Spark 以及 Tez 等大資料計算框架整合 COS 提供支援。

使用者可使用實現了 Hadoop 檔案系統介面的 CosN 外掛,讀寫儲存在 COS 上的資料。但原生的物件儲存服務的架構設計原因,在List和Rename效能表現並不理想,因此騰訊雲物件儲存服務推出了GooseFS這一分散式快取方案,主要針對包括需要快取加速的資料湖業務場景,提供基於物件儲存COS服務的近計算端資料加速層。

透明加速能力是GooseFS的特色功能,用於加速 CosN 訪問 COS 的效能。對於已經使用 CosN 工具訪問 COS 的使用者,GooseFS 提供了一種客戶端路徑對映方式,讓使用者可以在不修改當前 Hive table 定義的前提下,仍然能夠使用 CosN scheme 訪問 GooseFS,該特性方便使用者在不修改已有表定義的前提下,對 GooseFS 的功能和效能進行對比測試。

對於雲 HDFS 的使用者(CHDFS),也可以通過修改配置,實現使用 OFS 客戶端的Scheme 訪問 GooseFS 的目的。

CosN Schema 和 GooseFS Schema 的之間的路徑是如何進行對映的呢?下面以一個例子進行說明。
假設COS上有一個examplebucket-1250000000,使用者將數倉中的資料儲存在data/warehouse/的路徑下,裡邊有/folder/test.txt,/folder/test2.txt等檔案,那麼按照CosN的訪問路徑格式,對應的路徑為:

cosn://examplebucket-1250000000/data/warehouse/

則 CosN 到 GooseFS 的路徑對映關係如下:

cosn://examplebucket-1250000000/data/warehouse -> /warehouse/
cosn://examplebucket-1250000000/data/warehouse/folder/test.txt ->/warehouse/folder/test.txt

GooseFS 到 CosN 的路徑對映關係如下:

/warehouse ->cosn://examplebucket-1250000000/data/warehouse/
/warehouse/ -> cosn://examplebucket-1250000000/data/warehouse/
/warehouse/folder/test.txt -> cosn://examplebucket-1250000000/data/warehouse/folder/test.txt

注意:如果訪問的 CosN 路徑無法轉換為 GooseFS 路徑,對應的 Hadoop API 呼叫會丟擲異常。

02 操作示例

下邊進行透明加速的演示。該示例演示了 Hadoop 命令列以及 Hive 中,如何使用 gfs://、 cosn://、ofs:// 三種 Schema 訪問 GooseFS。操作流程如下:

1. 準備資料和計算叢集

參考 建立儲存桶 文件,建立一個測試用途的儲存桶;
參考 建立資料夾 文件,在儲存桶根路徑下建立一個名為 ml-100k 的資料夾;
從 Grouplens 下載 ml-100k 資料集,並將檔案 u.user 上傳到

<儲存桶根路徑>/ml-100k

參考 EMR 指引文件,購買一個 EMR 叢集並配置 HIVE 元件。

2. 環境配置

i. 將 GooseFS 的客戶端 jar 包(goosefs-1.0.0-client.jar)放入 share/hadoop/common/lib/ 目錄下:

cp goosefs-1.0.0-client.jar  hadoop/share/hadoop/common/lib/

注意:配置變更和新增 jar 包,需同步到叢集上所有節點。

ii. 修改 Hadoop 配置檔案 etc/hadoop/core-site.xml,指定 GooseFS 的實現類:

<property>
 <name>fs.AbstractFileSystem.gfs.impl</name>
 <value>com.qcloud.cos.goosefs.hadoop.GooseFileSystem</value>
</property>
<property>
 <name>fs.gfs.impl</name>
 <value>com.qcloud.cos.goosefs.hadoop.FileSystem</value>
</property>

iii. 執行如下 Hadoop 命令,檢查是否能夠通過 gfs:// Scheme 訪問 GooseFS,其中 <MASTER_IP> 為 Master 節點的 IP:

hadoop fs -ls gfs://<MASTER_IP>:9200/

iv. 將 GooseFS 的客戶端 jar 包放到 Hive 的 auxlib 目錄下,使得 Hive 能載入到 GooseFS Client 包:

cp goosefs-1.0.0-client.jar  hive/auxlib/

v. 執行如下命令,建立 UFS Scheme 為 CosN 的Namespace,並列出 Namespace。您可將該命令中的 examplebucket-1250000000 替換為你的 COS 儲存桶,SecretId 和 SecretKey 替換為您的金鑰資訊:

goosefs ns create ml-100k cosn://examplebucket-1250000000/ml-100k  --secret fs.cosn.userinfo.secretId=SecretId --secret fs.cosn.userinfo.secretKey=SecretKey--attribute fs.cosn.bucket.region=ap-guangzhou --attribute fs.cosn.credentials.provider=org.apache.hadoop.fs.auth.SimpleCredentialProvider
goosefs ns ls

vi. 執行命令,建立 UFS Scheme 為 OFS 的 Namespace,並列出 Namespace。您可將該命令中的 instance-id 替換為您的 CHDFS 例項,1250000000 替換為您的 APPID:

goosefs ns create ofs-test  ofs://instance-id.chdfs.ap-guangzhou.myqcloud.com/ofs-test --attribute fs.ofs.userinfo.appid=1250000000
goosefs ns ls

3. 建立 GooseFS Schema 表和查詢資料

通過如下指令執行:

create database goosefs_test;
use goosefs_test;
CREATE TABLE u_user_gfs (
userid INT,
age INT,
gender CHAR(1),
occupation STRING,
zipcode STRING)
ROW FORMAT DELIMITED
FIELDS TERMINATED BY '|'
STORED AS TEXTFILE
LOCATION 'gfs://<MASTER_IP>:<MASTER_PORT>/ml-100k';
select sum(age) from u_user_gfs;

4. 建立 CosN Schema 表和查詢資料

通過如下指令執行:

CREATE TABLE u_user_cosn (
userid INT,
age INT,
gender CHAR(1),
occupation STRING,
zipcode STRING)
ROW FORMAT DELIMITED
FIELDS TERMINATED BY '|'
STORED AS TEXTFILE
LOCATION 'cosn://examplebucket-1250000000/ml-100k';
select sum(age) from u_user_cosn;

5. 修改 CosN 的實現為 GooseFS 的相容實現

修改 hadoop/etc/hadoop/core-site.xml:

hadoop fs -ls  cosn://examplebucket-1250000000/ml-100k/
Found 1 items
-rw-rw-rw-   0 hadoop hadoop      22628 2021-07-02 15:27 
cosn://examplebucket-1250000000/ml-100k/u.user
hadoop fs -ls cosn://examplebucket-1250000000/unknow-path
ls: Failed to convert ufs path cosn://examplebucket-1250000000/unknow-path to GooseFs path, check if namespace mounted

執行 Hadoop 命令,如果路徑無法轉換為 GooseFS 中的路徑,命令的輸出中會包含報錯資訊:

hadoop fs -ls  cosn://examplebucket-1250000000/ml-100k/
Found 1 items
-rw-rw-rw-   0 hadoop hadoop      22628 2021-07-02 15:27 cosn://examplebucket-1250000000/ml-100k/u.user
hadoop fs -ls cosn://examplebucket-1250000000/unknow-path
ls: Failed to convert ufs path cosn://examplebucket-1250000000/unknow-path to GooseFs path, check if namespace mounted

重新執行 Hive 查詢語句:

select sum(age) from u_user_cosn;

6. 建立 OFS Schema 表和查詢資料

通過如下命令執行:

CREATE TABLE u_user_ofs (
userid INT,
age INT,
gender CHAR(1),
occupation STRING,
zipcode STRING)
ROW FORMAT DELIMITED
FIELDS TERMINATED BY '|'
STORED AS TEXTFILE
LOCATION 'ofs://instance-id.chdfs.ap-guangzhou.myqcloud.com/ofs-test/';
select sum(age) from u_user_ofs;

7. 修改 OFS 的實現為 GooseFS 的相容實現

修改 hadoop/etc/hadoop/core-site.xml:

<property>
   <name>fs.AbstractFileSystem.ofs.impl</name>
   <value>com.qcloud.cos.goosefs.hadoop.CHDFSDelegateFS</value>
</property>
<property>
   <name>fs.ofs.impl</name>
   <value>com.qcloud.cos.goosefs.hadoop.CHDFSHadoopFileSystem</value>
</property>

執行 Hadoop 命令,如果路徑無法轉換為 GooseFS 中的路徑,則輸出結果中會包含報錯資訊:

hadoop fs -ls  ofs://instance-id.chdfs.ap-guangzhou.myqcloud.com/ofs-test/
Found 1 items
-rw-r--r--   0 hadoop hadoop      22628 2021-07-15 15:56 ofs://instance-id.chdfs.ap-guangzhou.myqcloud.com/ofs-test/u.user
hadoop fs -ls  ofs://instance-id.chdfs.ap-guangzhou.myqcloud.com/unknown-path
ls: Failed to convert ufs path ofs://instance-id.chdfs.ap-guangzhou.myqcloud.com/unknown-path to GooseFs path, check if namespace mounted

重新執行 Hive 查詢語句:

select sum(age) from u_user_ofs;

03 結語

GooseFS 旨在提供一站式的資料湖快取加速及分散式快取解決方案,解決需要快取加速的資料業務場景,提供基於物件儲存COS服務的近計算端資料加速層,助力加速CosN訪問COS的效能。關於更多GooseFS請前往:https://cloud.tencent.com/document/product/436/56412