Splunk与MapReduce

Posted by admin on Jun 20, 2011 in 更多文档 | 0 comments


应用Splunk进行大规模、非结构性数据的检索和分析——更轻松、更高效的MapReduce并行分析模式

背景

Splunk是一个通用的时间序列型文本数据(其中最典型的是IT数据)搜索、分析及报告引擎。Splunk软件主要用于以下主要IT功能:应用程序管理、安全功能、合规性及IT运行管理。

Splunk 1和Splunk 2经过优化,为用户提供了典型网站搜索体验。在搜索过程中,用户可快速搜索到前10项到前100项的结果。超过固定限值的搜索结果均不可恢复,除非新增了其他搜索标准。在这种情况下,splunk的扩展性受限。而splunk 3新增了统计功能,增强了分析能力。该项新增功能使得用户可根据索引获得更多详细搜索内容。

为答谢Splunk用户多年的支持并应对大型数据处理的挑战,2009年7月,splunk对其软件模型进行了修改。修改过程中采用一种名为“分类和获取”的方法新增大规模数据集检索和分析功能,即MapReduce 程序。经过再次优化后的Splunk 4利用MapReduce并行编程模型优化其搜索语言。

当然,通过MapReduce进行并行分析的方式并不是Splunk独有的。但是,不一样的是,Splunk利用表达式搜索语言对可索引数据存储进行MapReduce运算,这为分析大量IT数据提供了更加简单、快速的方式。除此之外,Splunk MapReduce运算是IT数据实时收集、存储和处理的完整解决方案的组成部分,无需记录或保存代码,而代码记录和保存通常是一般MapReduce运算所必需的。

本文将介绍根据Splunk MapReduce模型处理大规模IT数据的方法。

什么是 MapReduce?

MapReduce是2004年由Google开发的分散式数据处理模型。MapReduce 的基本设计理念是把问题分成两个部分:1)将源数据转换成充分统计数据的映射函数;2)将所有充分统计数据合并为最终答案的化简函数。通过定义,所有并行映射函数可同时运行且不会相互影响。一旦使用映射函数运算所有数据,就可结合映射阶段的结果进行化简函数运算。

对于网页搜索分析方案中常见的大规模批量处理和高速数据检索,MapReduce能够提供最快速、最节省且最大规模的数据返回程序。当今,大部分“大规模数据”先进管理技术是基于MapReduce研发的。MapReduce虽然在扩展性能上存在一些限制,但是也直接弥补了其需要记录和保存许多代码的缺陷。

使用特殊数据获取/存储方式后的检索速度和规模

经优化后,Splunk引擎索引速度加快并能把非结构化数据持续下载到系统中。特别是 Splunk 使用一个持续数据简单构架——事件,仅包括原事件文本、使用时间戳和数据源(主要是文本型输入的文件名)、数据源类型(数据一般类型说明)和主机(数据来源处)。一旦数据进入Splunk系统,就迅速进入处理阶段,完成处理。数据一直保持原来的格式。用户可用上述字段和仍保留原事件文本形式的所有关键词对其进行索引。

在规模适中的程序部署中,数据生成并写入硬盘几秒后(若是网络输入,则更快),都可用于搜索和报告。这与Google的MapReduce程序和Hadoop不同,它们完全不知进入系统的下载数据。

索引是 Splunk典型“super-grep”的基本元素,同时它保证了大多数检索任务能够更快速完成。对原事件进行的更为复杂的处理将被推迟到搜索时间过后,目的在于实现以下四个重大目标:只进行简单处理,以便加快检索速度;将新数据带入系统是个相对省力的做法,因为无需任何构架规划;存留了原始数据,以便进行简单检查;系统适应根据数据分析问题进行的改变,不要求重新下载或索引数据。

典型的高性能Splunk 程序部署包括许多有指示器功能的服务器。通过服务器、台式电脑或网络设备的网络生成的数据将被转发给众多指示器之一。转送器和指示器间的联系并不紧密,这就避免了系统相互联系产生的瓶颈问题。另外,所有数据均可存储在指示器中,这使指示器保持下载平衡。虽然数据分布在许多指示器上,这可视作一种通过 MapReduce增加索引性能的程序,但是搜索和报告均取得很好的效果,这在下面几个部分将详细说明。

利用Splunk搜索语言简化分析

Splunk 搜索语言是表达零散或密集表列数据的准确方式。它利用MapReduce程序却无需记录编码或了解如何划分映射和化简阶段。Splunk 搜索语言主要源自Unix 命令解释程序,这使数据从一个不相连的程序转到另一个程序,轻易地得到复杂的数据处理任务。在Splunk中,它是一个强大的搜索指令合集,可转化为线性流水线。默认模式为在指令与指令间传递表格。大规模任务的复杂性在于处理工程中出现有许多行(不限定行数)的表格。

