云服务器价格_云数据库_云主机【优惠】最新活动-搜集站云资讯

负载均衡_阿里云备案服务号申请_速度快

小七 141 0

使用Databricks分析Apache访问日志

Databricks提供了一个强大的平台,可以在一个地方处理、分析和可视化大小数据。在本博客中,我们将说明如何使用笔记本电脑分析Apache HTTP web服务器的访问日志。笔记本允许用户编写和运行任意Apache Spark代码,并以交互方式可视化结果。目前,笔记本电脑支持三种语言:Scala、Python和SQL。在本博客中,我们将使用Python进行说明。本博客中介绍的分析以及更多内容可以在Databricks中找到,作为Databricks指南的一部分。在Databricks工作区的"Databricks_guide/Sample Applications/Log Analysis/Log Analysis in Python"找到这个笔记本,它还将向您展示如何使用新的sparksql1.3api用Python创建访问日志的数据框架。此外,在同一个文件夹中还有Scala和SQL笔记本,提供了类似的分析。入门首先我们需要找到日志文件。在本例中,我们使用的是综合生成的日志,这些日志存储在"/dbguide/sample_log"文件中。下面的命令(在笔记本中键入)将日志文件路径名指定给DBFS_SAMPLE_LOGS_FOLDER变量,该变量将在本分析的其余部分中使用。图1:Databricks云实例中合成生成的日志的位置正在分析日志文件日志文件中的每一行都对应于一个apacheweb服务器访问请求。要解析日志文件,我们定义parse_apache_log_line(),这是一个以日志行为参数并返回日志行的主要字段的函数。此函数的返回类型是一个PySpark SQL行对象,它对web日志访问请求进行建模。为此,我们使用实现正则表达式操作的"re"模块。APACHE_ACCESS_LOG_模式变量包含用于匹配访问日志行的正则表达式。具体而言,APACHE_ACCESS_LOG_模式匹配客户端IP地址(ipAddress)和标识(clientId),HTTP身份验证定义的用户名(userId),服务器完成处理请求的时间(dateTime),客户端发出的HTTP命令,例如GET(方法),协议,例如HTTP/1.0(protocol),响应代码(responseCode),以及响应的大小(以字节为单位)(contentSize)。图2:解析Databricks云笔记本中的日志文件的示例函数正在加载日志文件现在,我们已经准备好将日志加载到弹性分布式数据集(RDD)中。RDD是元组(行)的分区集合,是Spark中的主要数据结构。一旦数据存储在RDD中,我们就可以方便地并行地分析和处理它。为此,我们启动一个Spark作业,该作业使用前面定义的parse_apache_log_line()函数读取并解析日志文件中的每一行,然后创建一个名为access_logs的RDD。access_logs中的每个元组都包含日志文件DBFS_SAMPLE_logs_FOLDER中对应行(请求)的字段。注意,一旦我们创建了access\u logs RDD,我们就通过调用cache()方法将其缓存到内存中。这将大大加快我们在access\u日志上执行的后续操作。图3:Databricks Cloud notebook中加载日志文件的示例代码在上述代码片段的末尾,请注意,我们统计了access_日志中的元组数(结果返回100000个)。测井分析现在我们可以分析access\u logs RDD中存储的日志。下面我们举两个简单的例子:计算平均内容大小计算并绘制每个响应代码的频率1平均内容大小我们分两步计算平均内容大小。首先,我们创建另一个RDD,content_size,它只包含access\u日志中的"contentSize"字段,并缓存此RDD:图4:在Databricks笔记本中创建内容大小RDD其次,我们使用reduce()运算符计算所有内容大小的总和,然后将其除以元组的总数,以获得平均值:图5:使用reduce()运算符计算平均内容大小结果是249个字节。同样,我们可以很容易地计算最小值和最大值,以及内容大小分布的其他统计信息。需要注意的一点是,上面的两个命令是并行运行的。每个RDD都是跨一组worker进行分区的,在RDD上调用的每个操作都在相应RDD分区上的每个worker上并行发送和执行。例如,作为reduce()参数传递的lambda函数将在content\u size RDD的每个分区上的worker并行执行。这将导致计算每个分区的部分和。接下来,这些部分和在驱动程序处聚合以获得总和。缓存rdd并并行处理它们的能力是Spark的两个主要特性,它允许我们执行大规模、复杂的分析。2计算并绘制每个响应代码的频率我们使用map-reduce模式计算这些计数。特别是,代码片段返回元组的RDD(response_code_to_count_pair RDD),其中每个元组都将一个响应代码与其计数相关联。图6:使用图6减少响应代码接下来,我们从response_code_to_count_pair rdd获取前100个元组,以筛选出可能的错误数据,并将结果存储到另一个rdd,response_code_to_count_数组中。图7:使用take()过滤掉可能的错误数据为了绘制数据,我们将响应的"代码"转换为"计数"的数组RDD转换为一个数据帧。DataFrame基本上是一个表,它与流行的Python的pandas包中的DataFrame抽象非常相似。产生的数据帧(响应_code_to_count_data_frame)有两列"response code"和"count"。图8:将RDD转换为DataFrame以便于数据操作和可视化现在,我们可以通过在数据帧上调用display()来绘制响应代码的计数。图9:使用display()可视化响应代码如果要更改绘图大小,只需单击绘图下方的向下箭头,然后选择另一种绘图类型,即可交互更改绘图大小。为了说明这一能力,下面我们用饼图展示相同的数据。图10:将响应代码的可视化更改为饼图额外资源如果你想用Databricks云来分析你的Apache访问日志,你可以在这里注册一个账号,你也可以在Github上找到源代码。其他Databricks Cloud how tos可在以下网址找到:运行Spark作业的最简单方法免费试用Databricks。今天就开始吧