Hunk/Hadoop: 性能最佳实践

  • Jonathan Allen
  • 李建盛

2015 年 9 月 27 日

话题:性能调优大数据语言 & 开发AI

无论有没有使用 Hunk,当运行 Hadoop 时,有很多种方式导致偶尔的性能底下。多数时候人们是增加更多的硬件来解决问题,但是有时候只需要简单更改下文件的名称就可以解决问题。

运行 Map-Reduce 任务 [Hunk]

Hunk 运行在 Hadoop 之上,但是这并不意味着一定做到有效的使用。如果 Hunk 运行在“复杂模式”,而不是“智能模式”的话,它就没有真正的用到 Map-Reduce。相反它会直接将所有的 Hadoop 数据拉到 Splunk 引擎,并在那里处理它。

HDFS 存储 [hadoop]

在 Hadoop 的很多事项和 Hunk 有关联时如何部署文件?你需要在文件路径中包含时间戳,Hunk 可以使用目录结构来当作一个过滤器,可以极大的减少被拉到 Splunk 的数据量。

在文件名称中包含时间戳也可以生效,但是效果较差,因为 Hunk 仍然会读取所有的文件名。

为了更好的性能,你可以在文件路径中包含一个健-值对。例如 “…/2015/3/2/app=webserver/…” 。在遍历目录时查询指令会将包含键-值对的过滤掉,再次减少了被拉到 Splunk 的数据量。

基于时间戳的 VIX/indexs.conf[hunk]

当文件存储模式对于任何的 Hadoop Map-Reduce 有利时,你就需要修改 indexs.conf,以让 Hunk 可以识别目录结构。

文件格式 [Hunk]

诸如 JSON 和 CSV 这样的自我描述的文件,对于 Hunk 来说是很容易读取的,它们更加的详细,且消除了代价昂贵的映射操作。

压缩类型/文件大小 [Hdaoop]

要避免过大的文件,例如 500MB 的 GZ 压缩且没有分片的文件。(诸如 LZO 压缩的分片文件也是可以接受的。)对于没有分片的文件来说,在 core 和文件之间是一对一的映射关系,这就意味着只能有一个 core 来处理大文件,而其它定 core 只能空转等待。也就是说处理没有分片的文件花费了大量的时间,那么 Map-Reduce 的任务就无法快速的处理。

同样,你也应该避免使用大量的大小在几十 KB 到几百 KB 之间的碎文件。如果文件太小,你会在启动和管理任务花费大量的时间,而不是真正的用在处理数据本身之上。

报告加速 [hunk]

Hunk 现在可以利用 Splunk 的报告加速功能了,这会在 HDFS 中缓存搜索的结果,减少或消除了需要从主的 Hadoop 集群中读取数据量。

在你启用此功能之前,请确保你的 Hadoop 集群拥有足够的空间来存储缓存。

硬件 [Hadoop]

确保你拥有合适的硬件。虽然 Hadoop 是能够运行在甚至是双核的笔记本电脑中,但是你要真正使用它,还是需要每个节点拥有至少 4 颗 4 个核的 CPU,为了能够确保拥有足够的暂存空间,你须配置至少 12GB 的内存,两块本地磁盘 (10K 或固态)

搜索 Head Clustering[Hunk]

搜索 Head Clustering 在 Splunk 6.2 中是相对较新的一个特性,在 Splunk6.3 中,对于基于 Hunk 的查询将是一个可行的属性。

查看英文原文:Hunk/Hadoop:Performance Best Practices


感谢张龙对本文的审校。

给 InfoQ 中文站投稿或者参与内容翻译工作,请邮件至editors@cn.infoq.com。也欢迎大家通过新浪微博(@InfoQ@丁晓昀),微信(微信号:InfoQChina)关注我们,并与我们的编辑和其他读者朋友交流(欢迎加入 InfoQ 读者交流群InfoQ 好读者)。

性能调优大数据语言 & 开发AI