网页日志的大数据一直是我觉得实用的一个场景。用户点了啥、搜了啥,全藏在这些日志文件里。用HadoopSpark来搞,效率是真高,适合批量那些成 GB、成 TB 的访问记录。

Hadoop 的 HDFS挺适合存这种结构比较简单、但量大的日志文件。它一上来就能自动切片分布存储,配合MapReduce搞点批,速度还真不赖。尤其是你机器一多,一整个站点的访问数据都不费劲。

Spark比 Hadoop 更注重内存计算,性能提升还挺的。像你要做点实时点的统计,或者跑些复杂逻辑,直接用Spark SQL就行,写个 SQL 语句就能跑。比如 404 最多的页面、找出访问次数最多的 URL,简单明了。

上手也不复杂,比如上传到 HDFS 后,用下面代码读入日志文件:

from pyspark.sql import SparkSession
spark = SparkSession.builder.appName('WebLogAnalysis').getOrCreate()
web_logs = spark.read.text('hdfs://namenode:port/www.52ssr0.club.log')

写个函数,把每行解析成结构化格式,比如拿到IP、时间、状态码啥的:

def parse_log(line):
    fields = line.split(' ')
    return (fields[0], fields[1], fields[5], int(fields[8]))
web_logs_structured = web_logs.rdd.map(parse_log).toDF(['timestamp', 'ip', 'request', 'status_code'])

你就可以用DataFrame APISpark SQL做各种查询,像这样:

SELECT request, COUNT(*) AS 访问次数
FROM web_logs_structured
GROUP BY request
ORDER BY 访问次数 DESC
LIMIT 10

如果你是刚开始接触大数据,这个项目蛮适合练手的。记得注意日志格式解析,别出错了哈。想更深入,你可以看看下面这些资源,都是我觉得还不错的: