hadoop生态
hadoop生态,最底层为HDFS, 分布式文件系统
在往上,为Hbase,分布式数据库
再上层,就是mapreduce计算框架,storm(流式计算),spark
- mapreduce:批量的数据处理
- storm:实时处理。
- spark:可批量,可实时,stream, SQL,mllib等
再上层,hive(sql引擎),mahout,webserver
- hive:将sql语句翻译成mapreduce,本质就是mapreduce。
- mahout:机器学习的lib
- webserver: pyweb, nginx等
贯穿在整个集群中的,是分布式锁服务zookeeper。
如图:
工程
工程中经常需要使用机器学习技术来挖掘数据价值。
- 机器学习
- 分类算法
- 推荐算法
- 聚类算法
常见业务
搜索场景
以前:人与内容 现在:人与服务
音乐数据来自两类:pgc,ugc
物品(item):属性(features),一般被称为元数据(metadata)。
item- 物品
user- 用户(行为:点击,展现,收藏,支付。。。)
- 不同的行为 用户付出的成本是不一样的,也就是推荐时权重是不一样的
简单的推荐引擎架构
用户点击itemA(港台十大经典歌曲《朋友》)后,系统将item交给引擎处理,引擎会从后端的nosql数据库中查出与itemA相关性较高的item推荐给用户。
推荐实现的步骤:
- 召回阶段(粗排):用token检索item(或者用item检索item),本质是找候选的过程
- 过滤阶段:把候选集合中劣质的item过滤掉
- 排序阶段(精排):把好的item排在前面。
- 截断阶段:topN,取top的过程
技术实现:
- 分词技术:
- 将歌曲名称进行分词,形成多个token
- 如某个token在itemA及另外item中都出现,相关性较强
- 模型打分:
- 对推荐候选进行模型打分。
- 数据库中储存的信息
- 可以是token与item的相关关系(需要实时对item进行分词获取token,指的是用户响应角度)
- 也可以是item与item的相关关系(需要提前离线算好item与item的关系)
item指向token的表是正排表:
token指向item的表是倒排表。
实时与离线处理的关系
见下图
- mapreduce任务 可以执行更多逻辑
- storm 实时处理的时候 只能执行简单逻辑
- 将实时与离线的数据合并后,插入到数据库中。
- 需要注意实时与离线数据合并的逻辑
基于MapReduce的建库系统
- 目的:建立供检索使用的索引和摘要
- 输入:网页
- 输出: 索引和摘要
- 处理:多轮mapreduce
- 页面分析和处理:parser-extractor
- 页面属性小库输出:splitter
- 小库正排转倒排 invert-index
- 小库合并大库 index merge