1.   Spark概述

1.1.  什么是Spark(官网:http://spark.apache.org

Spark是一种快速、通用、可扩展的大数据分析引擎,2009年诞生于加州大学伯克利分校AMPLab,2010年开源,2013年6月成为Apache孵化项目,2014年2月成为Apache顶级项目。目前,Spark生态系统已经发展成为一个包含多个子项目的集合,其中包含SparkSQL、Spark Streaming、GraphX、MLlib等子项目,Spark是基于内存计算的大数据并行计算框架。Spark基于内存计算,提高了在大数据环境下数据处理的实时性,同时保证了高容错性和高可伸缩性,允许用户将Spark部署在大量廉价硬件之上,形成集群。Spark得到了众多大数据公司的支持,这些公司包括Hortonworks、IBM、Intel、Cloudera、MapR、Pivotal、百度、阿里、腾讯、京东、携程、优酷土豆。当前百度的Spark已应用于凤巢、大搜索、直达号、百度大数据等业务;阿里利用GraphX构建了大规模的图计算和图挖掘系统,实现了很多生产系统的推荐算法;腾讯Spark集群达到8000台的规模,是当前已知的世界上最大的Spark集群。

1.2.  为什么要学Spark

中间结果输出:基于MapReduce的计算引擎通常会将中间结果输出到磁盘上,进行存储和容错。出于任务管道承接的,考虑,当一些查询翻译到MapReduce任务时,往往会产生多个Stage,而这些串联的Stage又依赖于底层文件系统(如HDFS)来存储每一个Stage的输出结果

1.3.  Spark特点Spark是MapReduce的替代方案,而且兼容HDFS、Hive,可融入Hadoop的生态系统,以弥补MapReduce的不足。

1.3.1.   快

与Hadoop的MapReduce相比,Spark基于内存的运算要快100倍以上,基于硬盘的运算也要快10倍以上。Spark实现了高效的DAG执行引擎,可以通过基于内存来高效处理数据流。

1.3.2.   易用

Spark支持Java、Python和Scala的API,还支持超过80种高级算法,使用户可以快速构建不同的应用。而且Spark支持交互式的Python和Scala的shell,可以非常方便地在这些shell中使用Spark集群来验证解决问题的方法。

1.3.3.   通用

Spark提供了统一的解决方案。Spark可以用于批处理、交互式查询(Spark SQL)、实时流处理(Spark Streaming)、机器学习(Spark MLlib)和图计算(GraphX)。这些不同类型的处理都可以在同一个应用中无缝使用。Spark统一的解决方案非常具有吸引力,毕竟任何公司都想用统一的平台去处理遇到的问题,减少开发和维护的人力成本和部署平台的物力成本。

1.3.4.   兼容性

Spark可以非常方便地与其他的开源产品进行融合。比如,Spark可以使用Hadoop的YARN和Apache Mesos作为它的资源管理和调度器,器,并且可以处理所有Hadoop支持的数据,包括HDFS、HBase和Cassandra等。这对于已经部署Hadoop集群的用户特别重要,因为不需要做任何数据迁移就可以使用Spark的强大处理能力。Spark也可以不依赖于第三方的资源管理和调度器,它实现了Standalone作为其内置的资源管理和调度框架,这样进一步降低了Spark的使用门槛,使得所有人都可以非常容易地部署和使用Spark。此外,Spark还提供了在EC2上部署Standalone的Spark集群的工具。

2.   Spark集群安装

2.1.  安装

2.1.1.   机器部署

准备两台以上Linux服务器,安装好JDK1.7

2.1.2.   下载Spark安装包

http://www.apache.org/dyn/closer.lua/spark/spark-1.5.2/spark-1.5.2-bin-hadoop2.6.tgz

上传解压安装包

上传spark-1.5.2-bin-hadoop2.6.tgz安装包到Linux上

解压安装包到指定位置

tar -zxvf spark-1.5.2-bin-hadoop2.6.tgz -C /usr/local

2.1.3.   配置Spark

进入到Spark安装目录

cd /usr/local/spark-1.5.2-bin-hadoop2.6

进入conf目录并重命名并修改spark-env.sh.template文件

cd conf/

mv spark-env.sh.template spark-env.sh

vi spark-env.sh

在该配置文件中添加如下配置

export JAVA_HOME=/usr/java/jdk1.7.0_45

export SPARK_MASTER_IP=node1.itcast.cn

export SPARK_MASTER_PORT=7077

保存退出

重命名并修改slaves.template文件

mv slaves.template slaves

vi slaves

在该文件中添加子节点所在的位置(Worker节点)

slave2

slave3

slave4

保存退出

将配置好的Spark拷贝到其他节点上

scp -r spark-1.5.2-bin-hadoop2.6/slave2:/usr/local/

scp -r spark-1.5.2-bin-hadoop2.6/ slave3:/usr/local/

scp -r spark-1.5.2-bin-hadoop2.6/ slav4:/usr/local/

 

Spark集群配置完毕,目前是1个Master,3个Work,在slave4上启动Spark集群

/usr/local/spark-1.5.2-bin-hadoop2.6/sbin/start-all.sh

启动后执行jps命令,主节点上有Master进程,其他子节点上有Work进行,登录Spark管理界面查看集群状态(主节点):http://slave4:8080/(端口自定,容易占用)

到此为止,Spark集群安装完毕,但是有一个很大的问题,那就是Master节点存在单点故障,要解决此问题,就要借助zookeeper,并且启动至少两个Master节点来实现高可靠,配置方式比较简单:

Spark集群规划:slave4,Master是Master;node3,node4,node5是Worker

安装配置zk集群,并启动zk集群

停止spark所有服务,修改配置文件spark-env.sh,在该配置文件中删掉SPARK_MASTER_IP并添加如下配置

export SPARK_DAEMON_JAVA_OPTS="-Dspark.deploy.recoveryMode=ZOOKEEPER -Dspark.deploy.zookeeper.url=zk1,zk2,zk3 -Dspark.deploy.zookeeper.dir=/spark"

1.在slave4节点上修改slaves配置文件内容指定worker节点

2.在slave4上执行sbin/start-all.sh脚本,然后Master上执行sbin/start-master.sh启动第二个Master

3.   执行Spark程序

3.1.  执行第一个spark程序

/usr/local/spark-1.5.2-bin-hadoop2.6/bin/spark-submit \

--class org.apache.spark.examples.SparkPi \

--master spark://node1.itcast.cn:7077 \

--executor-memory 1G \

--total-executor-cores 2 \

/usr/local/spark-1.5.2-bin-hadoop2.6/lib/spark-examples-1.5.2-hadoop2.6.0.jar \

100

该算法是利用蒙特·卡罗算法求PI

3.2.  启动Spark Shell

spark-shell是Spark自带的交互式Shell程序,方便用户进行交互式编程,用户可以在该命令行下用scala编写spark程序。

3.2.1.   启动spark shell

/usr/local/spark-1.5.2-bin-hadoop2.6/bin/spark-shell \

--master spark://node1.itcast.cn:7077 \

--executor-memory 2g \

--total-executor-cores 2

参数说明:

--master spark://node1.itcast.cn:7077 指定Master的地址

--executor-memory 2g 指定每个worker可用内存为2G

--total-executor-cores 2 指定整个集群使用的cup核数为2个

注意:

如果启动spark shell时没有指定master地址,但是也可以正常启动spark shell和执行spark shell中的程序,其实是启动了spark的local模式,该模式仅在本机启动一个进程,没有与集群建立联系。

Spark Shell中已经默认将SparkContext类初始化为对象sc。用户代码如果需要用到,则直接应用sc即可

最新文章

  1. JavaScript进阶篇QA总结
  2. GeoJSON格式规范说明
  3. Android系统的架构
  4. JS函数
  5. java 线程数据同步
  6. C Primer Plus(第五版)12
  7. java GZIP压缩和解压
  8. asp.net mvc JQGrid
  9. UVA 10523 Very Easy!!!(大数据加法、乘法)
  10. Augustus安装小记
  11. 用vector与bitset分别创建1亿以内的素数表,比较快慢
  12. linux修改默认语言
  13. Linux常用命令之链接命令和权限管理命令
  14. angular 多端打包
  15. sys模块的介绍
  16. luogu4932 浏览器 (拆)
  17. JdbcTemplate 方法使用
  18. Java集合 -- ArrayList集合及应用
  19. bzoj 2150 最小路径覆盖
  20. Linux 嵌入式 开发环境 交叉编译安装

热门文章

  1. how to run a continuous background task on OpenShift
  2. caffe配置Makefile.config----ubuntu16.04--重点是matlab的编译
  3. C#XML的序列化与反序列化
  4. leetCode(51):Valid Palindrome
  5. java Comparator比较器排序法
  6. Struts2实例详解(转载)
  7. eclipse的debug使用(转载)
  8. 游戏开发之基础图像---3d图像处理
  9. EasyDarwin开源流媒体服务器gettimeofday性能优化(3000万/秒次优化至8000万次/秒)
  10. 用EasyDarwin进行IPTV rtsp mpeg-ts smil流的转发和分发直播服务