gpt4 book ai didi

python - 如何使用python使用hadoop处理apache日志文件

转载 作者:行者123 更新时间:2023-12-02 22:00:26 24 4
gpt4 key购买 nike

我是hadoop的新手,无法很好地理解这个概念,
我遵循以下过程

  • 通过查看here
  • 安装Hadoop
  • 通过查看python中的here和worcount示例并对它们进行正常工作,尝试了本教程中的基本示例。

  • 实际上我正在尝试做的/我得到的要求是使用以下格式的python使用hadoop处理位于 /var/log/httpd的fedora(linux)中的apache日志文件
    IP address    Count of IP   Pages accessed by IP address

    我知道apache日志文件将分为两种
  • access_logs
  • error_logs

  • 但是我真的无法理解apache日志文件的格式。

    我的Apache日志文件内容如下所示
    ::1 - - [29/Oct/2012:15:20:15 +0530] "GET /phpMyAdmin/ HTTP/1.1" 200 6961 "-" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.1 (KHTML, like Gecko) Chrome/21.0.1180.77 Safari/537.1"
    ::1 - - [29/Oct/2012:15:20:16 +0530] "GET /phpMyAdmin/js/cross_framing_protection.js?ts=1336063073 HTTP/1.1" 200 331 "http://localhost/phpMyAdmin/" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.1 (KHTML, like Gecko) Chrome/21.0.1180.77 Safari/537.1"
    ::1 - - [29/Oct/2012:15:20:16 +0530] "GET /phpMyAdmin/js/jquery/jquery-1.6.2.js?ts=1336063073 HTTP/1.1" 200 92285 "http://localhost/phpMyAdmin/" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.1 (KHTML, like Gecko) Chrome/21.0.1180.77 Safari/537.1"

    谁能解释一下上面/ apache日志文件的结构

    我对如何处理数据IP地址,IP地址数,IP地址访问的页面的日志文件感到困惑

    谁能让我知道我们如何使用python和以上信息使用haddop处理apache日志文件,并将结果存储为上述格式

    任何人都可以用python提供基本代码来处理上述格式的apache日志文件,以便我能实时了解如何使用python代码处理文件并根据需要进行扩展

    最佳答案

    这只是部分答案,但我希望您会发现它的用处,如果您需要更具体的内容,请使用您的代码和遇到的具体问题更新您的问题。

    文件处理资料

    Python docs很好地解释了文件处理。

    如果您想实时监视日志文件(我想这就是您的问题……),请查看this question here。它还与监视日志文件有关。我不太喜欢接受的答案,但是有很多不错的建议。

    行处理内容

    一旦设法从日志文件中获取单独的行,就将要对其进行处理。它们只是字符串,只要您知道格式就非常简单。我再次提到the python docs。如果您想做任何激烈的事情,您可能需要检查一下。

    现在给出给定的行格式:

    编辑,鉴于日志行的实际格式,我们现在可以取得进展...

    因此,如果您从日志文件中抓取一行,例如:

    line = '::1 - - [29/Oct/2012:15:20:15 +0530] "GET /phpMyAdmin/ HTTP/1.1" 200 6961 "-" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.1 (KHTML, like Gecko) Chrome/21.0.1180.77 Safari/537.1"'

    第一步是将其分成不同的部分。我利用以下事实:日期和时间用“[...]”括起来
    lElements = line.split('[')
    lElements = lElements[0] + lElements[1].split(']')

    这给我们留下了:
    lElements[0] = '::1 - - ' #IPv6 localhost = ::1
    lElements[1] = '29/Oct/2012:15:20:15 +0530'
    lElements[2] = ' "GET /phpMyAdmin/ HTTP/1.1" 200 6961 "-" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.1 (KHTML, like Gecko) Chrome/21.0.1180.77 Safari/537.1"'

    日期元素 can be converted into a friendlier format

    “url”元素包含有关实际请求的内容(HTTP动词,HTTP版本,一个神秘数字和一堆用户代理内容)。

    编辑添加代码以获取url和ip地址。忽略时间的东西
    ip_address = lElements[0].split('-')[0] # I'm just throwing away those dashes. are they important?
    http_info = lElements[2].split('"')[1] # = 'GET /phpMyAdmin/ HTTP/1.1'
    url = http_info.split()[1] # = '/phpMyAdmin/'

    """
    so now we have the ip address and the url. the next bit of code updates a dictionary dAccessCount as the number of url accesses increases...
    dAccessCount should be set to {} initially
    """

    if ip_address in dAccessCount:
    if url in dAccessCount[ip_address]:
    dAccessCount[ip_address][url]+=1
    else:
    dAccessCount[ip_address][url]=1
    else:
    dAccessCount[ip_address] = {url:1}

    因此,dAccessCount的键是已访问任何URL的所有IP地址,而dAccessCount [some_ip_address]的键是ip_address已访问的所有URL,最后:dAccessCount [some_ip_address] [some_url] =次数从some_ip_address访问some_url。

    关于python - 如何使用python使用hadoop处理apache日志文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13192283/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com