前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >原 Spark简介及完全分布式安装

原 Spark简介及完全分布式安装

作者头像
云飞扬
发布2018-05-17 15:53:57
6750
发布2018-05-17 15:53:57
举报
文章被收录于专栏:星汉技术星汉技术

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,然后编辑此文件,命令如下:

代码语言:javascript
复制
cp conf spark-env.sh.template spark-env.sh
vim spark-env.sh

   增加如下内容:

代码语言:javascript
复制
 SPARK_LOCAL_IP=spark01

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

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

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

4.启动

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

代码语言:javascript
复制
sh spark-shell --master=local

    或者

代码语言:javascript
复制
./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,然后编辑此文件,命令如下:

代码语言:javascript
复制
cp conf spark-env.sh.template spark-env.sh
vim spark-env.sh

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

配置示例:

代码语言:javascript
复制
#本机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。

配置示例:

代码语言:javascript
复制
spark01
spark02
spark03

4.拷贝修改

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

    拷贝命令如下:

代码语言:javascript
复制
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目录执行如下命令,此命令会启动整个集群的服务,不需要单独启动每个服务器的服务:

代码语言:javascript
复制
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目录执行如下命令即可进入使用:

代码语言:javascript
复制
sh spark-shell.sh --master spark://192.168.75.11:7077
3>在集群中读取文件

读取本地

代码语言:javascript
复制
sc.textFile("/root/work/words.txt")

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

读取HDFS

    所以应该通过hdfs存储数据,读取方式如下:

代码语言:javascript
复制
sc.textFile("hdfs://hadoop01:9000/mydata/words.txt")

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

代码语言:javascript
复制
sc.text("file:///xxx/xx")

下一篇:Spark On Yarn完全分布式搭建

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Spark简介及完全分布式安装
  • 一、Spark介绍
    • 1、Spark VS MapReduce
      • 1.MapReduce存在的问题
      • 2.磁盘I/O
      • 3.多次MapReduce
    • 3、Spark的优势
      • 1.全程使用内存
      • 2.操作数据灵活
      • 3.一站式服务框架
    • 4、总结
    • 二、Spark安装
      • 1、Spark单机模式安装
        • 1.JDK
        • 2.下载安装
        • 3.配置Spark
        • 4.启动
      • 2、Spark集群模式安装
        • 1.JDK
        • 2.下载安装
        • 3.配置Spark
        • 4.拷贝修改
        • 5.启动集群
        • 6.使用集群
    相关产品与服务
    访问管理
    访问管理(Cloud Access Management,CAM)可以帮助您安全、便捷地管理对腾讯云服务和资源的访问。您可以使用CAM创建子用户、用户组和角色,并通过策略控制其访问范围。CAM支持用户和角色SSO能力,您可以根据具体管理场景针对性设置企业内用户和腾讯云的互通能力。
    领券
    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档