Spark,一种款速数据分析替代方案之下篇

来源:互联网 发布:云南广电网络总经理 编辑:程序博客网 时间:2024/05/01 21:29

安装 Scala 和 Spark

第一步是下载和配置 Scala。清单 4 中显示的命令阐述了 Scala 安装的下载和准备工作。使用 Scala v2.8,因为这是经过证实的 Spark 所需的版本。

清单 4. 安装 Scala


要使 Scala 可视化,请将下列行添加至您的 .bashrc 中(如果您正使用 Bash 作为 shell):

接着可以对您的安装进行测试,如 清单 5 所示。这组命令会将更改加载至 bashrc 文件中,接着快速测试 Scala 解释器 shell。

清单 5. 配置和运行交互式 Scala

如清单中所示,现在应该看到一个 Scala 提示。您可以通过输入 :quit 执行退出。注意,Scala 要在 JVM 的上下文中执行操作,所以您会需要 JVM。我使用的是 Ubuntu,它在默认情况下会提供 OpenJDK。

接下来,请获取最新的 Spark 框架副本。为此,请使用 清单 6 中的脚本。

清单 6. 下载和安装 Spark 框架

接下来,使用下列行将 spark 配置设置在 Scala 的根目录 ./conf/spar-env.sh 中:

    exportSCALA_HOME=/opt/scala-2.8.1.final


设置的最后一步是使用简单的构建工具 (sbt) 更新您的分布。sbt 是一款针对 Scala 的构建工具,用于 Spark 分布中。您可以在 mesos-spark-c86af80 子目录中执行更新和变异步骤,如下所示:

    $ sbt/sbt updatecompile


注意,在执行此步骤时,需要连接至 Internet。当完成此操作后,请执行 Spark 快速检测,如 清单 7 所示。在该测试中,需要运行 SparkPi 示例,它会计算 pi 的估值(通过单位平方中的任意点采样)。所显示的格式需要样例程序 (spark.examples.SparkPi) 和主机参数,该参数定义了 Mesos 主机(在此例中,是您的本地主机,因为它是一个单节点集群)和要使用的线程数量。注意,在 清单 7 中,执行了两个任务,而且这两个任务被序列化(任务 0 开始和结束之后,任务 1 再开始)。

清单 7.  Spark 执行快速检测

通过增加线程数量,您不仅可以增加线程执行的并行化,还可以用更少的时间执行作业(如 清单 8 所示)。

清单 8. 对包含两个线程的 Spark 执行另一个快速检测


使用 Scala 构建一个简单的 Spark 应用程序

要构建 Spark 应用程序,您需要单一 Java 归档 (JAR) 文件形式的 Spark 及其依赖关系。使用 sbt 在 Spark 的顶级目录中创建该 JAR 文件,如下所示:

    $ sbt/sbt assembly

结果产生一个文件 ./core/target/scala_2.8.1/"Spark Core-assembly-0.3.jar"。将该文件添加至您的 CLASSPATH 中,以便可以访问它。在本示例中,不会用到此 JAR 文件,因为您将会使用 Scala 解释器运行它,而不是对其进行编译。


在本示例中,使用了标准的 MapReduce 转换(如 清单 9 所示)。该示例从执行必要的 Spark 类导入开始。接着,需要定义您的类 (SparkTest) 及其主方法,用它解析稍后使用的参数。这些参数定义了执行 Spark 的环境(在本例中,该环境是一个单节点集群)。接下来,要创建 SparkContext 对象,它会告知 Spark 如何对您的集群进行访问。该对象需要两个参数:Mesos 主机名称(已传入)以及您分配给作业的名称 (SparkTest)。解析命令行中的切片数量,它会告知 Spark 用于作业的线程数量。要设置的最后一项是指定用于 MapReduce 操作的文本文件。


最后,您将了解 Spark 示例的实质,它是由一组转换组成。使用您的文件时,可调用 flatMap 方法返回一个 RDD(通过指定的函数将文本行分解为标记)。然后通过 map 方法(该方法创建了键值对)传递此 RDD ,最终通过 ReduceByKey 方法合并键值对。合并操作是通过将键值对传递给 _ + _ 匿名函数来完成的。该函数只采用两个参数(密钥和值),并返回将两者合并所产生的结果(一个 String 和一个 Int)。接着以文本文件的形式发送该值(到输出目录)。

清单 9. Scala/Spark 中的 MapReduce (SparkTest.scala)


要执行您的脚本,只需要执行以下命令:

    $ scala SparkTest.scalalocal[1]


您可以在输出目录中找到 MapReduce 测试文件(如 output/part-00000)。


其他的大数据分析框架

自从开发了 Hadoop 后,市场上推出了许多值得关注的其他大数据分析平台。这些平台范围广阔,从简单的基于脚本的产品到与 Hadoop 类似的生产环境。


名为 bashreduce 的平台是这些平台中最简单的平台之一,顾名思义,它充许您在 Bash 环境中的多个机器上执行 MapReduce 类型的操作。bashreduce 依赖于您计划使用的机器集群的 Secure Shell(无密码),并以脚本的形式存在,通过它,您可以使用 UNIX®-style 工具(sort、awk、netcat 等)请求作业。


GraphLab 是另一个受人关注的 MapReduce 抽象实现,它侧重于机器学习算法的并行实现。在 GraphLab 中,Map 阶段会定义一些可单独(在独立主机上)执行的计算指令,而 Reduce 阶段会对结果进行合并。


最后,大数据场景的一个新成员是来自 Twitter 的 Storm(通过收购 BackType 获得)。Storm 被定义为 “实时处理的 Hadoop”,它主要侧重于流处理和持续计算(流处理可以得出计算的结果)。Storm 是用 Clojure 语言(Lisp 语言的一种方言)编写的,但它支持用任何语言(比如 Ruby 和 Python)编写的应用程序。Twitter 于 2011 年 9 月以开源形式发布 Storm。


结束语

Spark 是不断壮大的大数据分析解决方案家族中备受关注的新增成员。它不仅为分布数据集的处理提供一个有效框架,而且以高效的方式(通过简洁的 Scala 脚本)处理分布数据集。Spark 和 Scala 都处在积极发展阶段。不过,由于关键 Internet 属性中采用了它们,两者似乎都已从受人关注的开源软件过渡成为基础 Web 技术。


0 0
原创粉丝点击