什么是Spark
Apache Spark是一个围绕速度、易用性和复杂分析构建的大数据处理框架。最初在2009年由加州大学伯克利分校的AMPLab开发,并于2010年成为Apache的开源项目之一。
Spark 系统组成
除了Spark核心API之外,Spark生态系统中还包括其他附加库,可以在大数据分析和机器学习领域提供更多的能力。
这些库包括:
- Spark Streaming:
- Spark Streaming基于微批量方式的计算和处理,可以用于处理实时的流数据。它使用DStream,简单来说就是一个弹性分布式数据集(RDD)系列,处理实时数据。
- Spark SQL:
- Spark SQL可以通过JDBC API将Spark数据集暴露出去,而且还可以用传统的BI和可视化工具在Spark数据上执行类似SQL的查询。用户还可以用Spark SQL对不同格式的数据(如JSON,Parquet以及数据库等)执行ETL,将其转化,然后暴露给特定的查询。
- Spark MLlib:
- MLlib是一个可扩展的Spark机器学习库,由通用的学习算法和工具组成,包括二元分类、线性回归、聚类、协同过滤、梯度下降以及底层优化原语。
- Spark GraphX:
- GraphX是用于图计算和并行图计算的新的(alpha)Spark API。通过引入弹性分布式属性图(Resilient Distributed Property Graph),一种顶点和边都带有属性的有向多重图,扩展了Spark RDD。为了支持图计算,GraphX暴露了一个基础操作符集合(如subgraph,joinVertices和aggregateMessages)和一个经过优化的Pregel API变体。此外,GraphX还包括一个持续增长的用于简化图分析任务的图算法和构建器集合。
Spark有哪些优势
与Hadoop和Storm等其他大数据和MapReduce技术相比,Spark有如下优势:
1、Spark为我们提供了一个全面、统一的框架用于管理各种有着不同性质(文本数据、图表数据等)的数据集和数据源(批量数据或实时的流数据)的大数据处理的需求。
2、Spark可以将Hadoop集群中的应用在内存中的运行速度提升100倍,甚至能够将应用在磁盘上的运行速度提升10倍。
3、可以快速的用Java、Scala或Python编写Spark程序。
4、除了Map和Reduce操作之外,它还支持SQL查询,流数据,机器学习和图表数据处理。
Spark应用举例
// 创建StreamingContext,1秒一个批次 val ssc = new StreamingContext(sparkConf, Seconds(1)); // 获得一个DStream负责连接 监听端口:地址 val lines = ssc.socketTextStream(serverIP, serverPort); // 对每一行数据执行Split操作 val words = lines.flatMap(_.split(" ")); // 统计word的数量 val pairs = words.map(word => (word, 1)); val wordCounts = pairs.reduceByKey(_ + _); // 输出结果 wordCounts.print(); ssc.start(); // 开始 ssc.awaitTermination(); // 计算完毕退出
// 创建Spark SQLContext val sqlContext = new org.apache.spark.sql.SQLContext(sc) // 创建一个DataFrame val dataFrame = sqlContext.read.json("/user/razor/event_conversion.log") // 展示dataFrame中的内容 dataFrame.show() // 树形结构展示dataFrame中存在的字段和数据类型 dataFrame.printSchema() // 从dataFrame中查询event_identifier列 dataFrame.select("event_identifier").show()
Spark MLlb/ Graphx的应用和Spark streaming/ Spark SQL在生产环境大数据系统的应用请关注后续介绍