Spark简介及彻底分布式安装

Spark简介及彻底分布式安装

1、Spark介绍

    官方介绍: linux

    Apache Spark™ is a fast and general engine for large-scale data processing.web

Spark Introduce算法

    Run programs up to 100x faster than Hadoop MapReduce in memory, or 10x faster on disk.sql

    Apache Spark has an advanced DAG execution engine that supports acyclic data flow and in-memory computing.shell

    Write applications quickly in Java, Scala, Python, R.apache

    Spark offers over 80 high-level operators that make it easy to build parallel apps. And you can use it interactively from the Scala, Python and R shells.vim

    Combine SQL, streaming, and complex analytics.浏览器

    Spark powers a stack of libraries including SQL and DataFramesMLlib for machine learning, GraphX, and Spark Streaming. You can combine these libraries seamlessly in the same application.缓存

    Spark是UC Berkeley AMP lab (加州大学伯克利分校的AMP实验室)所开源的,后贡献给Apache。是一种快速、通用、可扩展的大数据分析引擎。它是不断壮大的大数据分析解决方案家族中备受关注的明星成员,为分布式数据集的处理提供了一个有效框架,并以高效的方式处理分布式数据集。Spark集批处理、实时流处理、交互式查询、机器学习与图计算于一体,避免了多种运算场景下须要部署不一样集群带来的资源浪费。目前,Spark社区也成为大数据领域和Apache软件基金会最活跃的项目之一,其活跃度甚至远超曾经只能望其项背的Hadoop。安全

一、Spark VS MapReduce

1.MapReduce存在的问题

    一个Hadoop job一般都是这样的:

    1)从HDFS读取输入数据;

    2)在Map阶段使用用户定义的mapper function,而后把结果Spill到磁盘;

    3)在Reduce阶段,从各个处于Map阶段的机器中读取Map计算的中间结果,使用用户定义的reduce function,一般最后把结果写回HDFS。

2.磁盘I/O

    Hadoop的问题在于,一个Hadoop job会进行屡次磁盘读写,好比写入机器本地磁盘,或是写入分布式文件系统中(这个过程包含磁盘的读写以及网络传输)。考虑到磁盘读取比内存读取慢了几个数量级,因此像Hadoop这样高度依赖磁盘读写的架构就必定会有性能瓶颈。

3.屡次MapReduce

    此外,在实际应用中咱们一般须要设计复杂算法处理海量数据,并且不是一个Hadoop job能够完成的。好比机器学习领域,须要大量使用迭代的方法训练机器学习模型。而像Hadoop的基本模型就只包括了一个Map和 一个Reduce阶段,想要完成复杂运算就须要切分出无数单独的Hadoop jobs,并且每一个Hadoop job都是磁盘读写大户,这就让Hadoop显得力不从心。

    随着业界对大数据使用愈来愈深刻,你们都呼唤一个更强大的处理框架,可以真正解决更多复杂的大数据问题。

三、Spark的优点

    2009年,美国加州大学伯克利分校的AMPLab设计并开发了名叫Spark的大数据处理框架。真如其名,Spark像燎原之火,迅猛占领大数据处理框架市场。

1.全程使用内存

    Spark没有像Hadoop同样使用磁盘读写,而转用性能高得多的内存存储输入数据、处理中间结果、和存储最终结果。在大数据的场景中,不少计算都有循环往复的特色,像Spark这样容许在内存中缓存输入输出,上一个job的结果立刻能够被下一个使用,性能天然要比Hadoop MapReduce好得多。

2.操做数据灵活

    一样重要的是,Spark提供了更多灵活可用的数据操做,好比filter、join以及各类对key value pair的方便操做,甚至提供了一个通用接口,让用户根据须要开发定制的数据操做。

3.一站式服务框架

    此外,Spark自己做为平台也开发了streaming处理框架spark streaming、SQL处理框架Dataframe、机器学习库MLlib和图处理库GraphX。如此强大,如此开放,基于Spark的操做,应有尽有。

四、总结

    Hadoop的MapReduce为何不使用内存存储?

    是历史缘由。当初MapReduce选择磁盘,除了要保证数据存储安全之外,更重要的是当时企业级数据中心购买大容量内存的成本很是高,选择基于内存的架构并不现实;如今Spark真的遇上了好时候,企业能够轻松部署多台大内存机器,内存大到能够装载全部要处理的数据。

2、Spark安装

软件版本:

jdk-8u65-linux-x64.tar.gz

spark-2.0.1-bin-hadoop2.7.tgz

一、Spark单机模式安装

