Week 1 大数据分析介绍
大数据的四个维度:4V
① Volume(数据量):生成和存储的大量数据(通常按TB或PB的顺序)
②Variety(数据形式):所使用的数据类型和数据源的范围,包括非结构化数据
③Velocity(数据速度):收集,共享和分析数据的速率-通常是实时流式数据(例如,来自社交媒体)
④ Veracity(数据的可靠性):数据质量的不确定性(准确性,出处,相关性和一致性)
Scale-up VS Scale-out
Scale-up 纵向扩展:仅在一定程度上增加计算机(即磁盘,内存,处理器)的功能。
Scale-out 横向扩展:使用许多标准计算机,并在其上分发数据和计算。
分布式计算
高性能计算(HPC,放大)
– CPU / GPU密集型问题(AI,3D图形)
Seti@Home
-在你的电脑上下载分析无线电望远镜数据
P2P
去中心化(例如bittorrent)
Hadoop -> 并行处理大型数据集
Spark ->更快,在内存里
Apache Hadoop
1.开源
2.基于HDFS (分布式文件系统)
3.Map/Reduce
Apache Spark vs Hadoop
1.快100倍
2.基于HDFS
3.数据保留在内存
4.不仅仅是Map/Reduce(Volume,velocity,图形形状数据等的集成系统。)
Week 2 :大数据量的存储基础架构
1.什么是Hadoop
(1) 特点
- 开源框架,用于可靠,可扩展的分布式计算
- 由Apache Software Foundation开发
-去中心化的开源开发者社区
-支持协作的、基于共识的开发过程 **
(2)Hadoop的核心模块**
- Hadoop Common:支持其他Hadoop模块的通用实用程序。
- Hadoop Distributed File System (HDFS™):分布式文件系统,提供对应用程序数据的高吞吐量访问
- Hadoop YARN:作业调度和群集资源管理的框架
- Hadoop MapReduce:一个基于YARN的系统,用于大数据集的并行处理系统
(3)Hadoop其他相关程序
- HBase:可扩展的分布式数据库,支持大型表的结构化数据存储。
- Hive:提供数据汇总和即席查询的数据仓库基础架构
- Pig:用于并行计算的高级数据流语言和执行框架。
- Spark:一个快速和通用的Hadoop数据计算引擎。Spark提供了一个简单而富有表现力的编程模型,支持广泛的应用程序,包括ETL、机器学习、流处理和图形计算。
- ZooKeeper:面向分布式应用程序的高性能协调服务。
2. 分布式系统
**(1)定义:**分布式系统是一个模型,其中位于网络的计算机上的组件通过传递消息来通信和协调其动作。这些组件相互交互以实现一个共同的目标。
(2)特征:
- 大数据量
- 将它们存储在分布式系统上
(3)CAP 理论
Consistency:一致性意味着每个客户端总是拥有相同的数据视图。
Availability可用性意味着所有客户端始终可以读写。
Partition tolerance分区容错性意味着系统可以很好地跨物理网络分区工作。
三者之间只可以实现两者
Google File System(GFS)
GFS 假设
- 硬件故障很常见(商用硬件)
- 文件很大(GB / TB)并且数量有限(数百万,而不是数十亿)
- 两种主要读取类型:大型流读取和小型随机读取
- 具有将数据追加到文件的顺序写入的工作负载
- 写入后,很少再修改文件(!= append)
- 可以随机修改文件,但在GFS中效率不高
GFS不适用于:
- 低延迟的数据访问(以毫秒为单位)
- 许多小文件
- 不断变化的数据
GFS的文件
•单个文件可以包含许多对象
•文件被分为固定大小的块(64MB)–在Hadoop中为128MB
•块服务器将块作为“普通”文件存储在本地磁盘上
•文件在所有块服务器上被复制(默认3次)
•主维护所有文件系统元数据
•要读取/写入数据:客户端与主设备通信(元数据)
HDFS
•受GFS的启发
•用Java编写的可扩展,分布式,可移植文件系统,用于Hadoop框架
•Hadoop应用程序使用的主分布式存储
•HFDS可以是Hadoop集群的一部分,也可以是独立的通用分布式文件系统
• 通过跨多个主机复制数据来确保可靠性和容错能力
一些需要记住的事实
•设计用于在低成本商品硬件上运行的分布式文件系统
•设计用于批处理而不是供用户交互式使用
•文件一次写入多次读取访问模型
•在HDFS上运行的应用程序需要对其数据集进行流访问
•支持 巨大的数据量,数据分为64MB(默认)块,行业惯例为128MB
•高度容错,每个块被复制3次
Apache Spark
•Apache Spark是用于大型数据处理的快速通用集群计算系统
•适用于批处理和实时处理
•Java,Scala,Python和R中的高级API
•Spark SQL–Allows to query structured data
•Spark Streaming –Intended for real-time processing.
•MLlib–Suitable for machine learning tasks
•GraphX–Graph processing56
Spark vs. Hadoop MapReduce
•性能:正常情况下Spark的速度更快,但有一些警告,Spark可以在内存中处理数据; Hadoop MapReduce在执行映射或减少操作后仍会保留回到磁盘上
-Spark通常优于MapReduce,但要做好工作,它通常需要大量内存。 如果还有其他资源需求服务 或无法容纳在内存中,Spark会降级
-MapReduce可以轻松与其他服务一起运行,但性能差异不大,并且可以与原本设计用于1遍作业一起使用
•易于使用:Spark是 易于编程
•数据处理:Spark更通用
•成熟度:Spark成熟,Hadoop MapReduce成熟
Spark抽象概念
RDD:弹性分布式数据集–分布式数据的管理和处理
DAG:直接无环图通过构造由节点和边组成的图来构造执行流
SparkContext –管理Spark集群内的编排
Transformations-“创建新的RDD”,例如,通过过滤数据
Actions—返回RDD以外的内容的操作
Resilient Distributed Dataset (RDD)是Spark的关键架构
•RDD表示数据或数据上的转换
•RDD可以从Hadoop InputFormats(例如HDFS文件),“ parallelize()”数据集创建,也可以通过转换其他RDD(可以堆叠RDD)来创建。
•可以将操作应用于RDD; 操作强制计算并返回值
•Lazy 计算:无需执行任何操作即可计算
•RDD最适合对数据集的所有元素应用相同操作的应用程序-不太适合对共享状态进行异步细粒度更新的应用程序
Column Stores
Relational Database to Scale可伸缩的关系型数据库
ACID准则:
- Atomicity原子性:交易全有或全无
- Consistency一致性:仅保存有效数据
- Isolation独立性:事务不会互相影响
- Durability耐用性:书面数据不会丢失
大规模系统的需求往往与RDBMS所设计的应用程序不同
–响应时间短且可预测–可伸缩性和弹性(低成本)
–高可用性
–灵活的模式/半结构化数据–地理分布(多个数据中心)–(通常)不需要事务,完整性,复杂的查询
新技术的需求
•BigTable:启动NoSQL行业的内部Google数据库
•动机:建立在搜索引擎后面的Web索引花费的时间太长•需要实时访问PB级数据
•2006年描述BigTable的研究论文-应用于HBase,Cassandra和其他NoSQL数据库 –荣获SIGOPS名人堂奖
•BigTablepowers Gmail,谷歌地图和其他服务•2015年,谷歌使BigTable作为服务可用
Approach: Column Stores
非关系数据库:noSql– [Wikipedia] NoSQL是用于指定在某些方面与经典关系数据库管理系统(RDBMS)不同的数据库管理系统的术语。 这些数据存储区可能不需要固定的表模式,通常避免联接操作,不尝试提供ACID属性,并且通常水平扩展
。
•行存储:–行连续存储–最佳用于逐行访问(例如SELECT *)
•列存储:–列连续存储–最佳用于属性访问(例如SUM,GROUP BY)
一些现在的系统
CA:RDBMS(MySQL,Postgres,Oracle)
Aster Data,Greenplum, Vertica
AP:Amazon,Dynamo,LinkedIn,Voldemort,Facebook,Cassandra, Simple DB, Couch。
CP: Google Big Table, HBase, Berkelery DB,Memcach DB, Mongo DB
Apache HBase
•“Hadoop数据库是一个分布式的、可扩展的大数据存储。”
•在HDFS上
•数十亿行*数百万列
•非关系型DB / NoSQL
•列存储:列而不是表
•键-值单元