Spark简介及其在ubuntu下的安装使用

转:http://blog.csdn.net/pelick/article/details/9888311javascript

Spark概述html

Spark 是一种与 Hadoop 类似的开源集群计算环境,在性能和迭代计算上颇有看点,如今是Apache孵化的顶级项目吧。Spark 由加州大学伯克利分校 AMP 实验室 (Algorithms, Machines, and People Lab) 开发,可用来构建大型的、低延迟的数据分析应用程序。Spark 启用了内存分布数据集,除了可以提供交互式查询外,它还能够优化迭代工做负载。Spark 是在 Scala 语言中实现的,它将 Scala 用做其应用程序框架,而Scala的语言特色也铸就了大部分Spark的成功。与 Hadoop 不一样,Spark 和 Scala 可以紧密集成,其中的 Scala 能够像操做本地集合对象同样轻松地操做分布式数据集。尽管建立 Spark 是为了支持分布式数据集上的迭代做业,可是实际上它是对 Hadoop 的补充,能够在 Hadoop文件系统中并行运行。经过名为 Mesos 的第三方集群框架能够支持此行为。java

虽然 Spark 与 Hadoop 有类似之处,但它提供了具备有用差别的一个新的集群计算框架。首先,Spark 是为集群计算中的特定类型的工做负载而设计,即那些在并行操做之间重用工做数据集(好比机器学习算法)的工做负载。为了优化这些类型的工做负载,Spark 引进了内存集群计算的概念,可在内存集群计算中将数据集缓存在内存中,以缩短访问延迟。python

Spark 还引进了名为 弹性分布式数据集 (RDD) 的抽象。RDD 是分布在一组节点中的只读对象集合。这些集合是弹性的,若是数据集一部分丢失,则能够对它们进行重建。重建部分数据集的过程依赖于容错机制,该机制能够维护 “血统”(即充许基于数据衍生过程重建部分数据集的信息)。RDD 被表示为一个 Scala 对象,而且能够从文件中建立它;一个并行化的切片(遍及于节点之间);另外一个 RDD 的转换形式;而且最终会完全改变现有 RDD 的持久性,好比请求缓存在内存中。git

Spark 中的应用程序称为驱动程序,这些驱动程序可实如今单一节点上执行的操做或在一组节点上并行执行的操做。与 Hadoop 相似,Spark 支持单节点集群或多节点集群。对于多节点操做,Spark 依赖于 Mesos 集群管理器。Mesos 为分布式应用程序的资源共享和隔离提供了一个有效平台。该设置充许 Spark 与 Hadoop 共存于节点的一个共享池中。github

 

Spark生态环境算法

是的,相似hadoop有HDFS,Hive,Pig等一套本身的生态环境,Spark也有一套生态环境,而这套蓝图应该也正是AMP实验室正在绘制的。mongodb

Spark在整个生态系统中的地位如图所示,他是基于Tachyon的。而对底层的Mesos相似与YARN调度框架,在其上也是能够搭载如Spark,Hadoop等环境。Shark相似Hadoop里的Hive,而其性能好撑比Hive要快成百上千倍,不过hadoop注重的不必定是最快的速度,而是廉价集群上离线批量的计算能力。此外,上图中还有图数据库,Spark Streaming以及machine learning的ML Base。也就是说,Spark这套生态环境把大数据这块领域的数据流计算和交互式计算都包含了,而另一块批处理计算应该由hadoop占据,同时Spark又是能够同HDFS交互取得里面的数据文件的。还有一天,Spark的迭代,内存运算能力以及交互式计算,都为数据挖掘,机器学习提供了很必要的辅助。综上所述,Spark不容小觑,也正是笔者打算研究他的缘由。shell

国内目前豆瓣有一位牛人,读了Spark源码后用python写了一个Dpark在豆瓣内部使用。性能方面应该不及Spark,由于Scala是模吸取了Erlang这样的天生分布式语言的一些优点,既面向对象又是函数式的,目前我也在熟悉之中。数据库

Spark的开发者中有一位是中国的博士,这是他的微博

 

Spark安装使用

我在win7下尝试了下,根本不能开启spark的shell或者run一下example,最终仍是在ubuntu上实现了。在Spark的github上你能够获得源码,可是在ubuntu上使用的时候,我是从网上下载了个 spark-0.7.2-prebuilt-hadoop1.tar的包,解压以后,在$SPARK_HOME下执行

 

[javascript]  view plain copy
 
  1. ./spark-shell  

就能够开启交互式spark命令环境,这是一个基于scala的环境,有点相似mongodb的cmd环境是V8引擎下的js环境,应该是spark自带的而不须要外部引用SCALA_HOME。

 

而后你就能够根据官方document里的quick-start进行一些文件读取操做,并对内容进行处理,作mapreduce呀之类的事情。同时,也是能够去读hdfs上的file的

 

[html]  view plain copy
 
  1. scala> val textFile = sc.textFile("README.md")  
[html]  view plain copy
 
  1. scala> textFile.count() // Number of items in this RDD  
  2. scala> textFile.first() // First item in this RDD  

例子不举了。若是要跑例子,须要先下载并引用scala,而后用sbt构建下spark。sbt是scala的构建工具,至关因而java的maven。

 

下好的scala解压以后,是能够在SCALA_HOME/bin下执行scala进入scala命令环境的。完成构建以后(我下载的spark解压以后不须要sbt构建也能够直接run这些例子。),就能够跑例子了。

 

[html]  view plain copy
 
  1. sbt/sbt package  

 

构建以后。还须要先在$SPARK_HOME/conf/ 下修改那个spark-env.sh,在文件内添加一行"SCALA_HOME=xxx"。

 

[html]  view plain copy
 
  1. ./run spark.examples.SparkPi local  

在跑这个例子的时候,可能输出结果会有一个NULL什么的错误,缘由在于run这个文件里写的匹配example的路径是xxx-example-xxx.jar,而在SPARK_HOME/example/target/scalaxxxx路径下的jar包是xxx-example_xxx.jar的格式,问题出在"-"和"_"上。我手动改了下jar包的名字,你也能够在run的144-146行里把那个匹配规则改一下,很简单的。

 

作了以上的过后,就能够慢慢试玩和探索Spark啦。固然这是本地一个standalone的部署,还能够加master和slave的集群部署。略了。

SparkPi这个例子的代码就不具体说了,下面我提供一些有帮助的文档连接,有助于spark的起步。就我今天网上google的结果看,好像也没有什么别的文档也能够参考了。基本上也就是我列举的这些,因此你看完这些应该就能够啦。

 

参考

同一个博客里的几篇:

Spark安装与学习

centOS上安装spark集群

淘宝博客里的几篇:

Spark随谈-翻译指南

Spark随谈-总体架构

Spark随谈-安装攻略

官网文档:

quick-start

programming-guide

IBM的一篇介绍

相关文章
相关标签/搜索