Spark的那些外部框架

Spark Package

  要使用Spark库,你首先必须了解的东西是Spark package。它有点像Spark的包管理器。当你给Spark集群提交job时,你可以到存放Spark package的网站下载任何package。所有package都存放在这个站点。
  http://spark-packages.org/
  当你想用一个Spark package时,可以在spark-submit命令或者spark- shell命令中增加包选项:

$ $Spark_HOME/bin/Spark-shell \
    -packages com.databricks:Spark-avro_2.10:2.0.1

  如果使用了--packages选项,Spark package就会自动把它的JAR包添加到你指定的路径下。你不仅能在Spark集群上使用社区的库,还能到公开发布自己的库。如果要把一个Spark package发布到这个托管服务下,必须遵守下列规则:

  • 源代码必须放在Github上。
  • 代码库的名字必须与包名相同。
  • 代码库的主分支必须有README.md文件,在根目录下必须有LICENSE文件。

换句话说,你不需要编译自己的package。即使你用Spark Packages的模板,编译、发布以及版本更新都将由这项服务完成。sbt插件sbt-spark-package(https://github.com/databricks/sbt-spark-packages)对于生成package也非常有用。如果要在你的项目中包含此插件,请务必在sbt项目的project/plugins.sbt文件中写入下面的代码:

resolvers += "bintray-Spark-packages" at "https://dl.bintray.com/
Spark-packages/maven/"
    addSbtPlugin("org.Spark-packages" % "sbt-Spark-packages" % "0.2.3")

  发布Spark包时必须提供如下信息,应该把它们写到build.sbt中:

  • spName——package的名称。
  • sparkVersion——package所依赖的Spark版本。
  • sparkComponents——package所依赖的Spark组件列表,例如SQL、MLlib。
  • spShortDescription——package的一句话描述。
  • spDescription——关于package的完整描述。
  • spHomePage——用于描述package的Web页面的URL。

上述6项是你在发布package之前需要提供的信息。一定要发布到package的代码库的主分支上。你可以使用Spark package的托管站点(https://spark-packages.org/)的Web UI来完成这项工作。
            
  在Spark package站点上注册了Github账号后,可以从“name”下拉菜单中选择你的代码库。
             
  上面的简短描述和主页最好与build.sbt中的描述和主页URL一致。一旦你提交了package,验证过程就开始了。这个过程通常需要几分钟。当验证完成后,你会收到一封邮件,告诉你验证是否成功。如果成功,就可以用前面描述的--package选项下载你的package了。截至2015年11月,Spark package站点上已经有153个package了。下一节将介绍一些库,它们也是支持Spark package形式的,即它们也以Spark package格式分发。

XGBoost

  XGBoost是一个专用于分布式框架的优化库。这个框架由DMLC(Distributed Machine Learning Community,分布式机器学习社区)开发。顾名思义,在DMLC项目下有许多机器学习库,它们在Hadoop和Spark等已有资源上具有高扩展性。XGBoost是基于Gradient Boosting(梯度提升)算法的。决策树提升算法(Tree Boosting)是一种用于分类的集成学习(ensemble learning)算法,它组合使用了决策树与提升算法,是一种轻量而快速的分类算法。关于树集成及树提升算法在此就不展开讲述了,它们都是简单高效的算法:https://xgboost.readthedocs.org/ en/latest/model.html。
  虽然当前XGBoost还不能与Spark集成,但是XGBoost的名气使得Spark社区开发了XGBoost的Spark package:http://Spark-packages.org/package/rotationsymmetry/Sparkxgboost/。
  尽管XGBoost核心开发组不支持这个package,你还是可以使用sparkxgboost包体验一下在Spark上的XGBoost的实现。

spark-jobserver

  提交job的流程需要改进,因为对于非工程师来说,这项工作有点难。你需要理解如何用命令行或者其他UNIX命令去提交Spark job。Spark项目现在是使用CLI来提交job的。spark-jobserver提供了一个RESTful API来管理提交到Spark集群的job。因此,这意味着可以在企业内部环境中将Spark作为一个服务启动。最简单的使用spark-observer的方法就是启动一个为之准备的Docker容器。如果你的笔记本上已经有了Docker环境,你需要做的就是输入下面的命令:

$ docker run -d -p 8090:8090\
    velvia/spark-jobserver:0.5.2-SNAPSHOT

  执行这条命令,spark-jobserver的Docker镜像将被下载,它会在Docker上启动spark-jobserver作为守护进程。可以通过8090端口查看这个服务器的状态。启动之后,可以看到下图所示的Web UI。
              
  虽然这个界面很简单,但它为管理job提供了足够的信息。job服务器的后台是带有一个本地executor的Spark集群,它有4个线程运行在这个Docker容器配置下。不过对于你的生产环境而言,这样的配置可能远远不够。现在,假设你的job已经通过REST API发送。在spark-jobserver项目目录下有一个著名的单词计数例子。下载这个例子的源码后,用sbt命令编译。如果你的笔记本上没有sbt,请参照http://www.scala-sbt.org/。

$ git clone \
    https://github.com/spark-jobserver/Spark-jobserver.git
$ cd spark-jobserver
$ sbt job-server-tests/package
# You can build test package as a jar format under
# job-server-tests/target/scala-2.10/job-server-
# tests2_2.10-0.6.1-SNAPSHOT.jar, though version number
# might be a little bit different

  运行一个job,其过程如下:
  (1)上传应用的JAR文件。
  (2)选择运行在spark-jobserver上的主类。
  提交job时不需要每次都编写Spark应用或者编译它,即使你想与其他人共享。spark-jobserver会对如下对象持久化:

  • job状态
  • job配置
  • JAR

因此,一旦你设置了这些信息,就不需要再次重新上传。重要的是,可以通过spark-jobserver与同事共享你的应用的代码。可以用curl命令进行上传:

$ curl --data-binary @job-server-test/target/scala-2.10/job-server-
tests_2.10.0.6.1-SNAPSHOT.jar \
    http://<Your Docker Host IP>:8090/jars/test
$ curl 'http://<Your Docker Host IP>:8090/jars'
    {
      "tests" : "2015-11-12T02:26:50.069-05:00"
    }

  如果收到上面信息,就可以上传你的JAR。现在,是时候用输入数据启动你的应用了。

$ curl -d "input.string = takeshi nobita dora suneo suneo nobita" '
http://<Your Docker Host IP>:8090/jobs?appName=test&classPath=spark.
jobserver.WordCountExample'
$ curl 'http://<Your Docker Host IP>:8090/jobs'
    {
     "duration": "0.448 secs",
     "classPath": "spark.jobserver.WordCountExample",
     "startTime": "2015-11-12T03:01:12.362-05:00",
     "context": "0a518c58-spark.jobserver.WordCountExample",
     "status": "FINISHED",
     "jobId": "aed9a387-5319-4d8e-ac3d-0f1ce9d4b1a1"
    }

  你的job应当成功地完成。得到的结果也能通过REST API下载。

$ curl http://<Your Docker Host IP>:8090/jobs/aed9a387-5319-4d8e-
ac3d-0f1ce9d4b1a1
    {
    "status": "OK",
    "result": {
    "takeshi": 1,
    "nobita": 2,
    "suneo": 2,
    "dora": 1
        }
    }

  这就是一个使用spark-jobserver的进程。虽然这个库仍然在开发中,但由于它是一个开源项目,因此可能很快就会被应用到实际场景。如果你打算在内部使用以处理日常数据,那么spark-jobserver是一个不错的选项。
  本文选自《Spark:大数据集群计算的生产实践》,点此链接可在博文视点官网查看此书。
                      
  想及时获得更多精彩文章,可在微信中搜索“博文视点”或者扫描下方二维码并关注。
                         

时间: 2024-12-02 08:01:18

Spark的那些外部框架的相关文章

Spark与深度学习框架——H2O、deeplearning4j、SparkNet

引言:你可能对使用Spark服务比较感兴趣.Spark已经提供了很多功能,也有一个好用的界面,而且背后有强大的社区,开发者十分活跃,这也是人们对Spark寄予厚望的原因.深度学习是当前正在进行中的Spark项目之一.本文我们将介绍一些Spark能用的深度学习框架. 本文选自<Spark:大数据集群计算的生产实践>. 深度学习因其高准确率及通用性,成为机器学习中最受关注的领域.这种算法在2011-2012年期间出现,并超过了很多竞争对手.最开始,深度学习在音频及图像识别方面取得了成功.此外,像机

Spark :工作组上的集群计算的框架

翻译:Esri 卢萌 本文翻译自加州伯克利大学AMP lab的Matei大神发表的关于Spark框架的第一篇论文,限于本人英文水平很烂,所以翻译中肯定有很多错误,请发现了错误的直接与我联系,感谢. (括号中,斜体字部分是我自己做的解释) 摘要: MapReduce以及其的各种变种,在商业集群上进行的对大规模密集型数据集的应用上已经取得了很大的成功.然而大多数这类系统都是围绕着一个非迭代型 的数据流模型,这种模型不适用于目前很多主流的应用程序.本文的研究侧重于介绍其中这样一类应用:重复使用跨多个并

强者联盟——Python语言结合Spark框架

引言:Spark由AMPLab实验室开发,其本质是基于内存的快速迭代框架,"迭代"是机器学习最大的特点,因此非常适合做机器学习.得益于在数据科学中强大的表现,Python语言的粉丝遍布天下,如今又遇上强大的分布式内存计算框架Spark,两个领域的强者走到一起,自然能碰出更加强大的火花(Spark可以翻译为火花),因此本文主要讲述了PySpark. 本文选自<全栈数据之门>. 全栈框架 Spark由AMPLab实验室开发,其本质是基于内存的快速迭代框架,"迭代&qu

Spark设计理念与基本架构

<深入理解Spark:核心思想与源码分析>一书前言的内容请看链接<深入理解SPARK:核心思想与源码分析>一书正式出版上市 <深入理解Spark:核心思想与源码分析>一书第一章的内容请看链接<第1章 环境准备> 本文主要展示本书的第2章内容: 第2章 设计理念与基本架构 "若夫乘天地之正,而御六气之辩,以游无穷者,彼且恶乎待哉?" --<庄子·逍遥游> 本章导读:       上一章,介绍了Spark环境的搭建,为方便读者学习

深入理解Spark:核心思想与源码分析

大数据技术丛书 深入理解Spark:核心思想与源码分析 耿嘉安 著 图书在版编目(CIP)数据 深入理解Spark:核心思想与源码分析/耿嘉安著. -北京:机械工业出版社,2015.12 (大数据技术丛书) ISBN 978-7-111-52234-8 I. 深- II.耿- III.数据处理软件 IV. TP274 中国版本图书馆CIP数据核字(2015)第280808号 深入理解Spark:核心思想与源码分析 出版发行:机械工业出版社(北京市西城区百万庄大街22号 邮政编码:100037)

《Spark大数据分析:核心概念、技术及实践》Spark Core

本节书摘来自华章出版社<Spark大数据分析:核心概念.技术及实践>一书中的第1章,第节,作者穆罕默德·古勒(Mohammed Guller)更多章节内容可以访问"华章计算机"公众号查看. Spark Core Spark是大数据领域最活跃的开源项目,甚至比Hadoop还要热门.如第1章所述,它被认为是Hadoop的继任者.Spark的使用率大幅增长.很多组织正在用Spark取代Hadoop. 从概念上看,Spark类似于Hadoop,它们都用于处理大数据.它们都能用商用硬

《循序渐进学Spark 》Spark 编程模型

本节书摘来自华章出版社<循序渐进学Spark >一书中的第1章,第3节,作者 小象学院 杨 磊,更多章节内容可以访问"华章计算机"公众号查看. Spark机制原理 本书前面几章分别介绍了Spark的生态系统.Spark运行模式及Spark的核心概念RDD和基本算子操作等重要基础知识.本章重点讲解Spark的主要机制原理,因为这是Spark程序得以高效执行的核心.本章先从Application.job.stage和task等层次阐述Spark的调度逻辑,并且介绍FIFO.FA

《深入理解Spark:核心思想与源码分析》——2.2节Spark基础知识

2.2 Spark基础知识 1.版本变迁 经过4年多的发展,Spark目前的版本是1.4.1.我们简单看看它的版本发展过程. 1)Spark诞生于UCBerkeley的AMP实验室(2009). 2)Spark正式对外开源(2010年). 3)Spark 0.6.0版本发布(2012-10-15),进行了大范围的性能改进,增加了一些新特性,并对Standalone部署模式进行了简化. 4)Spark 0.6.2版本发布(2013-02-07),解决了一些bug,并增强了系统的可用性. 5)Spa

Spark-基础-Spark及其生态圈简介

1.简介 1.1 Spark简介 Spark是加州大学伯克利分校AMP实验室(Algorithms, Machines, and People Lab)开发通用内存并行计算框架.Spark在2013年6月进入Apache成为孵化项目,8个月后成为Apache顶级项目,速度之快足见过人之处,Spark以其先进的设计理念,迅速成为社区的热门项目,围绕着Spark推出了Spark SQL.Spark Streaming.MLLib和GraphX等组件,也就是BDAS(伯克利数据分析栈),这些组件逐渐形