Hadoop的缺点
在Mapreduce中,跨作业数据分享的方式都要通过磁盘文件太慢了。也因此这个特性就很不适合流式计算,图计算等模式。spark的改进点就在与将迭代式的操作分解了一部分在内存上做。
在实际部署时,因为hadoop本身并没有提供文件管理系统,所以它必须和其他的分布式系统进行集成才能运作。通常spark默认来说是被用在hadoop上面的。
要求
使用spark需要搭配集群管理员和分布式存储系统。Spark支持独立模式、HadoopYarn或ApacheMesos的集群管理。在分布式存储方面,Spark更是可以和HDFS、Cassandra等接口搭载。
几个重要的概念
RDD
Spark核心,又称弹性分布式数据集,是一个可以并行操作、有容错机抽象则制的数据集合。RDD可以通过引用外部存储系统的数据集创建,也可以通过现有RDD的转换而创建。
弹性——指的是内存不够时可以与磁盘进行交换
一个例子
// 一个统计存储在HDFS中的Log文件,计算出现error的行数
lines = spark.textFile("hdfs://...")
errors = lines.filter(lambda s: s.startwith("Error")
messages = errors.map(lamda s: s.split('\t')[2])
messages.cache()
messages.filter(lambda s:"foo" in s).count()
messages.filter(lambda s:"bar" in s).count()
实际操作运行图
特别说明的几个点:
- spark还是hadoop,其实本质都是数据并行操作
- 在分布式情况下,主要考虑的几个点,需要考虑的点是降低网络传输开销,磁盘传输开销
- RDD的转化操作都是惰性求值的,这就也意味着在被调用之前,Spark不会开始计算
spark sql
提供结构化和半结构化数据相关的支持。它还支持使用命令行界
面和ODBC/JDBC服务器操作SQL语言。
spark streaming
spark streamin充分利用spark核心的快速调度能力来进行流分析。它截取小批量的数据并对之运行RDD转换。这种设计使流分析可在同一组为批量分析编写而撰写的应用程序代码。
mlib
mlib是spark上分布式机器学习框架。其中主要包括了以下算法:
扫描二维码关注公众号,回复:
3420166 查看本文章
- 汇总统计、相关性、分层抽样、假设检定、随机数据生成
- 分类与回归:支持向量机、回归、线性回归、逻辑回归、决策树、朴素贝叶斯
- 协同过滤:ALS
- 分群:k-平均算法
- 维度约减:奇异值分解、主成分分析
- 特征提取和转换
- 最优化:随机梯度下降
GraphX
GraphX是Spark上的分布式图形处理框架。它提供了一组API,可用与表达图表计算并可以模拟Pregel抽象化。GraphX还对这种抽象进行了优化