本项目是一个分布式计算框架,用于分析网站的URL访问频率,并根据配置文件启动master和slave进程,提供Thrift服务以计算URL访问频率的Top N。以下是项目的详细信息和使用指南。
启动脚本:要进入到bin目录,再一键启动startMR.sh脚本,否则会报错 。找不到输出和输出目录。
序号 | 考核点 | 完成情况 |
---|---|---|
1 | 本机一键启动服务 | 是 |
2 | 分布式环境下的一键启动 | 否 |
3 | 根据配置参数输出正确计算结果 | 是 |
4 | 实现的 FileFormat 接口类 | UnsplitFileFormat |
5 | FileFormat 实现类中的 isSplitable 返回 true | 是 |
6 | 正确输出 shuffle 文件及其路径 | 是 |
7 | shuffle 文件格式 | 否 |
8 | Map 任务是否流式读取文件 | 是 |
9 | Reduce 任务是否流式读取 shuffle 文件 | 是 |
10 | 资源不足时,调度是否正常阻塞等待 | 是 |
11 | 执行的 map 任务数量 | 2 |
12 | 执行的 reduce 任务数量 | 2 |
13 | Master/Driver 是否参与实际计算 | 是 |
14 | 结果文件是否采用 avro 格式存储 | 否 |
15 | 是否提供了 Thrift 服务功能 | 是 |
16 | Thrift 服务接口是否实现完整并能返回正确结果 | 是 |
随着互联网的发展,网站和应用的流量呈指数级增长,对于企业和各类平台来说,了解用户的访问习惯和常访问的URL变得至关重要。传统的单机计算方法已无法处理如此庞大的访问日志数据,因此需要一个分布式计算框架来解决这个问题。
本框架实现了以下功能:
- 启动服务:根据配置文件启动master进程和一定数量的slave进程。
- 计算URL访问频率TOP N:根据配置进行URL访问频率的计算,输出Top N的结果。
- Thrift服务:提供Thrift服务接口,允许外部调用计算URL访问频率TOP N的功能。
- Shuffle数据处理:实现了Shuffle数据的读写功能,用于在Map和Reduce任务之间传递数据。
- 将配置文件(master.conf、slave.conf、urltopn.conf)放置在bin目录下。
- 执行startMR.sh脚本,启动分布式计算框架及其相关服务。
使用mvn clean package
命令打包,输出文件为mymr-1.0.jar
,包含所有项目依赖。
配置文件放置在bin目录下,包括:
master.conf
:配置master进程的相关参数。slave.conf
:配置slave进程的相关参数。urltopn.conf
:配置URL访问频率计算的相关参数。
基于提供的Thrift IDL文件,实现了以下Thrift服务接口:
submitApp
:提交计算任务。getAppStatus
:获取计算任务的状态。getTopNAppResult
:获取计算结果的Top N。
示例的输入日志文件包含了不同的URL访问记录,IP地址、时间戳、方法、URL和状态。如:
192.168.0.1 - [10/Aug/2023:13:55:36 +0000] GET http://example.com/page1 200
192.168.0.2 - [10/Aug/2023:13:56:37 +0000] GET http://example.com/page2 200
...
根据输入样例,框架会计算URL的访问频率,并输出Top N的结果。如:
http://example.com/page4 4
http://example.com/page3 2
http://example.com/page2 2
在实现框架功能的基础上,加分项包括分布式部署启动、文件切分、Kyro序列化、流式文件读取等。而Shuffle数据处理是一个扣分项。
本项目在Demo代码中标记了需要补充的实现,但考核的重点是Top N的计算而不是Demo中的Word Count,希望同学们能够理解并正确实现Top N计算逻辑。
请将作业提交到以自己邮箱前缀命名的仓库中,例如学生张三的提交地址为:
http://120.92.88.48/zhangsan/mymr.git
请根据项目要求和描述,完成作业并按要求提交。