GooseFS 是腾讯云对象存储团队最新推出的高性能、高可用以及可弹性伸缩的分布式缓存零碎,依附对象存储(Cloud Object Storage,COS)作为数据湖存储底座的老本劣势,为数据湖生态中的计算利用提供对立的数据湖入口,可减速基于腾讯云对象存储的各类海量数据分析以及机器学习等工作。本文将介绍如何在腾讯云 EMR 上应用 GooseFS 减速大数据计算工作。
GooseFS 是腾讯云对象存储团队近期面向下一代云原生数据湖场景推出的存储减速利器,提供与 HDFS 对标的 Hadoop Compatible FileSystem 接口实现,可为云上的大数据计算工作提供:
- 高牢靠、可弹性伸缩的分布式读写缓存服务;
- 内存级的数据本地化(Data Locality)拜访性能;
- 基于 Namespace 粒度的读写缓存策略以及 Hive Table 级别预热;
- 与 HDFS 统一的 Ranger 鉴权机制;
- 对象存储 AZ 级别的减速拜访与高 QPS 的元数据拜访能力;以及疾速部署和开箱即用等个性。
本文将基于腾讯云 EMR 介绍如何疾速部署 GooseFS 用于减速云上大数据分析工作。
减速腾讯云 EMR 大数据计算工作
为了在腾讯云 EMR 中应用 GooseFS 减速大数据计算工作,可参考官网文档腾讯云 EMR 环境中部署和配置 GooseFS(https://cloud.tencent.com/doc…),即可开启 GooseFS 的缓存减速能力。下文将以数据仓库业务以及迭代计算场景展现 GooseFS 的减速拜访能力。
减速基于 Hive、Spark SQL 和 Presto 数据仓库查问业务
很多大数据客户的数据仓库类业务具备显著的冷热周期特色,例如:某大数据客户每天会定时基于数仓生成日报报表,Hive 表的分区是日期维度。
GooseFS 集成了 Hive Table 的元数据管理能力,并且提供了 Hive table & partition 粒度的数据预热个性,用户能够通过配置工作流工作来每天在闲时预热加载 table & partition 以升高峰值查问的带宽耗费,而后在数据拜访高峰期提供内存级的缓存减速能力。
在热表或分区变冷当前,应用 Free 命令将其从缓存中开释掉。
| 上面,将会具体地介绍 GooseFS Table 治理能力以及预热办法。
GooseFS Table & Partition 治理与预热
GooseFS Table & Partition 治理与预热能力都是通过 GooseFS 的 table 命令行来实现:
$ goosefs table
Usage: goosefs table [generic options]
[attachdb [-o|--option <key=value>] [--db <goosefs db name>] [--ignore-sync-errors] <udb type> <udb connection uri> <udb db name>]
[detachdb <db name>]
[free <dbName> <tableName> [-p|--partition <partitionSpec>]]
[help [<command>]]
[load <dbName> <tableName> [-g|--greedy] [--replication <num>] [-p|--partition <partitionSpec>]]
[ls [<db name> [<table name>]]]
[stat <dbName> <tableName>]
[sync <db name>]
[transform <db name> <table name> [-d <definition>]]
[transformStatus [<job ID>]]
其中,提供 Hive DB 绑定和解绑,预热加载 DB 下的指定 Table & Partition。
- 在预热 Hive DB 中的指定 Table & Partition 到 GooseFS 之前,须要先将 DB 挂载到 GooseFS 中:
$ goosefs table attachdb --db test_db hive thrift://metastore_host:port goosefs_db_demo
response of attachdb
- 挂载完后,可应用 GooseFS 的命令行查看 DB 中的 Table 信息:
$ goosefs table ls test_db web_page
OWNER: hadoop
DBNAME.TABLENAME: testdb.web_page (
wp_web_page_sk bigint,
wp_web_page_id string,
wp_rec_start_date string,
wp_rec_end_date string,
wp_creation_date_sk bigint,
wp_access_date_sk bigint,
wp_autogen_flag string,
wp_customer_sk bigint,
wp_url string,
wp_type string,
wp_char_count int,
wp_link_count int,
wp_image_count int,
wp_max_ad_count int,
)
PARTITIONED BY (
)
LOCATION (gfs://metastore_host:port/myiNamespace/3000/web_page)
PARTITION LIST (
{
partitionName: web_page
location: gfs://metastore_host:port/myNamespace/3000/web_page
}
)
- 而后,可预热指定 Table 到 GooseFS 中,同时还能够查看 Table 预热状况:
$ goosefs table load test_db web_page
Asynchronous job submitted successfully, jobId: 1615966078836
- 预热实现后,就能够失常的执行查问工作,取得 GooseFS 的本地缓存减速性能。
GooseFS 减速性能比照
这里,咱们基于规范的 TPCDS benchmark 在腾讯云 EMR 环境中比照测试了本地 HDFS 失去整个测试过程总时延。其中,GooseFS 挂载 COSN 作为其 UFS,并且提前预热了测试数据集。
在雷同的测试数据集本地化的水平下,GooseFS 读数据拜访性能上绝对 HDFS 更好。具体分 SQL case 的时延数据可参考附录。
同时,COSN 和 CHDFS 作为腾讯云上两个比拟罕用的大数据文件系统实现,也可作为 GooseFS 的 Under File System 应用。这里也比照测试这三个文件系统,其中 GooseFS 挂载 COSN 作为其 UFS,同样提前预热的测试数据集。
从该项测试后果,也能够看出,GooseFS 在预热数据的条件下,能够显著减速腾讯云上大数据存储系统的拜访性能。具体分 SQL case 的时延数据可参考附录。
总结
GooseFS 作为腾讯云对象存储新推出的云原生大数据存储加速器,解决了基于 COSN 以及 CHDFS 等云上存储的 Data Locality 的缺点,提供了本地近内存级的拜访性能。
同时,GooseFS 提供了 Hive Table & Partition 级别的预热能力以及缓存策略管理,可能极大中央便用户实现数据预热和拜访减速。在将来,GooseFS 会元数据拜访性能、本地短路读性能以及智能 Cache 方向上做更深层次的优化开发,旨在进一步减速海量数据湖利用性能。对于理解更多请返回:https://cloud.tencent.com/doc…
附件
case100_D3_本地 SATA_HDFS 和 case100_D3_本地 SATA_GOOSEFS 的 TPCDS 测试后果:
SQL case | case100_D3_本地 SATA-HDFS | case101_D3_本地 SATA-GooseFS |
---|---|---|
29618 | 28230 | |
query1.sql | 150 | 167 |
query2.sql | 1392 | 1213 |
query3.sql | 402 | 329 |
query8.sql | 338 | 255 |
query12.sql | 280 | 252 |
query13.sql | 367 | 293 |
query15.sql | 767 | 706 |
query19.sql | 368 | 297 |
query20.sql | 503 | 441 |
query21.sql | 170 | 182 |
query22.sql | 96 | 94 |
query26.sql | 582 | 583 |
query31.sql | 1211 | 854 |
query32.sql | 929 | 670 |
query33.sql | 673 | 450 |
query34.sql | 345 | 253 |
query36.sql | 444 | 404 |
query37.sql | 473 | 396 |
query38.sql | 811 | 603 |
query39.sql | 498 | 510 |
query40.sql | 953 | 905 |
query43.sql | 328 | 252 |
query45.sql | 453 | 426 |
query46.sql | 361 | 332 |
query48.sql | 431 | 382 |
query52.sql | 345 | 239 |
query53.sql | 806 | 777 |
query55.sql | 341 | 237 |
query56.sql | 675 | 459 |
query57.sql | 2627 | 2559 |
query59.sql | 1711 | 1618 |
query60.sql | 687 | 465 |
query63.sql | 805 | 776 |
query66.sql | 433 | 430 |
query68.sql | 352 | 320 |
query70.sql | 1261 | 3961 |
query71.sql | 677 | 475 |
query73.sql | 339 | 237 |
query76.sql | 662 | 378 |
query82.sql | 758 | 688 |
query83.sql | 309 | 320 |
query86.sql | 186 | 152 |
query87.sql | 792 | 613 |
query89.sql | 809 | 776 |
query97.sql | 880 | 712 |
query98.sql | 838 | 789 |
SSD 云盘环境的 GooseFS、CHDFS 以及 COSN 的比照测试后果:
SQL case | case200_S5_SSD 云盘 -GooseFS | case201_S5_SSD 云盘 -CHDFS | case204_S5_SSD 云盘 -COSN |
---|---|---|---|
30353 | 36820 | 41803 | |
query1.sql | 194 | 212 | 205 |
query2.sql | 1377 | 1558 | 1921 |
query3.sql | 463 | 457 | 570 |
query8.sql | 294 | 394 | 509 |
query12.sql | 287 | 307 | 347 |
query13.sql | 307 | 668 | 814 |
query15.sql | 837 | 867 | 1074 |
query19.sql | 354 | 512 | 586 |
query20.sql | 576 | 554 | 680 |
query21.sql | 213 | 196 | 210 |
query22.sql | 111 | 109 | 107 |
query26.sql | 806 | 882 | 973 |
query31.sql | 972 | 1328 | 1817 |
query32.sql | 778 | 949 | 1453 |
query33.sql | 524 | 779 | 1049 |
query34.sql | 292 | 428 | 526 |
query36.sql | 479 | 545 | 688 |
query37.sql | 449 | 500 | 679 |
query38.sql | 691 | 868 | 1210 |
query39.sql | 695 | 565 | 654 |
query40.sql | 1098 | 1082 | 1251 |
query43.sql | 304 | 378 | 514 |
query45.sql | 506 | 568 | 628 |
query46.sql | 412 | 557 | 610 |
query48.sql | 437 | 697 | 847 |
query52.sql | 242 | 328 | 501 |
query53.sql | 946 | 899 | 1058 |
query55.sql | 244 | 351 | 485 |
query56.sql | 520 | 704 | 925 |
query57.sql | 3223 | 2914 | 3469 |
query59.sql | 1965 | 1930 | 2302 |
query60.sql | 539 | 696 | 905 |
query63.sql | 935 | 934 | 1025 |
query66.sql | 543 | 593 | 584 |
query68.sql | 380 | 570 | 578 |
query70.sql | 1430 | 4173 | 1608 |
query71.sql | 536 | 780 | 951 |
query73.sql | 282 | 384 | 547 |
query76.sql | 368 | 648 | 981 |
query82.sql | 796 | 828 | 972 |
query83.sql | 369 | 353 | 378 |
query86.sql | 163 | 184 | 219 |
query87.sql | 712 | 896 | 1038 |
query89.sql | 951 | 924 | 1050 |
query97.sql | 801 | 871 | 1213 |
query98.sql | 952 | 900 | 1092 |