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

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

作者头像
云存储
发布于 2021-08-25 03:41:27
发布于 2021-08-25 03:41:27
45900
代码可运行
举报
运行总次数:0
代码可运行

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
代码运行次数:0
运行
AI代码解释
复制
cosn://examplebucket-1250000000/data/warehouse/

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
cosn://examplebucket-1250000000/data/warehouse -> /warehouse/
cosn://examplebucket-1250000000/data/warehouse/folder/test.txt ->/warehouse/folder/test.txt

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
/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
代码运行次数:0
运行
AI代码解释
复制
<存储桶根路径>/ml-100k
  • 参考 EMR 指引文档,购买一个 EMR 集群并配置 HIVE 组件。

2. 环境配置

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
cp goosefs-1.0.0-client.jar  hadoop/share/hadoop/common/lib/

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

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<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
代码运行次数:0
运行
AI代码解释
复制
hadoop fs -ls gfs://<MASTER_IP>:9200/

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
cp goosefs-1.0.0-client.jar  hive/auxlib/

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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
代码运行次数:0
运行
AI代码解释
复制
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
代码运行次数:0
运行
AI代码解释
复制
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
代码运行次数:0
运行
AI代码解释
复制
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
代码运行次数:0
运行
AI代码解释
复制
<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
代码运行次数:0
运行
AI代码解释
复制
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
代码运行次数:0
运行
AI代码解释
复制
select sum(age) from u_user_cosn;

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

通过如下命令执行:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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
代码运行次数:0
运行
AI代码解释
复制
<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
代码运行次数:0
运行
AI代码解释
复制
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
代码运行次数:0
运行
AI代码解释
复制
select sum(age) from u_user_ofs;

03

