在腾讯云 EMR 上使用 GooseFS 加速大数据计算服务

GooseFS 是腾讯云对象存储团队最新推出的高性能、高可用以及可弹性伸缩的分布式缓存系统,依靠对象存储(Cloud Object Storage,COS)作为数据湖存储底座的成本优势,为数据湖生态中的计算应用提供统一的数据湖入口,可加速基于腾讯云对象存储的各类海量数据分析以及机器学习等任务。本文将介绍如何在腾讯云 EMR 上使用 GooseFS 加速大数据计算任务。

GooseFS 是腾讯云对象存储团队近期面向下一代云原生数据湖场景推出的存储加速利器,提供与 HDFS 对标的 Hadoop Compatible FileSystem 接口实现,可为云上的大数据计算任务提供:

  • 高可靠、可弹性伸缩的分布式读写缓存服务;
  • 内存级的数据本地化(Data Locality)访问性能;
  • 基于 Namespace 粒度的读写缓存策略以及 Hive Table 级别预热;
  • 与 HDFS 一致的 Ranger 鉴权机制;
  • 对象存储 AZ 级别的加速访问与高 QPS 的元数据访问能力;以及快速部署和开箱即用等特性。

本文将基于腾讯云 EMR 介绍如何快速部署 GooseFS 用于加速云上大数据分析任务。

1

加速腾讯云 EMR 大数据计算任务

为了在腾讯云 EMR 中使用 GooseFS 加速大数据计算任务,可参考官网文档腾讯云 EMR 环境中部署和配置GooseFS(https://cloud.tencent.com/document/product/436/58513),即可开启 GooseFS 的缓存加速能力。下文将以数据仓库业务以及迭代计算场景展示 GooseFS 的加速访问能力。

2

加速基于Hive、Spark SQL

和Presto数据仓库查询业务

很多大数据客户的数据仓库类业务具备明显的冷热周期特征,例如:某大数据客户每天会定时基于数仓生成日报报表,Hive 表的分区是日期维度。

GooseFS 集成了 Hive Table 的元数据管理能力,并且提供了 Hive table & partition 粒度的数据预热特性,用户可以通过配置工作流任务来每天在闲时预热加载 table & partition 以降低峰值查询的带宽消耗,然后在数据访问高峰期提供内存级的缓存加速能力。

在热表或分区变冷以后,使用 Free 命令将其从缓存中释放掉。

| 下面,将会详细地介绍 GooseFS Table 管理能力以及预热方法。

3

GooseFS Table &
 Partition 管理与预热

GooseFS Table & Partition 管理与预热能力都是通过 GooseFS 的 table 命令行来实现:

代码语言:javascript
复制
 goosefs tableUsage: goosefs table [generic options]   [attachdb [-o|--option &lt;key=value&gt;] [--db &lt;goosefs db name&gt;] [--ignore-sync-errors] &lt;udb type&gt; &lt;udb connection uri&gt; &lt;udb db name&gt;]   [detachdb &lt;db name&gt;]                                         [free &lt;dbName&gt; &lt;tableName&gt; [-p|--partition &lt;partitionSpec&gt;]]   [help [&lt;command&gt;]]                                           [load &lt;dbName&gt; &lt;tableName&gt; [-g|--greedy] [--replication &lt;num&gt;] [-p|--partition &lt;partitionSpec&gt;]]   [ls [&lt;db name&gt; [&lt;table name&gt;]]]                              [stat &lt;dbName&gt; &lt;tableName&gt;]                                  [sync &lt;db name&gt;]                                             [transform &lt;db name&gt; &lt;table name&gt; [-d &lt;definition&gt;]]         [transformStatus [&lt;job ID&gt;]]</code></pre></div></div><p>其中,提供 Hive DB 绑定和解绑,预热加载DB下的指定 Table &amp; Partition。</p><p>1. 在预热 Hive DB 中的指定 Table &amp; Partition 到 GooseFS 之前,需要先将 DB 挂载到 GooseFS 中:</p><ul class="ul-level-0"><li></li><li></li></ul><div class="rno-markdown-code"><div class="rno-markdown-code-toolbar"><div class="rno-markdown-code-toolbar-info"><div class="rno-markdown-code-toolbar-item is-type"><span class="is-m-hidden">代码语言:</span>javascript</div></div><div class="rno-markdown-code-toolbar-opt"><div class="rno-markdown-code-toolbar-copy"><i class="icon-copy"></i><span class="is-m-hidden">复制</span></div></div></div><div class="developer-code-block"><pre class="prism-token token line-numbers language-javascript"><code class="language-javascript" style="margin-left:0"> goosefs table attachdb --db test_db hive thrift://metastore_host goosefs_db_demoresponse of attachdb

2. 挂载完后,可使用 GooseFS 的命令行查看 DB 中的 Table 信息:

代码语言:javascript
复制
 goosefs table ls test_db web_pageOWNER: hadoopDBNAME.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_pagelocation: gfs://metastore_host:port/myNamespace/3000/web_page})</code></pre></div></div><p>3. 然后,可预热指定 Table 到 GooseFS中,同时还可以查看 Table 预热情况:</p><ul class="ul-level-0"><li></li><li></li></ul><div class="rno-markdown-code"><div class="rno-markdown-code-toolbar"><div class="rno-markdown-code-toolbar-info"><div class="rno-markdown-code-toolbar-item is-type"><span class="is-m-hidden">代码语言:</span>javascript</div></div><div class="rno-markdown-code-toolbar-opt"><div class="rno-markdown-code-toolbar-copy"><i class="icon-copy"></i><span class="is-m-hidden">复制</span></div></div></div><div class="developer-code-block"><pre class="prism-token token line-numbers language-javascript"><code class="language-javascript" style="margin-left:0"> goosefs table load test_db web_pageAsynchronous job submitted successfully, jobId: 1615966078836

4. 预热完成后,就可以正常的执行查询任务,获得 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 的时延数据可参考附录。

4

总结

GooseFS 作为腾讯云对象存储新推出的云原生大数据存储加速器,解决了基于 COSN 以及 CHDFS 等云上存储的 Data Locality 的缺陷,提供了本地近内存级的访问性能。

同时,GooseFS 提供了 Hive Table & Partition 级别的预热能力以及缓存策略管理,能够极大地方便用户完成数据预热和访问加速。在未来,GooseFS 会元数据访问性能、本地短路读性能以及智能 Cache 方向上做更深层次的优化开发,旨在进一步加速海量数据湖应用性能。

5

附件

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