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.SimpleCredentialProvidergoosefs 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=1250000000goosefs 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 DELIMITEDFIELDS TERMINATED BY '|'STORED AS TEXTFILELOCATION '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 DELIMITEDFIELDS TERMINATED BY '|'STORED AS TEXTFILELOCATION '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.userhadoop fs -ls cosn://examplebucket-1250000000/unknow-pathls: 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.userhadoop fs -ls cosn://examplebucket-1250000000/unknow-pathls: 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 DELIMITEDFIELDS TERMINATED BY '|'STORED AS TEXTFILELOCATION '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.userhadoop fs -ls  ofs://instance-id.chdfs.ap-guangzhou.myqcloud.com/unknown-pathls: 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的性能。