前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >GooseFS透明加速能力,助力加速 CosN 访问 COS 的性能

GooseFS透明加速能力,助力加速 CosN 访问 COS 的性能

作者头像
云存储
发布2021-08-11 19:12:58
3310
发布2021-08-11 19:12:58
举报
文章被收录于专栏:腾讯云存储腾讯云存储
图片
图片

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的访问路径格式,对应的路径为:

代码语言:javascript
复制
cosn://examplebucket-1250000000/data/warehouse/

则 CosN 到 GooseFS 的路径映射关系如下:

代码语言:javascript
复制
cosn://examplebucket-1250000000/data/warehouse -> /warehouse/
cosn://examplebucket-1250000000/data/warehouse/folder/test.txt ->/warehouse/folder/test.txt

GooseFS 到 CosN 的路径映射关系如下:

代码语言:javascript
复制
/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 上传到?

代码语言:javascript
复制
<存储桶根路径>/ml-100k
  • 参考 EMR 指引文档,购买一个 EMR 集群并配置 HIVE 组件。

2. 环境配置

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

代码语言:javascript
复制
cp?goosefs-1.0.0-client.jar??hadoop/share/hadoop/common/lib/

注意:配置变更和添加 jar 包,需同步到集群上所有节点。

ii. 修改 Hadoop 配置文件 etc/hadoop/core-site.xml,指定 GooseFS 的实现类:

代码语言:javascript
复制
<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:

代码语言:javascript
复制
hadoop?fs?-ls?gfs://<MASTER_IP>:9200/

iv. 将 GooseFS 的客户端 jar 包放到 Hive 的 auxlib 目录下,使得 Hive 能加载到 GooseFS Client 包:

代码语言:javascript
复制
cp?goosefs-1.0.0-client.jar??hive/auxlib/

v. 执行如下命令,创建 UFS Scheme 为 CosN 的Namespace,并列出 Namespace。您可将该命令中的 examplebucket-1250000000 替换为你的 COS 存储桶,SecretId 和 SecretKey 替换为您的密钥信息:

代码语言:javascript
复制
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:

代码语言:javascript
复制
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 表和查询数据

通过如下指令执行:

代码语言:javascript
复制
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 表和查询数据

通过如下指令执行:

代码语言:javascript
复制
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:

代码语言:javascript
复制
<property>
   <name>fs.AbstractFileSystem.cosn.impl</name>
   <value>com.qcloud.cos.goosefs.hadoop.CosN</value>
</property>
<property>
   <name>fs.cosn.impl</name>
   <value>com.qcloud.cos.goosefs.hadoop.CosNFileSystem</value>
</property>

执行 Hadoop 命令,如果路径无法转换为 GooseFS 中的路径,命令的输出中会包含报错信息:

代码语言:javascript
复制
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 查询语句:

代码语言:javascript
复制
select?sum(age)?from?u_user_cosn;

6. 创建 OFS Schema 表和查询数据

通过如下命令执行:

代码语言:javascript
复制
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:

代码语言:javascript
复制
<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 中的路径,则输出结果中会包含报错信息:

代码语言:javascript
复制
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 查询语句:

代码语言:javascript
复制
select?sum(age)?from?u_user_ofs;

03 结语

GooseFS 旨在提供一站式的数据湖缓存加速及分布式缓存解决方案,解决需要缓存加速的数据业务场景,提供基于对象存储COS服务的近计算端数据加速层,助力加速CosN访问COS的性能。关于更多GooseFS请前往:/document/product/436/56412

本文系转载,前往查看

如有侵权,请联系?cloudcommunity@tencent.com 删除。

本文系转载前往查看

如有侵权,请联系?cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 01 前言
  • 02 操作示例
  • 03 结语
相关产品与服务
对象存储
对象存储(Cloud Object Storage,COS)是由腾讯云推出的无目录层次结构、无数据格式限制,可容纳海量数据且支持 HTTP/HTTPS 协议访问的分布式存储服务。腾讯云 COS 的存储桶空间无容量上限,无需分区管理,适用于 CDN 数据分发、数据万象处理或大数据计算与分析的数据湖等多种场景。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
http://www.vxiaotou.com