前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >大压缩文件对Impala查询性能的影响

大压缩文件对Impala查询性能的影响

作者头像
九州暮云
发布2020-04-24 17:35:27
8470
发布2020-04-24 17:35:27
举报
文章被收录于专栏:九州牧云

Hadoop/HDFS/MapReduce/Impala被设计用于存储和处理大量文件的场景,比如TB或者PB级别数据量的文件。大量小文件对查询性能有很大的影响,因为NameNode要保存大量的HDFS文件元数据,一次性查询很多分区或者文件的话,需要获取文件列表并一个个读取文件信息,不仅会对查询性能造成很大的影响,还可能会超过操作系统的文件描述符数量限制而导致查询失败。

因此,这就意味着我们要尽可能让文件保持很大吗?当然不是。大文件对表的性能也会有影响,原因是在大多数情况下,Hadoop用户会压缩存储在HDFS中的数据,这样虽然可以节省磁盘空间,但是如果你有一个大的压缩文件,花费在解压上的时间也会导致查询变慢。

为了证明上面的说法,我在CDH环境中做了以下测试:

1、我准备了一个565M的普通Text格式的文件和一个使用bzip2压缩方式压缩的135M的文件,文件下载链接:Kaggle’s Flight Delay Dataset

2、我用4个这样的bzip2文件创建了一个名为bzip2_smallfiles_4的表,用8个这样的文件创建了另一个名为bzip2_smallfiles_8的表

3、然后,我还将这个文本文件合并4次,生成一个文本文件,使用bzip2对其进行压缩,大小变为大约510MB,并在其上创建了一个名为bzip2_bigfile_4的表

4、和3是一样的。但我将文件合并了8次,使其变大,压缩后文件大小为1.1GB,并创建了一个名为bzip2_bigfile_8的新表

5、然后,我对这4个表逐个运行“SELECT COUNT(*) FROM”查询来比较结果

毫无疑问,我看到对表bzip2_bigfile_8的查询是最慢的。以下是对这四张表的测试数据:

bzip2_smallfiles_4:

  • 4台主机运行查询
  • 查询运行时间大约53秒
  • 最大扫描时间52秒
  • 最大解压时间为49秒
代码语言:javascript
复制
Operator       Hosts  Avg Time  Max Time   #Rows  Est. #Rows  Peak Mem  Est. Peak Mem  Detail 
00:SCAN HDFS        4  26s464ms  52s687ms  23.28M          -1  40.32 MB      160.00 MB  test.bzip2_smallfiles_4

    Query Timeline
...
      Rows available: 53.86s (53861836202)
      First row fetched: 53.87s (53869836178)
      Unregister query: 53.87s (53874836163)

    Fragment F00
      Instance fc48dc3e014eb7a5:7d7a2dc100000004 (host=xxxx:22000)
        AGGREGATION_NODE (id=1)
          HDFS_SCAN_NODE (id=0)
            File Formats: TEXT/BZIP2:2 
            - DecompressionTime: 49.45s (49449847498)

bzip2_smallfiles_8:

  • 4台主机运行查询
  • 查询运行时间大约54.69秒
  • 最大扫描时间54.196秒
  • 最大解压时间为51.18秒
代码语言:javascript
复制
Operator       Hosts  Avg Time  Max Time   #Rows  Est. #Rows  Peak Mem  Est. Peak Mem  Detail 
00:SCAN HDFS        4  52s514ms  54s196ms  46.55M          -1  40.32 MB      160.00 MB  test.bzip2_smallfiles_8 

    Query Timeline
...
      Rows available: 54.36s (54359822792)
      First row fetched: 54.68s (54683821736)
      Unregister query: 54.69s (54688821720)

    Fragment F00
      Instance 5642f67b9a975652:c19438dc00000004 (host=xxxx:22000)
        AGGREGATION_NODE (id=1)
          HDFS_SCAN_NODE (id=0)
            File Formats: TEXT/BZIP2:2 
            - DecompressionTime: 51.18s (51183849937)

bzip2_bigfile_4:

  • 4台主机运行查询
  • 查询运行时间大约1分50秒
  • 最大扫描时间为1分49秒
  • 最大解压时间为1分7秒
代码语言:javascript
复制
Operator       Hosts  Avg Time  Max Time   #Rows  Est. #Rows  Peak Mem  Est. Peak Mem  Detail 
00:SCAN HDFS        4  27s394ms      1m49s  23.28M          -1  40.15 MB      176.00 MB  test.bzip2_bigfile_4 

    Query Timeline
...
      Rows available: 1.8m (109781665214)
      First row fetched: 1.8m (110408663300)
      Unregister query: 1.8m (110413663284)

    Fragment F00
      Instance 4545c110dbca4c9c:6cd1db1100000004 (host=xxxx:22000)
        AGGREGATION_NODE (id=1)
          HDFS_SCAN_NODE (id=0)
            File Formats: TEXT/BZIP2:2 
            - DecompressionTime: 1.7m (104339662922)

bzip2_bigfile_8:

  • 4台主机运行查询
  • 查询运行时间大约3分6秒
  • 最大扫描时间为3分35秒
  • 最大解压时间为3分4秒
代码语言:javascript
复制
Operator       Hosts  Avg Time  Max Time   #Rows  Est. #Rows  Peak Mem  Est. Peak Mem  Detail 
00:SCAN HDFS        4  53s902ms      3m35s  46.55M          -1  40.32 MB      176.00 MB  test.bzip2_bigfile_8 

    Query Timeline
...
      Rows available: 3.6m (215992297509)
      First row fetched: 3.6m (216480295920)
      Unregister query: 3.6m (216484295907)

    Fragment F00
      Instance 8f42a3b6ca6cf1cf:72fd65e100000004 (host=xxxx:22000)
        AGGREGATION_NODE (id=1)
          HDFS_SCAN_NODE (id=0)
            File Formats: TEXT/BZIP2:2
             - DecompressionTime: 3.4m (203596406406)

我选择bzip2压缩格式的原因是因为bzip2是可分割的,我所有的测试查询都是使用4台主机来运行的,即使是对于那两个大的bzip2文件也是如此。

正如我们所看到的,为了让Impala读取最大的1.1GB bzip2文件,解压这个文件几乎需要4分钟。对于表bzip2_smallfiles_8,虽然我们有更多的文件需要解压,但是因为我们可以在多个主机上并行执行解压操作,因此不会对性能造成太大影响。

综上所述,太多的小文件(比如KB或者比较小的MB文件)在Hadoop中是不允许的,然而,文件太少而压缩大小太大也是不好的。理想情况下,我们应该使文件大小尽可能接近块大小(在CDH中默认为256MB),以便优化性能。

编译自:BIG COMPRESSED FILE WILL AFFECT QUERY PERFORMANCE FOR IMPALA

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

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

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
文件存储
文件存储(Cloud File Storage,CFS)为您提供安全可靠、可扩展的共享文件存储服务。文件存储可与腾讯云服务器、容器服务、批量计算等服务搭配使用,为多个计算节点提供容量和性能可弹性扩展的高性能共享存储。腾讯云文件存储的管理界面简单、易使用,可实现对现有应用的无缝集成;按实际用量付费,为您节约成本,简化 IT 运维工作。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档