Spark?英文是电火花、火星,可以做动词,发出火星···
停,干哈,英语知识讲座?你好,再见。
少侠留步,这不百度说的嘛,我再看看,找到了:
“Apache Spark 是专为大规模数据处理而设计的快速通用的计算引擎。Spark是UC Berkeley AMP lab (加州大学伯克利分校的AMP实验室)所开源的类Hadoop MapReduce的通用并行框架~”
···
··
说人话?!
咳咳,编不下去了。
Spark 是为超大量数据提供分析和处理能力的框架,具体采用什么方法进行分析和表征结果,由函数及处理机制决定。现代数据分析与统计方法中,各种用作大容量数据分析的函数已经很完备,将函数程序化后植入到Spark引擎中完成预期的计算。既然是为大数据而生的框架,避免不了以下问题:
第一,有超大量数据,从容量上讲至少PB级别吧。
第二,计算过程很复杂。从而导致单机无法容纳过载数据,或进行复杂计算时效率低下。
第三,大量数据的存储、读写都是非常耗时的,且分散之后要严格保证数据的完整性和有效性。比如某个存储节点宕机,数据丢失,或者由于网络延迟,数据没有及时同步更新等,就会造成计算结果的偏离。针对上述问题,Spark有相应的解决方法。在实际应用中,采用Hadoop的分布式文件存储方式,Spark不过分关注于数据的存储,通过提供更高级的API使开发者能更集中于计算本身。
一 简单的理解一些概念
说到这里,有点迷糊了。
啥叫函数,还程序化,交给Spark咋执行?
计算机的语言是基于数据模型演变而来,比如常见的变量,方法(C叫函数),数据库序列等,在数学里面我们有令a=b,c=1,y=Ax+C,(1,3,5,7)等差数列来与之对应。程序化就是将这些数学符号和公式转化成可在计算机执行的代码,通过控制输入参数来得到结果。当然,不是所有函数都可以精确地转换成与之对应的计算机语言,比如数学常见的开方,计算机运算过程就是无限趋近,其实这也是数学中的思想。
这里暂可简单的理解为,Spark就是一个黑匣子,他是一堆程序的集合,数据从哪里来,他不管,他只知道怎么去运算这些数据,运算的过程就由函数来决定,然后得到一个结果输出。
二 Hadoop与Spark
关于大数据处理方面的框架,现在比较流行的是Hadoop和Spark。Hadoop目前生态系统比较完善和成熟,使用也趋于稳定,是很多企业和个人优先选用的大数据技术框架。Hadoop生态系统庞大,组件繁多,想要系统学习的难度也比较大。既然Hadoop辣么好,那么我们学习一下Spark吧! Spark框架很突出的优点是简洁且高效,在MapReduce需要几百行代码实现的程序,在Spark往往只需要几行。Spark兼容性很好,能支持大多数语言,更关键的是Spark在处理数据时,存储在内存之中,而不是像Hadoop一样存储在文件系统的节点上,所以速度效率很高。在机器学习和数据挖掘的函数分类、回归上有不错的表现。在企业应用方面,使用Hadoop较多;其次是Hadoop配合Spark,HFDS的分布式文件系统与Spark的数据处理,两者能够很好的协调起来。
三 对开源项目的体会
安装部署过一些比较热门的开源项目如OpenStack、Docker,并基于源码进行过简单的二次开发。通过学习这些开源项目,可以提高自己的动手能力,增加知识积累。
OpenStack是云平台的操作系统,为基础设施虚拟化提供统一分配和管理,包括计算、存储和网络资源。OpenStack发展至今已有6、7年,每年会推出两个版本,技术已趋于成熟但未完善。
Docker 是一个开源的应用容器引擎,原意就是集装箱的意思,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。大大提高了软件开发的效率,使开发者不用把大量时间花费在环境部署上。Docker也可以做成集群管理,各个容器之间可以相互隔离和通讯。如果说OpenStack是虚拟机的管理者,那么Kubernetes就是容器的管理者。另外,现在OpenStack各组件也通过Docker进行部署和管理了。这里不再具体阐述,有兴趣可以自行了解。
闲扯这么多,回归主题,开始进入到我们的Spark环境搭建吧!
四 Spark最新版本环境部署 windows
1,JDK的安装
JDK安装比较简单,主要是环境变量的配置,不做赘述。最新版Spark采用JDK8,安装完成后DOS窗口输入,java -version查看版本
2,Scala 的安装
Spark采用Scala语言编写,需要安装对应的SDK。也可以使用maven编译,不过配置较繁琐。注意,Spark版本要与scala版本相符合,这里我们使用,2.11版本的scala。
Scala官网下载:http://www.scala-lang.org/download/all.html
也可以去这个地址:http://distfiles.macports.org/scala2.11/
我们下载这个版本
直接解压,将bin目录复制到path路径下
在DOS窗口输入:scala 如下图所示
注意,配置环境变量时,注意path的路径和符号的正确性,否则系统检测不到对应路径。如果直接打开DOS窗口无法正常显示,进入对应的\bin下,按住Shift并鼠标右键,点击 在此处打开命令窗口,检测是否为配置问题。
3 Spark的安装
我们此处使用的Spark依赖于Hadoop的环境,所以下载hadoop版本的Spark。
官网:http://spark.apache.org/downloads.html
我们选择最新版本的Spark,其对应版本的Hadoop是2.7。
直接解压后,将对应bin路径复制到path下。如同上述安装scala。在DOS窗口输入:spark-shell可能会报错,这是因为我们安装Spark依赖于hadoop,Spark启动会默认加载依赖Hadoop的jar。所以我们还需要安装Hadoop。
4 Hadoop的安装
进入Hadoop下载页面: https://archive.apache.org/dist/hadoop/common/hadoop-2.7.0/
我们下载2.7.0版本的Hadoop,直接解压后如同上述Scala,Spark的安装,将bin路径复制到path下。或者,新建HADOOP_HOME变量,然后将HADOOP_HOME加入到path下。完成后DOS窗口输入:hadoop
新开启DOS窗口输入:spark-shell
启动过程不报错,显示如上表示Spark已成功部署。
另外,可能某些Hadoop中缺少winutils.exe 文件导致启动失败,网上解决办法是下载一个对应版本的winutils.exe文件放入Hadoop 的bin目录下,重启Spark。
至此,我们已经成功部署了一个Spark环境,接来下来将介绍Spark一些典型的应用场景。Scala使用IDEA编辑,我们将源码导入到IDEA工程中,搭建Spark的开发环境,通过简单的案例,逐步深入了解Spark架构和内部实现机制。