Spark简介及完全分布式安装

Spark简介及完全分布式安装

----------目录---------------------------------------------------------

1.Spark简介及完全分布式安装

-------------------------------------------------------------------------------------------------------------

一、Spark介绍

    官方介绍: 

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

Spark Introduce

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

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

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

    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.

    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。

1、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显得力不从心。

    随着业界对大数据使用越来越深入,大家都呼唤一个更强大的处理框架,能够真正解决更多复杂的大数据问题。

3、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的操作,应有尽有。

4、总结

    Hadoop的MapReduce为什么不使用内存存储?

    是历史原因。当初MapReduce选择磁盘,除了要保证数据存储安全以外,更重要的是当时企业级数据中心购买大容量内存的成本非常高,选择基于内存的架构并不现实;现在Spark真的赶上了好时候,企业可以轻松部署多台大内存机器,内存大到可以装载所有要处理的数据。

二、Spark安装

软件版本:

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

spark-2.0.1-bin-hadoop2.7.tgz

1、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。

2、Spark集群模式安装

    准备三台服务器,分别命名为spark01、spark02、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

    分别编辑spark02、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")

猜你喜欢

转载自my.oschina.net/u/3754001/blog/1811208
今日推荐