虽然Hadoop在分布式数据分析方面备受关注,但是仍有一些开源软件提供了优于Hadoop平台的的优势,比如在实时计算、交互式和流式计算场景下MapReduce并不适合。这时恰恰Spark技术为了解决这样的问题应运而生,其是一种新生的可扩展的数据分析平台,它基于内存计算技术,所以相对于Hadoop,它在性能方面更具优势。Spark启用了内存分布数据集,除了能够提供交互式查询外,它还可以优化迭代工作负载。
接下来本文将主要介绍一些Spark内存分布式计算框架的具体实现和安装部署过程等内容~
一、Spark历史及简要
1.Spark由加州大学伯克利分校开发的用来构建大型的、低延迟的数据分析应用程序。
2.Spark是在Scala 语言中实现的,它将 Scala 用作其应用程序框架。Spark和Scala紧密集成,其中Scala可以像操作本地集合对象一样轻松地操作分布式数据集。
3.Spark支持分布式数据集上的迭代作业,它是对 Hadoop 的补充,可以在 Hadoo 文件系统中并行运行。通过名为 Mesos 的第三方集群框架可以支持此行为。
4.Spark中的应用程序称为驱动程序,这些驱动程序可实现在单一节点上执行的操作或在一组节点上并行执行的操作。与 Hadoop 类似,Spark 支持单节点集群或多节点集群。对于多节点操作,Spark 依赖于 Mesos 集群管理器。
二、Spark 集群计算架构介绍
虽然Spark与Hadoop有相似之处,但它提供了具有有用差异的一个新的集群计算框架。首先,Spark是为集群计算中的特定类型的工作负载而设计,即那些在并行操作之间重用工作数据集(比如机器学习算法)的工作负载。为了优化这些类型的工作负载,Spark 引进了内存集群计算的概念,可在内存集群计算中将数据集缓存在内存中,以缩短访问延迟。
Spark 还引进了名为弹性分布式数据集 (RDD) 的抽象。RDD 是分布在一组节点中的只读对象集合。这些集合是弹性的,如果数据集一部分丢失,则可以对它们进行重建。重建部分数据集的过程依赖于容错机制,该机制可以维护 “血统”(即充许基于数据衍生过程重建部分数据集的信息)。RDD 被表示为一个 Scala 对象,并且可以从文件中创建它;一个并行化的切片(遍布于节点之间);另一个 RDD 的转换形式;并且最终会彻底改变现有 RDD 的持久性,比如请求缓存在内存中。
三、Spark 编程模式介绍
驱动程序可以在数据集上执行两种类型的操作:动作和转换。动作 会在数据集上执行一个计算,并向驱动程序返回一个值;而转换 会从现有数据集中创建一个新的数据集。动作的示例包括执行一个 Reduce 操作(使用函数)以及在数据集上进行迭代,转换示例包括 Map 操作和 Cache 操作。
四、安装 Scala 和 Spark
第一步、下载和配置 Scala
#Scala安装的下载和准备工作
$ wget />
第二步、安装Scala
$ sudo tar xvfz scala-2.8.1.final.tgz --directory /opt/
要使Scala可视化,请将下列行添加至您的 .bashrc 中(如果您正使用 Bash 作为 shell):
export SCALA_HOME=/opt/scala-2.8.1.final
export PATH=$SCALA_HOME/bin:$PATH
第三步、安装进行测试,将更改加载至bashrc文件中,测试 Scala解释器shell
清单 5. 配置和运行交互式 Scala
$ scala
Welcome to Scala version 2.8.1.final (OpenJDK Client VM, Java 1.6.0_20).
Type in expressions to have them evaluated.
Type :help for more information.
scala> println("Scala is installed!")
Scala is installed!
scala> :quit
如清单中所示,现在应该看到一个Scala提示。您可以通过输入 :quit 执行退出。注意,Scala要在JVM的上下文中执行操作,所以您会需要JVM。
第四步、获取最新的 Spark 框架副本,下载和安装 Spark 框架
wget />
mesos-spark-0.3-scala-2.8-0-gc86af80.tar.gz
$ sudo tar xvfz mesos-spark-0.3-scala-2.8-0-gc86af80.tar.gz
第五步、使用下列行将 spark 配置设置在Scala的根目录 ./conf/spar-env.sh 中:
export SCALA_HOME=/opt/scala-2.8.1.final
第六步、使用简单的构建工具更新您的分布,sbt 是一款针对 Scala 的构建工具,用于 Spark 分布中。
$ sbt/sbt update compile
注意,在执行此步骤时,需要连接至 Internet。当完成此操作后,请执行Spark快速检测
第七步、Spark测试
$ ./run spark.examples.SparkPi local[1]
15/06/26 19:52:33 INFO spark.CacheTrackerActor: Registered actor on port 50501
15/06/26 19:52:33 INFO spark.MapOutputTrackerActor: Registered actor on port 50501
15/06/26 19:52:33 INFO spark.SparkContext: Starting job...
.......................................................................................................................
15/06/26 19:52:33 INFO spark.LocalScheduler: Finished task 1
15/06/26 19:52:33 INFO spark.LocalScheduler: Completed ResultTask(0, 1)
15/06/26 19:52:33 INFO spark.SparkContext: Job finished in 0.145892763 s
Pi is roughly 3.14952
通过增加线程数量,您不仅可以增加线程执行的并行化,还可以用更少的时间执行作业
清单 8. 对包含两个线程的 Spark 执行另一个快速检测
$ ./run spark.examples.SparkPi local[2]
15/06/26 20:04:30 INFO spark.MapOutputTrackerActor: Registered actor on port 50501
15/06/26 20:04:30 INFO spark.CacheTrackerActor: Registered actor on port 50501
15/06/26 20:04:30 INFO spark.SparkContext: Starting job...
...........................................................................................................................
15/06/26 20:04:30 INFO spark.LocalScheduler: Finished task 0
15/06/26 20:04:30 INFO spark.LocalScheduler: Finished task 1
15/06/26 20:04:30 INFO spark.LocalScheduler: Completed ResultTask(0, 1)
15/06/26 20:04:30 INFO spark.LocalScheduler: Completed ResultTask(0, 0)
15/06/26 20:04:30 INFO spark.SparkContext: Job finished in 0.101287331 s
Pi is roughly 3.14052
如果看到以上信息则证明Spark已被成功部署
阅读(5275) | 评论(0) | 转发(1) |