搜索时间表栏列数通常指文件的字段数。和典型数据库不同,这些列在Splunk数据中不会持续出现。通过搜索,原始数据增加了许多字段。通过配置,字段可通过自动关键字/数字值读取和通过一般表达式或定界符或通过SQLjoin-like查找进行的精确读取等技术自动添加。字段也可根据研究动态建立。该研究使用指令如“eval”指令来计算表达式,使用“rex”指令来运行根据一般表达式所需读取的信息,使用“lookup”指令应用lookup表。

以下是Splunk搜索语言方面的一般研究和有用研究:

  • search googlebot
  • 该搜索仅可检索所有包含字符串“googlebot”的事件。这和运行数据集上的“grep -iw googlebot”非常相似,虽然有利用索引。这在Web访问日志中很有用,一般任务为了解一般 search bots找到的内容及它们寻找的资源。

  • search sourcetype=access_combined | timechart count by status
    该项搜索检索到的所有数据的标示数据源为“组合访问”,这是典型的Web访问日志数据。数据分为统一的时间组。对于时间组,为得到每个明显的HTTP“状态”编码而计算事件数。该搜索一般用于判断Web服务器或服务的健康状况。特别有助于发现错误增长,无论是代表新内容推送的404s还是代表服务器问题的500s。
  • search sourcetype=access_combined | transaction clientip maxpause=10m| timechart median (eventcount) perc95 (eventcount)
    该研究重新检索了所有Web日志数据。然后将所有事件统一集中,进行客户IP地址认证的交易,若事件间隔超过10分钟,则将该事件当做单独交易处理。最后,按时间整合数据,按每个不相连的时间段划分。计算时间中点和95%时间段的事件数。

用公式表达分布式任务,无需编写大量编码

在其他MapReduce框架例如Google自身的或开发资源Hadoop中,用户的任务是将检索任务融入映射函数和化简函数。因此,Google与Yahoo均在MapReduce基础架构上建立分层,以简化终端用户操作。Google数据处理系统名为Sawzall,而Yahoo数据处理系统名为Pig。使用这些语言编写的程序可以自动转换为 MapReduce任务且可以通过群集并行运行。与原MapReduce框架相比,分层框架无疑使得MapReduce更加易于操作,但是需要编写大量编码。

在Splunk中,通过从头到尾浏览搜索并确定不可并行执行的第一搜索指令,任何使用搜索语言进行的搜索均可自动转换为并行程序(记录Hadoop编码或Pig或 Sawzall的脚本))。为适合的映射函数选择搜索指令。将该搜索映射函数列入一个完全并行指令(具有非并行命令映射函数)。所有后续指令均有该搜索的化简函数。我们考虑用从Web Analytics中的简单范例来说明这个想法。

  • search sourcetype=access_combined | timechart count by status
    该搜索首先检索所有数据源为“access_combined”的事件。接着,事件被临时分散,报告每个时间段每个明确状态代码事件数。在该情况下“search sourcetype=access_combined”将在包含合适数据的所有群集节点上并行运行。“timechart count by status”部分为化简步骤,将在该群集搜索节点上运行。就有效性而言,时间图表指令将自动总结阶段纳入映射步骤,指令将被转换为“search sourcetype=access_combined | pretimechart count by status”。这使该分散式群集节点能够输送充足统计数据(与搜索指令整体事件截然相反)。网络交流形式为包含该形式的元组的表格(时间戳、计算和状态)。
  • eventtype=pageview | eval ua=mvfilter(eventtype LIKE “ua-browser-%”) | timechart dc(clientip) by ua
    首先检索表示访问次数的事件。接着,在事件类型字段中统计字段名为“ua”的字段,有许多其他类型的字段。最后临时分散事件,报告每个时间段每个访问者的不同客户的IP。在这种情况下,“search eventtype=pageview | eval ua=mvfilter(eventtype LIKE “ua-browser-%”)” 指令在该群集所有包含合适数据的节点上并行运行。和以往一样,时间图表指令将自动总结阶段纳入映射步骤,指令将被转换为“search eventtype=pageview | eval ua=mvfilter (eventtype LIKE “ua-browser-%”) | pretimechart dc(clientip) by ua.”.网络通信形式为包含该形式的元组的表格(时间戳、客户端、ua、计算)。

时间MapReduce—如何在单一节点扩展搜索

即使在在单一节点上运行时,Splunk也是使用MapReduce模型。Splunk不在该群集每个节点上运行映射函数,而是将该数据归类为互斥型且时间长。映射函数在这些时间段单独运行且输出的充分统计数据保存在硬盘上。对整个数据集进行分析后,Splunk将在每个有重复统计数据的数据集上运行化简函数。

图1:现有的MapReduce

通过预览提高MapReduce方案效率

