《Big Data: A Survey》论文阅读分享
2018-08-18
liyakun.hit
论文信息:Mobile Networks and Applications,April 2014, Volume 19, Issue 2, pp 171–209
概述
- 大数据技术所处位置:与云计算、IOT、数据中心和Hadoop的关系
- 大数据生命周期:产生、获得、存储、分析
- 典型应用场景:企业管理、IOT、社交网络、医疗、集体智慧、智能电网
相关技术
大数据与云计算
- 云计算改革了IT基础架构,大数据则影响了商业决策,云计算是大数据能平滑扩展的保证
- 云计算的目标用户是CIO(首席信息官),大数据的目标用户是CEO
大数据与IOT
IOT(物联网)丰富的终端产生了大量的半结构、非结构化数据,这些数据只有被拿来分析才有价值
- IOT为大数据带来了很好的应用场景
- 大数据技术在IOT中的应用也加速了IOT的研究进展和商业模式。
大数据与数据中心
- 大数据需要数据中心提供强有力的支持:容量、带宽、散热等
- 大数据加速了数据中心的革命和创新,一些独特的大数据架构,促进了数据中心的存储,网络技术开发。
- 大数据希望数据中心提供更多的软实力支持,如数据获取、加工、分析与应用
大数据与Hadoop
Hadoop是工业界应用最广泛的大数据应用
大数据生命周期
数据产生
- 企业数据
- IOT数据
- 生物医学数据
- 其它学科中产生的数据:天文学等等
数据获取
数据采集
- 日志文件
- 传感器数据
- 获取网络数据:
- 基于Libpcap的数据包捕获技术:被广泛使用的函数库
- Zero-copy数据包捕获技术:全程绕过内核与CPU
- 发送时:数据从用户进程,直接通过网卡进入网络
- 接收时:网卡直接把数据送给用户进程
- 移动设备收集:IOS,Android
数据传输
- 跨数据中心传输:主要是数据进入数据中心的过程。
- (注:对通信这块不太了解,这里只列出概念,大家可以自行搜索相关资料)
- WDM:在光纤上进行信道复用的技术,光的频分复用
- OFDM :多载波传输方案的实现方式之一,采用N个重叠的子频带,子频带间正交,在接收端无需分离频谱就可将信号接收。
- 数据中心内传输:
- 网络拓扑结构
- 目标:高吞吐、低延迟,低能耗
- 挑战:网络可视化
数据预处理
- 数据集成:数据整合,并为用户提供统一视图
- 清洗:发现不正确、不完整、不合理的数据,通过修改或删除,提升数据质量
- 冗余消除
数据存储
传统外挂存储系统
- DAS: Direct Attached Storage,将存储设备通过SCSI接口或光纤通道直接连接到一台计算机上
- NAS: Network Attached Storage,存储设备通过标准的网络拓扑结构,连接到一群计算机上
- SAN: Storage Area Network,通过光纤通道连接到一群计算机上,建立专用于数据存储的区域网络
分布式存储理论基础
- CAP理论:一个分布式系统最多只能同时满足CAP三个特性中的两项。(Eric Brewer, 2000)
- Consistency:一致性,即数据写入后,所有节点在同一时间的数据完全一致
- Availability:可用性,服务一直可用,而且是正常响应时间
- Partition Tolerance:区容错性,某节点或网络分区故障的时候,仍然能够对外提供满足一致性和可用性的服务
- CA系统:不是分布式服务,比如传统的关系型数据库。或者完全不能容忍一台主机down掉的服务
- CP系统:保证一致性,但不保证任意时间可用,如BigTable,Hbase
- AP系统:保证可用性,同时保证最终一致性,如Dynamo,Cassandra
- (注:绝对的A是不存在的,P是分布式的基础,所以这个理论其实是有问题的)
大数据存储机制
- 文件系统:
- 技术已经比较成熟,不做为重点介绍,目前工业界的系统有:GFS,HDFS,Kosmosfs,Cosmos(by微软),Haystack(by FB),TFS(by Taobao),FastDFS(by ali)
- 数据库
- 行式kv数据库:
- Dynamo:by亚马逊,只有论文,未开源。分区依赖一致性哈希,高可用性,保证最终一致性
- Voldemort:by LinkedIn,开源,号称是Dynamo的开源实现。
- 列式kv数据库:
- BigTable:by Google,分布式结构化数据存储系统,原理,排序大表 + Column Family列式存储 + lsm(Log-Structured Merge)树,尤其适合写多读少的场景
- Cassandra:by FB,开源,分区模仿Dynamo依赖一致性哈希,数据模型模仿BigTable使用列式存储
- HBase:Hadoop生态圈中的一员,BigTable的Java开源实现。
- Hypertable:by Zvents,开源,BigTable的C++开源实现。
- 文档型kv数据库:
- MongoDB:by MongoDB,开源,c++,存储Value是Binary JSON对象。可以配置为CP(默认),或AP
- SimpleDB:by亚马逊,不开源,不支持自动的partition,最终一致
- Couchbase:by Apache,Erlang,存储value是JSON对象,最终一致
- 关系型数据库(支持跨行事务):
- Spanner/f1:by Google,不开源,share nothing,兼容SQL语法,跨行事务,CP系统
- Aurora:by亚马逊,不开源,共享存储,兼容mysql语法,跨行事务,CP系统
- TiDB:by PingCAP,号称是Spanner的开源实现,但是事务模型不同,share nothing,兼容mysql语法,跨行事务,CP系统。
- CockroachDB:号称是Spanner的开源实现
- (注:论文中把数据库分成了三类:行式、列式、文档型,结合最新的成果,我在这里又添加了关系型数据库。个人认为Google,亚马逊是这个领域的先驱,在kv时代两者分别提出不同的解决方案,在关系型时代,又分别提出了不同的解决方案。)
- 行式kv数据库:
- 编程模型
- MapReduce:
- 这个模型只提供两个函数给用户编程,分别是map和reduce,由框架来负责将原始数据切分并分别进行map运算,然后再将map的结果重新组织(shuffle)到各个reduce函数,最终由reduce产生输出结果。
- 由于map和reduce是两个非常基础的方法,复杂的程序设计中,需要花费大量的时间来设计如何调用这两个方法,因此,在mr的基础上,出现了一些高级一点的封装:
- Sawzall by Google, Pig Latin by Yahoo,Hive by Facebook,Scope by 微软
- Dryad:
- by微软,通过DAG把多个MR串联起来,学院派产物。可以重点关注一下Spark。
- Spark:
- by MIT,工业级的Dryad,目前最活跃的大数据的计算模型。
- 基于DAG把MR串起来,在需要shuffle的地方划分为两个不同的stage,在stage内是并行计算的,在stage间是串行的。
- 在自己的内核外层同时封装了SQL、Streaming(流式计算)、MLlib(机器学习)、GraphX(图数据)等类库,生态完整。
- All-Pairs:
- 主要应用在生物特征、生物信息学和数据挖掘应用。给定SetA SetB FuncA,All-Pairs能给出两个集群中的任意点求FuncA的结果矩阵。
- 共分为两步,第一步使用一个近似模型来对数据分区,第二步把数据流动到指定节点后,分批次的在各个节点上进行运算。
- Pregel:
- by Google,图计算模型,不开源。
- 先把图构建好了,然后把计算划分为超步(类似stage),单个超步内是并发计算的,超步之间是串行的。每个节点在一个超步结束时,可能会改变自己的状态、或自己的边的状态。
- Dremel:
- by Google,不开源。
- 解决大规模交互数据分析的实时性问题,适合数据读取数据量大,但是返回数据量小的场景,宣称可以在3秒钟的时间处理1PB数据。
- 列式存储+自定义的SQL语法
- (注:论文中并没有提到Spark,Dremel,因为Spark算是当红炸子鸡,所以必须要讲一下。Dremel是Google的分布进化中很重要的一步,在这里介绍一下Google的分布式计算进化历程:
- 从MapReduce(对应开源MapReduce)开始,提供了一种从分布式文件系统中读取并处理的解决方案。
- 接着提出了BigTable(对应开源Hbase),在分布式文件系统上面简单的包装了一个KV数据库。
- 接着又提出了Dremel(对应开源的Impala/drill),依靠自定义的存储结构和定制的SQL,在返回数据量小的场景在比MR快几个数量级),但是其实可以把它看做一个高度定制优化的MR。
- 然后又提出了Spanner/f1(对应开源的TiDB),主要背景是分布式理论实践(尤其是paxos\raft)储备就绪,向难度更高的跨行事务发起了挑战。
- 可以说,整个分布式计算的进程基本是由Google来提出问题,并指引方向(当然,亚马逊在后面也提出一些独特解决问题的方法)。
- MapReduce:
数据分析
传统分析
- 聚类
- 因子分析:指研究从变量群中提取共性因子的统计技术
- 相关性分析
- 回归分析:是一种揭示一个变量和几个其他变量之间相关性的数学工具。
- A/B测试
- 统计分析:提供大数据的描述和推断,广泛应用于经济领域
- 各种各样的数据挖掘算法
大数据分析
- 大数据时代的工具知识点
- Bloom Filter
- 哈希
- 索引
- 字典树(Triel)
- 并行计算(比如,MPI, MR, Spark, Flink)
- 常见数据挖掘分析工具
- R语言
- Excel
- Rapid-I Rapidminer
- KNMINE
- Weka/Pentaho
- tableau
- qlikview
- 实时和离线分析
- 实时计算:主要应用在电子商务和财经系统中,常见的解决方案有:
- 使用并行的传统关系型数据库组成,Greenplum by EMC,已经开源
- 使用纯内存的计算平台,HANA by SAP,商业软件,很贵
- (注:论文里面介绍到此处,是想描述一些类似于传统事务型的数据的大数据支持场景,如果是这种场景,其实还应该包含,Spanner/f1,Aurora,TiDB)
- (注:其实大数据圈子里面,还有另一个实时计算(流式计算)的概念,跟上面的概念不同,主要是解决大量数据的流动,以及流动过程中的计算问题,典型的流式计算组件有:storm,flink,都是开源的,其中Flink被认为是取代storm的产品,目前阿里在这个产品上投入了非常多的人力)
- 离线计算:主要应用在机器学习、统计、推荐系统中,常见的解决方案有:
- Hadoop,这个已经很成熟了不多介绍。
- Scribe,by FaceBook,开源的日志收集系统
- Kafka,by LinkedIn,开源消息中间件
- Timetunnel,by Taobao,开源,基于thrift通讯框架搭建的实时数据传输平台
- Chukwa,by Apache,开源日志收集处理平台,hadoop生态
- 实时计算:主要应用在电子商务和财经系统中,常见的解决方案有:
大数据典型应用
- 方向
- 驱动应用程序的进化:商业应用、网络应用、科研应用
- 结构化数据分析
- 文本数据分析
- 互联网数据分析
- 多媒体分析
- 图数据分析
- 移动数据分析
- 典型场景
- 企业级数据分析
- IOT应用
- 社交网络
- 医疗健康应用
- 集体智慧:众包, 如Amazon Turk
- 智能电网