流量运营项目说明
求职定位:至少是团队的Leader
一、项目关联方
1、甲方——移动运营商(移动电信联通等)
1、乙方——亚信科技(地铁人民大学站,中电信息大厦,去年搬到软件园二期)/东方网信/神州泰岳/思特奇…..
二、项目开发周期
1、项目启动时间:2011年3月份正式立项
2、项目开发周期:第一期工程于2011年8月份正式在北京移动部署上线
3、后期又陆续在江西、河南、安徽、云南等省份实施上线;每到一个省份实施时,数据采集和预处理子系统都需要根据现场情况重新设计开发,周期一般都为1个半月左右
4、升级和改造伴随在整个项目实施过程中
三、项目团队规模
1、语义识别研发团队,4~6人
2、SCA行为轨迹增强研发团队,5~6人
3、数据采集和预处理研发团队,4~6人
4、ETL团队,10人(写hive QL)
5、web应用研发团队,12人(每到一个现场几乎都要重写一遍)
6、橘云团队(4~5人)
硬件配置规模:
Sca是一个单独的hadoop集群(24个节点,每个节点的配置:4*12core CPU,10*1T硬盘,64G/128G内存)
Tas有一个单独的hadoop集群(部署了hive)(35节点)
预处理ftp采集集群(6节点,上面部署了采集程序及zookeeper服务)
Storm集群(单独)(手机位置实时分析&详单输出解析入hbase库)(10节点)kafka&zookeeper(7节点)
Hbase集群(初期20多个节点,规划中会根据数据量的增长动态扩容)
四、项目中处理的数据
1、来源:(来源特别多,在每一个省份,数据源的类型和数据格式都有差异)移动运营商的网关/信令设备,业务运营系统,形式上有实时推送,也有批量推送
2、数据量:
输入:
A、通过ftp采集的信令日志,每个省份每天约1.5T,约15亿行(日志)
B、通过storm处理的移动用户基站定位信息,每分钟约300万条
输出:
各个数据处理环节的输出情况不一
比如行为轨迹增强,输出的数据会比输入的数据更多(1.5T à2T)
Etl阶段,输出的结果为各种指标的结果维表,保存在mysql中,量不大
五、项目的整体架构《参见项目架构图》
1、分为三大功能
A、实时手机位置定位查询、分析
B、上网流量详单查询
C、离线用户画像
2、强调既有实时处理,又有离线分析
3、强调两个版本:早起的maprduce版本+现在的spark版本
4、要把整个架构图描述出来(最好是现场给他们在白板上画出来,边画边讲解),把主体流程解释清楚(预先设置一些扩展点)
六、项目实现的功能
1、手机用户实时位置查询,手机用户移动轨迹分析(重点强调主体流程、zookeeper的应用)
2、手机用户上网流量详单查询分析系统(重点强调hbase,自己设置一些扩展点往你对hbase原理的理解上引)
3、手机用户上网日志离线分析系统(用户画像)(主要是用来做业务模型统计报表)
七、主要功能模块技术架构、业务流程及技术要点
1、手机用户实时位置查询分析系统:
流程:
移动公司网关设备产生数据(通过socke以消息形式发送)
àà 亚信侧对应接口机通过socket连接数据源进行数据采集(就做在spout里)
àà 将数据缓存到kafka消息队列 (你要准备点kafka的知识要点—分布式、可重复消费、副本,持久化。。。。)
àà 用storm-kafka从消息队列消费数据
àà 在storm的topo程序中对消息解析(通过查找内存数据库中的字典表<在内存数据库中:voltDB/redis>将消息中的位置码,通信行为码等转译成更有意义的位置信息,这个逻辑是封装好的)
àà将解析完成的数据写入内存数据库voltDB/redis,并按时间段(积累到128M)批量持久化到hdfs文件 —(内存数据库中的用户位置数据提供实时页面查询,hdfs中的历史数据传递给离线分析系统为用户画像提供维度数据)
技术要点:
采集机与网关设备的socket之间通过zookeeper实现了动态绑定(分布式锁,状态监控,主备切换,失败切换)
2、手机用户流量详单查询分析系统
流程:
移动公司计费系统产生流量详单原始数据
àà亚信侧对应接口机通过socket连接数据源进行数据采集
àà 将日志数据缓存到kafka消息队列
àà用storm-kafka从消息队列消费数据
àà对流量日志数据进行解析(截取详单原始数据中详单查询所需要的字段并对单条日志的进行计费运算)
àà将解析之后的详单日志插入hbase数据库(hbase数据库一方面支撑前端页面在线详单查询、分析功能,另一方面,通过mapreduce程序对详单数据进行批量分析(批量分析是在每天凌晨定时运行,产生结果,插入分析报表),提供用户详单页面的“详单分析报表”功能)
技术要点:
亚信数据接收接口机与移动公司网关设备之间的关联是在storm程序启动时动态绑定,利用zookeeper实现
Storm与kafka的整合使用
Hbase的过滤查询、分页查询、协处理器(扩展一下你对hbase的原理的研究,和性能优化)
3、手机用户离线分析用户画像/内容分类分析系统
整体流程:
预处理系统跟外围接口对接,采集数据
àà并分类清洗合并后上传到SCA<内容识别&行为轨迹增强>的hadoop集群
ààSCA对用户上网行为日志进行分析:将日志中的url字段解析为相应内容信息(内容识别),得到行为轨迹增强日志<行为轨迹增强>,然后传给TAS<tas是一个子系统的代号,也是这个开发团队的代号,主要的职责是ETL和业务模型分析>
ààTAS再将增强日志跟话单、短信日志数据、经分数据<经营分析,是移动公司传统的BI数据>、用户基站定位数据等综合建模分析,得出各种业务模型的统计结果维表
àà将统计结果数据导入mysql数据库中(定时启动sqoop进行导入),并通过一个web系统进行展示和查询
详细流程说明:
预处理(采集,分类,合并,上传,事务控制)
流程
1、ftp方式采集数据
2、对方ftp服务器上实时不断产生数据(每五分钟一个目录,每分钟若干个文件),按照时间命名规则进行目录和文件命名
3、我方采集接口机上部署预处理子系统程序进行数据采集
4、接口机启动时会通过zookeeper获取分布式锁,然后绑定一台目标ftp服务器进行绑定采集
5、采集的步骤:
² 主线程启动,定时(扫描周期为10分钟)探测ftp服务器上的目录和文件,判断是否有需要采集的新数据(每次采集都会记录采集的状态)
àà如果有,则用ftp客户端获取要采集的文件路径列表,然后启动一个线程池下载文件到本地的一个临时目录tmp下,子目录结构及文件名跟ftp服务端保持一致
àà在本地对文件进行分类(参见《PSCE接口文档》文件名上有类型信息:http/wap/conn/mms/等)和合并(即10分钟内的文件会分类合并)
àà将合并文件上传到SCA的hadoop集群指定目录下(上传过程中,10分钟批量数据会放入一个“小时父目录”下,“小时父目录”名会带.processing后缀)
àà当一个小时的数据合并上传完成后,将hadoop中的“小时父目录”后缀更名为.done
àà并将本地的文件移往备份目录(24小时)
² 另外还有两个线程:异常文件处理线程(比如ftp服务器上超过时限才到达的数据,文件名有误的数据,空文件,校验和不通过的数据)和备份文件管理线程,具体工作流程参见《预处理流程图》
技术要点
采集程序是一个分布式集群,实现了动态的任务绑定和主备机切换,基于zookeeper
数据采集过程中实现了一定程度上的事务特性:10分钟批次级别的原子性,状态记录及失败回滚
为了后续mapreduce分析的效率,对小文件进行了合并操作(合并之前的小文件大约是100多M一个,合并之后是2G一个,文件blocksize512M,一个小时的数据在sca阶段,处理完成大约12分钟)
SCA行为轨迹增强
整体流程图如下:
细节说明:
1、首先,系统中存在两个知识库:规则库和实例库,里面存放的内容是大量有代表性的URL所对应的网页的内容分析信息,如网页所属的网站、栏目、频道、标题,内容主题,关键词,作者,发表日期,影片名称、导演、主演。。。。。。
2、本子系统的输入数据是预处理送过来的合并日志文件,输出则是增强日志和待爬清单
3、本子系统的运行规则:由一个线程定时监控预处理系统的数据上传目录,发现有.done的文件夹时,获取文件夹列表,并提交一个mapreduce job进行处理,处理完成的两类结果分别写入两个不同的目录
4、处理完一批数据之后,会将这批数据转移到备份目录(hdfs)(3天)
5、mapreduce job的逻辑流程: map task逐行读取合并日志,获取其中的url字段在规则库和实例库中匹配内容分析信息,如匹配成功,则将内容分类信息追加到原日志内容后输出到增强日志目录;否则,只将url字段输出到待爬清单目录;
技术要点:
Mapreduce程序
Mapreduce中访问外部数据库(setup方法中将规则库加载到内存)
自定义outputformat,把不同的处理结果写入不同的路径
语义识别子系统
整体功能说明
抓取待爬清单中url所指向的网页,通过模板抽取和语义识别对网页内容进行分析,得到网页内容信息分析结果,并将分析结果存入“实例库”<redis>
模板示例: <adapt-site> *.youku.com/movie/ </adapt-site>
<property> <fieldname> movie_name </fieldname> <fieldvalue> xpath </fieldvalue> </property> |
流程说明:
子系统启动后会有一个线程扫描待爬清单目录
àà发现有.done的待爬清单目录,则启动爬虫调度,将待爬清单中的url读入任务队列
àà驱动爬虫程序nutch|httpclient抓取页面
àà对抓取到的页面进行分析
àà首先看该页面是否有对应的“内容抽取模板”
àà如有,则使用模板匹配方式抽取网页内容信息并存入“实例库”
àà如没有,则使用“语义识别”模块中的机器学习算法(SVM)对网页内容进行分析、提取主题,关键词,分类,并将结果存入“实例库”
技术要点
定向抓取爬虫系统(线程池任务调度、防封策略<动态代理,分散请求>、权限验证<预置一些账号>,ajax异步信息<人工分析后二次请求或者js解析引擎>,图片信息<OCR模式识别>)
任务队列
自然语言处理(SVM,你可以说成自己熟悉的某种语义分析算法,最好是来自于mahout)
模板匹配的思路,及实现中的xpath和xml技术应用
4、ETL和业务模型分析
流程:
输入数据:sca的增强日志,经分数据,手机位置轨迹数据。。。。
由业务架构师进行业务建模
通过python和hive脚本,对各类数据按模型进行综合分析
分析结果保存到mysql数据库中
用web应用对结果提供查询展示
分析指标示例:
技术要点:
Hive
Python(如果你有了解,可以讲出来,会增分不少)
任务调度平台
SSI----web应用开发(可以说参与了或者做了技术设计)