1.JDK

    安装和配置好JDK。

2.下载安装

    上传和解压Spark安装包。

3.配置Spark

    进入Spark安装目录下的conf目录,复制conf spark-env.sh.template文件为spark-env.sh,而后编辑此文件,命令以下:

cp conf spark-env.sh.template spark-env.sh
vim spark-env.sh

   增长以下内容:

 SPARK_LOCAL_IP=spark01

    如上图:整个模版文件都是注销的语句,因此这条语句能够添加到任何位置。

    “=”后面填写的时服务器地址,这里使用了主机名的形式,固然须要在/etc/hosts文件中增长映射关系。

    保存退出,那么单机模式的Spark就配置好了。

4.启动

    在Spark的bin目录下执行以下命令:

sh spark-shell --master=local

    或者

./spark-shell

    启动后,以下图,证实启动成功:

    发现打印消息,有以下字样:

    Spark context Web UI available at http://192.168.75.150:4040

    后面的http地址是Spark的Web管理界面的访问地址,web界面以下:

 

Spark context available as 'sc' (master = local, app id = local-1490336686508).

    上述语句说明了Spark提供了环境对象sc。

Spark session available as 'spark'.

    Spark提供了会话独享spark。

二、Spark集群模式安装

    准备三台服务器,分别命名为spark0一、spark0二、spark03,三台的配置信息基本相同,这里以spark01为例。将三台服务器之间的免密登陆提早作好。

1.JDK

    安装jdk,配置环境变量。

2.下载安装

    上传解压spark安装包。

3.配置Spark

    进入spark安装目录的conf目录,进行相关文件的配置。

1>spark-env.sh

    进入Spark安装目录下的conf目录,复制conf spark-env.sh.template文件为spark-env.sh,而后编辑此文件,命令以下:

cp conf spark-env.sh.template spark-env.sh
vim spark-env.sh

    此文件为启动文件,主要配置本机ip、数据存放目录、以及jdk的环境变量。

配置示例:

#本机ip地址
SPARK_LOCAL_IP=spark01
#spark的shuffle中间过程会产生一些临时文件,此项指定的是其存放目录,不配置默认是在 /tmp目录下
SPARK_LOCAL_DIRS=/home/software/spark-2.0.1-bin-hadoop2.7/tmp
export JAVA_HOME=/home/software/jdk1.8

2>slaves

在conf目录下,编辑slaves文件,主要配置的集群中执行任务的服务器ip。

配置示例:

spark01
spark02
spark03

4.拷贝修改

    配置完后,将spark目录远程拷贝至其余服务器,并更改spark-env.sh的SPARK_LOCAL_IP配置。

    拷贝命令以下:

scp -r spark-2.0.1-bin-hadoop2.7 root@spark02:/home/software/spark-2.0.1-bin-hadoop2.7
scp -r spark-2.0.1-bin-hadoop2.7 root@spark03:/home/software/spark-2.0.1-bin-hadoop2.7

    分别编辑spark0二、spark03上的spark-env.sh文件中SPARK_LOCAL_IP的值,改为对应节点的主机名或者ip。

5.启动集群

1>启动

    想使那台服务器成为master就进入到那台服务的spark安装目录的bin目录执行以下命令,此命令会启动整个集群的服务,不须要单独启动每一个服务器的服务:

sh start-all.sh

2>检查启动状况

    经过jps查看各机器进程,若是启动成功,每台机器会有以下的进程:

01:Master +Worker

02:Worker

03:Worker

6.使用集群

1>web管理

    经过浏览器访问管理界面:http://192.168.75.11:8080

 

2>shell

    经过spark shell链接spark集群,进入spark的bin目录执行以下命令便可进入使用:

sh spark-shell.sh --master spark://192.168.75.11:7077

3>在集群中读取文件

读取本地

sc.textFile("/root/work/words.txt")

    默认读取本机数据,这种方式须要在集群的每台机器上的对应位置上都一份该文件,浪费磁盘。

读取HDFS

    因此应该经过hdfs存储数据,读取方式以下:

sc.textFile("hdfs://hadoop01:9000/mydata/words.txt")

    也能够在spark-env.sh中配置选项HADOOP_CONF_DIR,配置为hadoop的etc/hadoop的地址,使默认访问的是hdfs的路径。若是修改默认地址是hdfs地址,则若是想要访问文件系统中的文件,须要指明协议为file,读取方式以下:

sc.text("file:///xxx/xx")

下一篇:Spark On Yarn彻底分布式搭建

相关文章
相关标签/搜索