为了在搜索大数据集时保持吸引人的互动模式,Splunk搜索运行时的MapReduce基础方案经过一些改进。其中一个重要的转变是对充分统计数据集定期进行简化,从而无需等待搜索完成便可生成最终结果的预览。这有利于通过在搜索中辨别错误(如字段拼写错误、错误指定值或不正确的统计数据集合),精简复杂搜索,避免浪费时间与资源。

空间MapReduce——如何在新增节点上扩展搜索

Splunk还具有一个工具,如典型MapReduce,通过在由许多计算机组成的群集分散处理、加速计算。在Splunk中,这被称为“分布式搜索”。在搜索结果用映射函数和化简函数形式表达后,建立连接该搜索群集的网络连接。上述Splunk示例均使用映射函数表达,每个示例均使用时间MapReduce方案开始处理数据。当数据流返回至启动搜索的示例时,数据将存入硬盘,进行简化函数运算。

图2:Splunk分布式搜索

一般,对于单纯报告映射函数运算(为方便网络传输压缩数据)的搜索情况,其报告速度由群集索引服务器个数决定。然而,一些搜索没有映射函数运算。例如,任何服务器在所有索引数据中搜索“*”,必须回到搜索示例进行计算。这个示例可能成为处理过程中的瓶颈。分工十分有利于单纯搜索。由输入率与输出率支配的搜索(大海捞针式的搜索)和由解压缩率支配的搜索(检索到许多记录,这些记录分布及时妥当且不同时涌入的)都很大程度上得益于分布式搜索。第一个示例中,群集的有效输入/输出带宽随着群集的电脑数呈线性变化。第二个示例中,CPU资源呈线性变化。

在大多数使用实例(如大海捞针型故障排除法或报告和统计数据集合)中,Splunk扩展性仅受用于处理任务的指示器数量的影响。

通过摘要索引增加扩展性

大量数据分析问题在使用“摘要索引”技术的Splunk早期版本就有说明,其大意就是定期处理较小的原始数据块(五分钟到一小时间的数据集)并将处理结果保存在与原始数据相似的时间序列型索引记录。MapReduce的映射函数可立即识别。之后,需要查看这些数据时,可索引这些充足的数据并将其化简为想要的答案。

Splunk 4仍保留该技术以应对同类问题。通过定期对数据进行预处理(一般每小时一次或每天一次),充分准备好一般报告所需的数据。

比较语言:Sawzall与Splunk搜索语言

对于处理一般任务,Splunk搜索语言十分简单,这是Splunk搜索语言最大的优点。例如,我们会考虑Sawzall所列的第一个例子。该例计算了技术记录数量、数值之和及数值平方之和。

Sawzall语言示例如下:

count: table sum of int;

total: table sum of float;

sum_of_squares: table sum of float;

x: float = input;

emit count <- 1;

emit total <- x;

emit sum_of_squares <- x * x;

完成同样的任务,使用Splunk搜索语言则更加高效:

source= | stats count sum(_raw) sumsq(_raw)

注:对于从Google发布文档,使用Sawzall语言比直接使用MapReduce框架(如Hadoop)简单得多。根据Google研究,典型的Sawzall程序比使用同等C++语言编辑的MapReduce程序短10-20倍。

此比较不涉及Splunk将扩展性传递给大型数据集的有效性和易操作性。若必须从字段中选取合适的值,则比较会变得更加激烈。Splunk通过定界符或一般表达式从文件中获取字段。另外,Splunk可利用通过一个数据集的例子、以互动的方式让用户学习一般表达式,因此久而久之用户便会了解产品。

结论

处理大型数据集时,MapReduce的处理的商品硬件大群集并行处理的性能和可测量性都十分优秀。除MapReduce外,还有许多语言和框架得到发展,如Google Sawzall、Yahoo! Pig、开放资源Hadoop框架及splunk。虽然MapReduce是调节Splunk搜索和报告能力的基本元素,但是使用splunk进行大规模数据检索比使用MapReduce处理方便。

与要求自定义脚本或代码的MapReduce语言和框架不同,Splunk利用自身搜索语言使复杂处理自动过程运行。Splunk搜索使富有挑战性的语言分析任务变得容易,且无需用户控制调节。在MapReduce基础上,Splunk扩展性仅受运行Splunk指示器的资源数量影响。

除了搜索语言简单外,Splunk有一个统一的索引能力,可自动控制数据读取和下载。Splunk有大量用于数据下载的程序,所述程序不需要开发或保存编码,因此splunk用户的操作可以更高效。

同时通过将编码(存储的)分发到硬盘的方法,提高Splunk的速度和效率。通过单/多节点分配存储功能或在过程中预览搜索功能,Splunk为优化扩展性提供了灵活的选择。

使用splunk用户界面可简化大型数据集分析。经过多次产品发布得到改进的Splunk UI非常适用于与大规模IT数据分析相关的故障排除、动态报告和仪表板创建。


Leave a Reply

Your email address will not be published. Required fields are marked *

*

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>