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 的性能。