本文是《大数据架构商业之路:从业务需求到技术方案》的读书笔记
该书涵盖了大数据领域的各个方面。
本书还有一本"姊妹篇"--《大数据架构和算法实现之路》,本书几乎每一章都是一个很大的主题,但显然,本书的目标是求全不求精,力求使大家对于大数据的技术全貌有所了解!
Outline
- 数据收集
- 数据存储
- 数据处理
- 信息检索
数据收集
互联网数据收集(外部数据收集)
Web Crawler/Spider
爬虫策略
- 深度优先
- 广度优先
- 最佳优先
网络图-Web Graph
- PageRank算法
- HITS算法
Nutch
Nutch衍生了Hadoop,Tika,Gora和Crawler Commoms四个Java开源项目
主要组成部分:
- Crawler
- Index
- Searcher
Nutch在Lucene的基础上做了进一步封装和拓展,增加了爬虫功能
Heritrix
- Java
- 开源
内部数据收集
内部数据的收集主要分为推送和两大类
- PUSH
- PULL
Flume
- 同时采用推送和拉取两种模式
- 支持对数据进行简单处理
- 集群化管理
支持的源头:
- Spooling Directory
- HTTP
- JMS
- 嵌套 实现代理的多级嵌套
支持的沉淀器:
- HDFS
- HBase
- Morphine Solr
- Elasticsearch
- 嵌套
Morphine是一个高度拓展的ETL框架
通道类型:
- 内存通道
- 文件通道
Scribe
Logstash
Scribe和Logstash采用推送模式
数据存储
Entity Relationship Diagram -- ER图
持久化存储
- HDFS
相关内容可参考该文:Hadoop基础 - Hbase
相关内容可参考该文:数据存储-Hbase基础 - MongoDB
面向文档,查询语言很强大
支持对任意字段建立多级索引,包括地理空间索引
非持久化存储
缓存和散列
将缓存定义为数据交换的缓冲区,它的读取速度远远高于普通介质,作用是帮助系统更快地运行
缓存的普遍规律是以高速读取介质来充当相对低速的介质的缓存
策略:
- LFU Least Frequently Used
- LRU Least Recently Used
散列(或散列函数):通过一定的算法将原始的数据转换为一个唯一(或者尽可能唯一)的数值,这个数值被称为散列值
常见的缓存系统:
- Memcached
- Berkeley DB
支持持久化 - Redis -- REmote DIctionary Server
远程字典服务器
kv生命周期(Time To Live, TTL)
支持持久化:AOF日志/RDB镜像
Redis3.0--> 集群
支持水平拓展
数据处理
按及时性分类:
离线
- MapReduce
- Spark
- Hive
相关内容可参考该文:数据查询-Hive基础
其它相关工具:Pig/Impala/Spark SQL
提升数据处理的及时性
消息传递的两种基本模型:
- P2P Point to Point
- Publish/Subscribe
JMS
JMS定义一套通用的接口和相关语义,提供了持久,验证和事务等消息服务。
JMS(Java Message Service) - 需要沉重的消息头
提供事务性消息传输
Exactly Once: 消息只会发送一次,与关系数据库中的事务概念相一致
常见消息机制(系统):
- ActiveMQ
遵循JMS规范
消息传输有且只有一次 - Kafka
为减少额外的消耗,不遵循JMS规范
相关内容可参考该文:消息队列-kafka基础
在线实时处理
- storm
从错误恢复过来时,允许出现重复记录 - Spark Streaming
信息检索
现代信息检索的一般定义:从大规模非结构化数据的集合中找出满足用户信息需求的资料的过程
信息检索的基本构成
- 预处理文本信息
- 构建倒排索引
- 匹配查询关键词
- 计算相关性
核心要素:
- 相关性
- 及时性
搜索引擎的结果处理必须是秒级的,通常不能超过3秒
相关性
相关性模型:
- 布尔模型
判断是否有相同的关键词
将查询转化为布尔表达式 - 基于排序的布尔模型
tf-idf机制
基于加权求和的打分机制 - 向量空间模型 VSM Vector Space Model
将文档转化为向量
这种表示忽略单词在文章中出现的顺序
将相关性问题转换为计算查询向量与文档向量之间的相似度问题 - 语言模型
一元/二元语言模型
概率模型
VSM的Cosine计算图解释
及时性
本章主要介绍了倒排索引的相关内容
可参考这两篇文章:
搜索-Elasticsearch基础
elasticsearch-进阶2
搜索与数据库查询的对比
数据库完成的任务时通过精确的ID,查找关联的关系数据
“正向索引”
相比数据库,检索引擎的查询实时性要求更高
搜索系统采用“倒排索引”/“逆向索引”,更新索引的开销要高于数据库
搜索引擎
Web搜索中的链接分析
电子商务中的商品排序
文本模型
反作弊模型
多因子和基于学习的排序
搜索系统框架
- 预处理文本信息
中文分词
词干和归一化
停用词
同义词和拓展词 - 构建倒排索引
- 匹配查询关键词
- 计算相关性
Lucene简介
- 离线
分析器(Analyzer):分词,增加词义/拓展词,过滤停用词
分词器也能在在线查询时使用
索引器 - 在线
查询解析器(QueryParser)
搜索器(IndexSearcher)
Solr简介
DIH(Data Import Handler)
Solr -- Search On Lucne w/Replication
Master-Slave
即使在索引生成后,其分片也可以添加或再次分片,是一个更为灵活的分布式配置方案
Elasticsearch简介
Elasticsearch的副本时不包含主分片的
数据镜像服务
推荐
推荐是一种为用户提供建议,帮助其挑选物品并做出最终决策的技术
抽象来看,推荐系统一般有四个重要的角色:
- 用户
- 物品
- 情景
- 匹配引擎
推荐系统分类
按照推荐依据:
- 基于物品
- 基于用户
- 基于情景
按照相似度:
- 基于内容
- 基于知识
- 基于用户行为
- 基于社交和社区
按照相似度传播的方式:
- 无传播
- 协同过滤
推荐系统的准确性在很大程度上依赖于用户数和物品书的比例
推荐系统框架
离线部分:
- 用户建模
用户画像 - 物品建模
- 推荐算法
- 混合模型
根据不同的混合策略,将多种方式的推荐结果进行合并 - 结果存储 -- 倒排索引是不错的选择
在线部分: - 数据收集 -- 日志收集
- 前端展示
- 查询引擎 -- 搜索
Mahout
相似度计算:
- 欧式距离相似度
- 余弦相似度
- 皮尔森(Pearson)相似系数
- 斯皮尔曼(Spearman)相关系数
- Jaccard系数
kNN
在线广告
按照投放方式分类:
- 横幅 -- Banner
- 精确定向
- 搜索广告
- 情景广告
按照计费方式分类:
- CPM 按照千次展示计费
- CPT 按照单位时间计费
- CPC 按照点击次数计费
- CPS 按照成交情况收费
- 其他
按照售卖方式:
- 直接关键词竞价排名
- 广告交易平台
CPM非常适合品牌的推广
CPC模式最早产生于搜索广告,是目前最为广泛的计费方式
拍卖和计算是普通搜索引擎,推荐引擎所不具备的功能,也是在线广告与它们最大的区别
广告投放机制
- 基于搜索的广告
广告系统是另一个搜索引擎 - 基于情景的广告
广告系统架构
广告系统架构数据挖掘
Knowledge Discovery in Databases
一般指通过算法从大量的数据中挖掘有价值的模式和知识的过程
当多个数据源集成到一起,通过清晰,变换,集成,装入等步骤对数据进行处理,最后形成数据仓库
多维数据挖掘允许在各种丽都上进行多维组合查询,借此发现代表知识的有趣模式
数据挖掘的常见主题:
- 频繁模式和关联性
- 用于预测的分类和回归
- 聚类
CRM - 异常点/离群点分析
对于大数据相关的领域而言,挖掘主要应用于商务智能和信息检索
商业智能(Business Intelligence)技术提供商务运作的历史,现状和预测等数据,从而可以发现竞争对手的优势和劣势,留住具有高价值的客户,做出正确的业务决策
数据预处理
- 数据清洗 Data Cleaning
- 数据集成 Data Integration
效能评估
效果评估
- 离线评估
使用标注数据集合来评估 - 用户访谈
- 在线评估
AB测试
网友评论