结语

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

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-08-11,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 腾讯云存储 微信公众号,前往查看

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

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编程随想曲周刊(第4期)
1.Python中获取文件路径[1]2.MySQL审计插件使用和对比[2]3.2022年 6 款适用于 Linux 的最佳免费杀毒软件[3]4.Docker 安装 Redis[4]
编程随想曲
2022/12/01
3180
本月准备读的2本书
Q3准备重读这些书: 《恶意》,东野圭吾 《明朝那些事》,当年明月 画外音:坚持一件事很难,但读书,真的有用。 《恶意》 在生活中,恶意总是存在的,你的日常,在别人眼里有时也是特别刺眼。 尤其是之前大家的起点一样时,而你过得越潇洒,越幸福,越快乐,他们越不舒服,仿佛你的日子是抢了他们似的。 这种陷在比较带来的落差和失意中不能自拔,不仅会伤害自己,甚至有可能危及他人。 日本推理之王东野圭吾在《恶意》中,就讲述了一个由嫉妒引起的精妙故事。 在故事中,作者花费大量笔墨用于揭穿凶手的动机,像剥洋葱一般,层层
架构师之路
2022/07/12
3180
本月准备读的2本书
《码农翻身》读书笔记
花了一天时间翻完了《码农翻身》(跳过了Java部分)。生动有趣的书看起来就是舒服,竟有引人入胜、手不释卷的感觉,一不小心就翻完了。是一本很好的入门科普读物,开阔技术视野。
超超不会飞
2020/09/18
5930
《码农翻身》读书笔记
nodejs模板引擎ejs
nodejs的后台模板引擎主要分为两种ejs和jade.简单说一下两者区别吧,ejs学习成本低,效率不是很高(主要是先把模板中内容解析字符串),jade学习成本比较大,后期维护成本低,效率相对于ejs较好,express框架默认模板引擎依旧是jade有能力的情况下学习下jade还是非常不错的!今天主要介绍ejs后台模板引擎!
十月梦想
2018/08/29
1.7K0
给自己的博客加上实时疫情地图
今天是 2020 年 2 月 10 号(正月十七),武汉疫情的爆发,打乱了很多原定的计划
Xcnte
2021/12/14
5070
给自己的博客加上实时疫情地图
原创 | 计算机专业的学生要怎样做才能避免成为低级的码农?
原文来自知乎问题:计算机科学与技术专业的学生要怎样做才能避免成为低级的码农?虽然是搬运的文章,但是我一般都会修改修改。一方面是觉得当初有些地方表达不是很好,另外一方面是有些无良的公众号洗我的稿,我不改的话拿不到原创标。
TechFlow-承志
2020/10/27
4940
DevOps利器gitness之源码剖析(1)
最近在微信听书追《大明王朝1566》,在执行嘉靖老板“改稻为桑”的国策时,胡宗宪业务总监表现出两难态度,他既不想得罪老板,也不想得罪严嵩总管,还不想得罪,吕芳/皇储那几帮人;更不想成为千古罪人,背负千古骂名,他的策略总结起来就一个字“缓”,先安抚地方,向上争取支持等手段实在是过人。闲话少叙,想想古人当官也是难,但是再难也得继续撸起袖子继续干,不然脑袋随时搬家。我们也得学习前人,前史为鉴,不能随便的放弃,沉下心来做事,要不然没饭吃啊。这不,我也想继续把gitness研究下去,所以才打算写这一系列的文章,把它吃透。
金鹏
2023/11/12
7190
DevOps利器gitness之源码剖析(1)
漫画 | 累死了,2022年我再也不想搬砖了!
在一个庞大机房的角落里, 存放着一台普普通通的服务器。 每天一开机,里边的居民就开始忙活起来了。 大家都要在操作系统老大的指挥下干活。 日子一天天地过去,这一天,大家正在干活,外边突然传来了咔嗒一声。 CPU阿甘很快掌握了拆箱子、装箱子的技巧,他变得非常熟练,乐在其中。 可是好景不长,IT系统很快进入分布式时代。  一个系统后面往往有数百台甚至数千台服务器在支撑,服务器之间需要频繁地交流。  网络通信的性能成为关键。 而阿甘发现,数据包太多, 自己在拆箱子、装箱子上已经力不从心了。
博文视点Broadview
2023/04/12
3150
漫画 | 累死了,2022年我再也不想搬砖了!
看半小时漫画,通晓计算机基础
👆点击“博文视点Broadview”,获取更多书讯 转眼间,距离《码农翻身》的出版已经过去三年了,很多读者读完后意犹未尽,经常催促作者:下一本书什么时候出啊? 现在它终于来了,和第一本书不同的是,这本书完成了一次华丽的升级: 从用故事讲解技术,升级为用漫画讲解技术。 为了更好的阅读体验,本书排版设计了近10个版本,设计师换了3个,反复修改,就为了实现好的阅读效果。 为了防止纸质效果和电脑上看的效果不一致,还特意快印了四五次。 相比于文字,漫画形式更有视觉冲击力,更加有趣,受众也更广,连作者上小学的女
博文视点Broadview
2023/05/06
3650
看半小时漫画,通晓计算机基础
读懂老板的暗语,你需要知道解释器模式!
看过《大明王朝1566》吗?这是Jungle所看过的历史剧当中最最喜欢和推崇的一部剧。看过这部剧的小伙伴们都知道,嘉靖皇帝说话从来不会明明白白说出来,而是喜欢绕着说,或者说暗语,若不细细揣测,根本不知道嘉靖说的真实含义是什么。比如他跟陈洪说“行到水穷处,坐看云起时”,陈洪就意会到皇上是让他除草;太子喜获儿子,嘉靖给了枣和栗……要是Jungle生活在那时候,脑壳真得变大啊,整天揣测皇帝的意图都够了。要是有个解释器就好了,能够把皇帝的话解释为明明白白的语言!
用户6557940
2022/07/24
3290
读懂老板的暗语,你需要知道解释器模式!
二手图书多抓鱼的价格和推荐2022.11.29
1、进入买书板块 2、输入书籍的ISBN号 3、就能看到你手上的书能买多少钱,折扣多少,推荐阅读鱼几个 4、把1500本书号输个遍。。 5、6个鱼推荐阅读 书名 回收价格 折扣 鱼数量 清代地方政府 31 9.1 6 绝对价值 36 8 6 神曲1 31 7.8 6 有本事来抓我吧 10 7.1 6 金锁记 7.1 6 抗战时代生活史 22 6.9 6 亚洲大趋势 46 6.8 6 华夏边缘 30 6.7 6 自我导向行为 6.7 6 索拉里斯星 18 6.4 6 传统的发明 16 6.
用户7138673
2022/12/19
5650
二手图书多抓鱼的价格和推荐2022.11.29
解决ASP.NET中的各种乱码问题
总结分类: 一、页面显示乱码 1、如果web.config配置:<globalization fileEncoding="utf-8" /> 如果文件编码不是UTF-8,则会乱码,反之不然。 2、不设置fileEncoding,不会乱码 3、fileEncoding="gb2312",文件以utf-8编码,此时也不会有乱码现象。 建议最好让所有文件都以UTF-8编码保存,从而解决这类乱码问题。 二、Ajax提交的数据乱码问题 URL拼写参数的时候,如果遇到一些特殊字符。 <p><a id="link2"
小端
2018/04/16
2K0
漫画 | 为什么面向对象糟透了!
又是周末,编程语言“三巨头”Java, Lisp 和C语言照例在Hello World咖啡馆聚会。 对于三位老顾客,服务员总是殷勤接待 (码农翻身注:这是一篇很早之前的文章,作者是大名鼎鼎的Joe Armstrong , 也就是Erlang之父。) 原来这是Erlang之父Joe Armstrong写的一篇“战斗檄文”,里边充满了对面向对象的批判。 Java看到C语言这么顽冥不化,决定上代码,给他点儿颜色瞧瞧。 没想到C语言不甘示弱,也把代码搬了出来 Java无语,心说这两个家伙就是胡搅蛮缠。
博文视点Broadview
2023/04/19
2610
漫画 | 为什么面向对象糟透了!
​《画境长恨歌》叙事设计思路分享
| 导语 中国传统诗词的画面感与情绪传递,是很有价值的内容,也是很适合“游戏”这一载体去展现的内容。 在这里我们来探讨下如何把一首诗做成游戏,提出关于《画境长恨歌》在叙事设计方面的一些思考。 一、展卷 为什么是《长恨歌》? 选择《长恨歌》的代价是什么? (一)为什么是《长恨歌》? 画卷展开之前,我们小团队自问的第一个问题是:将唐诗改编为游戏是否可行?有什么意义? 在2018年的8月份,市面上已存在多款诗词题材的游戏,但这并不说明诗词题材的游戏就“没有新意”了,因为我们在体验过这几款游戏后,发现他们对诗
腾讯大讲堂
2020/09/08
6880
编程随想曲周刊(第2期)
1.免费字体下载[2]2.在线PS工具[3]3.国家普通话水平测试成绩查询[4]4.MacOS WPS Word跳转文档末尾快捷键(Fn+command+方向键的右键)5.MacOS WPS Word跳转文档头部快捷键(Fn+command+方向键的左键)
编程随想曲
2022/12/01
2860
漫画 | 前端比后端幸福多了!
下班的地铁上,张大胖遇到了何小痩。 抽象的泄露参见这篇文章《抽象的泄露》。 后记:在日常的编程工作中,无论是解决问题、提高性能、写出更有效率的程序......只要稍微深入一点,必然会涉及到计算机学科的基础知识,后端如此,前端也是这样。  正如文中所说,虽说前端是在折腾界面逻辑,但至少也得掌握HTTP、HTTPS;想做个消息通知,必然要考虑长连接,就需要知道TCP是怎么处理的,WebSocket是怎么回事;而且很多Web性能问题都和底层的TCP相关, 这都属于计算机网络范畴; 对于JavaScri
博文视点Broadview
2023/04/12
3740
漫画 | 前端比后端幸福多了!
摩拜进入意大利这两个城市,对中国互联网出海有何启示?
日前摩拜单车进入意大利的两座城市:佛罗伦萨和米兰,暂时投入数百辆车试运营,8月初在这两个城市正式运营后将投入4000辆单车。今天,共享单车出海已经不是什么新闻,不过摩拜这种重资产、重运营的模式能够有这
罗超频道
2018/04/25
6890
摩拜进入意大利这两个城市,对中国互联网出海有何启示?
解决ASP.NET中的各种乱码问题
经常发现有人被乱码困扰着,而我感觉比较幸运,很少为此烦恼过。 在这篇博客中,我将把我想到的一些与乱码有关的经验总结出来,供大家参考。 页面显示乱码问题 在一个网站中,有些页面会正常显示,然而,有些
小端
2018/04/16
3K0
解决ASP.NET中的各种乱码问题
漫画 | 硬盘装满电影后会变重吗?
硬盘在装满电影后会变重吗? 这个问题有点无厘头...... 但是深究以后还是挺有意思的。 现在主要有两种硬盘: 先有请机械硬盘上场讲一下: 接下来有请固态硬盘: 所以,机械硬盘上装满电影以后,并不会变重,固态硬盘理论上会变重,实际上是感受不到的。 就这么结束了?有点简单啊!来个彩蛋吧: 漫画说的是硬盘中信息的质量,那么整个互联网中信息有多重? 2006年,YouTube视频网站下的一个频道Vsauce给我们的答案是:互联网的质量约为一颗50克的大草莓。 全球在线的服务器有7500万至1亿台,这
博文视点Broadview
2023/04/19
2880
漫画 | 硬盘装满电影后会变重吗?
空降兵如何管理团队?
写在前面 最近有朋友咨询,从头组建一个测试团队和空降到一个测试团队,开展工作都有哪些套路。恰好这两种经历我都有,恰好我喜欢总结和分享,可以给这位朋友谈一下我的经历和感受。本人自我定义是初窥管理门径,所以观点中难免有不成熟的地方,各位看官可以跟更有经验的人请教。 之前谈了《如何从头组建测试团队?》,今天谈谈空降兵的那点事儿。 成功做好空降兵的策略是什么? 新官上任三把火怎么烧? 我的经验很简单:以静制动,先立后破。遇事则急,遇人则缓。 以静制动 很多人刚刚走上更高的管理职位时都容易心浮
张树臣
2018/05/15
9860
相关推荐
编程随想曲周刊(第4期)
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档