初识Spark入门

1. Spark简介

  • 2009年,Spark诞生于伯克利大学的AMPLab实验室。最出Spark只是一个实验性的项目,代码量非常少,属于轻量级的框架。
  • 2010年,伯克利大学正式开源了Spark项目。
  • 2013年6月,Spark成为了Apache基金会下的项目,进入高速发展期。第三方开发者贡献了大量的代码,活跃度非常高
  • 2014年2月,Spark以飞快的速度称为了Apache的顶级项目,同时大数据公司Cloudera宣称加大Spark框架的投入来取代MapReduce
  • 2014年4月,大数据公司MapR投入Spark阵营, Apache Mahout放弃MapReduce,将使用Spark作为计算引擎。
  • 2014年5月,Spark 1.0.0 发布。
  • 2015年~,Spark在国内IT行业变得愈发火爆,越来越多的公司开始重点部署或者使用Spark来替代MR2、Hive、Storm等传统的大数据并行计算框架

2. Spark是什么?

  • Apache Spark™ is a unified analytics engine for large-scale data processing.
  • 大规模数据集的统一分析引擎
  • Spark是一个基于内存的通用并行计算框架,目的是让数据分析更加快速
  • Spark包含了大数据领域常见的各种计算框架
    • spark core(离线计算)
    • sparksql(交互式查询)
    • spark streaming(实时计算)
    • Spark MLlib (机器学习)
    • Spark GraphX (图计算)

3. Spark能代替hadoop吗?

​ 不完全对

​ 因为我们只能使用spark core代替mr做离线计算,数据的存储还是要依赖hdfs

​ Spark+Hadoop的组合,才是未来大数据领域最热门的组合,也是最有前景的组合!​

4. Spark的特点

速度

  • 内存计算在速度上要比mr快100倍以上
  • 磁盘计算在速度上要比mr快10倍以上

容易使用

  • 提供了java scala python R语言的api接口

一站式解决方案

  • spark core(离线计算)
  • spark sql(交互式查询)
  • spark streaming(实时计算)
  • .....

可以运行在任意的平台

  • yarn
  • Mesos
  • standalone

5. Spark的缺点

JVM的内存overhead太大,1G的数据通常需要消耗5G的内存 (Project Tungsten 正试图解决这个问题 )

不同的spark app之间缺乏有效的共享内存机制(Project Tachyon 在试图引入分布式的内存管理,这样不同的spark app可以共享缓存的数据)

6. Spark vs MR

6.1 mr的局限性

  • 抽象层次低,需要手工编写代码来完成,使用上难以上手
  • 只提供两个操作,Map和Reduce,表达力欠缺
  • 一个Job只有Map和Reduce两个阶段(Phase), 复杂的计算需要大量的Job完成,Job之间的依赖关系是由开发者自己管理的
  • 中间结果 (reduce的输出结果) 也放在HDFS文件系统中
  • 延迟高,只适用Batch数据处理,对于交互式数据处理,实时数据处理的支持不够
  • 对于迭代式数据处理性能比较差

6.2 Spark解决了mr中的那些问题?

抽象层次低,需要手工编写代码来完成,使用上难以上手

  • 通过spark中的RDD(Resilient distributed datasets)来进行抽象

只提供两个操作,Map和Reduce,表达力欠缺

  • 在spark中提供了多种算子

一个Job只有Map和Reduce两个阶段

  • 在spark中可以有多个阶段(stage)

中间结果也放在HDFS文件系统中(速度慢)

  • 中间结果放在内存中,内存放不下了会写入本地磁盘,而不是HDFS

延迟高,只适用Batch数据处理,对于交互式数据处理,实时数据处理的支持不够

  • sparksql和sparkstreaming解决了上面问题

对于迭代式数据处理性能比较差

  • 通过在内存中缓存数据,提高迭代式计算的性能

==因此,Hadoop MapReduce会被新一代的大数据处理平台替代是技术发展的趋势,而在新一代的大数据处理平台中,Spark目前得到了最广泛的认可和支持==

7. Spark的版本

  • spark1.6.3 : scala的版本2.10.5
  • spark2.2.0 : scala的版本2.11.8(新项目建议使用spark2.x的版本)
  • hadoop2.7.5

8. Spark单机版的安装

准备安装包spark-2.2.0-bin-hadoop2.7.tgz

tar -zxvf spark-2.2.0-bin-hadoop2.7.tgz -C /opt/
mv spark-2.2.0-bin-hadoop2.7/ spark

修改spark-env.sh

export JAVA_HOME=/opt/jdk
export SPARK_MASTER_IP=uplooking01
export SPARK_MASTER_PORT=7077
export SPARK_WORKER_CORES=4
export SPARK_WORKER_INSTANCES=1
export SPARK_WORKER_MEMORY=2g
export HADOOP_CONF_DIR=/opt/hadoop/etc/hadoop

配置环境变量

#配置Spark的环境变量
export SPARK_HOME=/opt/spark
export PATH=$PATH:$SPARK_HOME/bin:$SPARK_HOME/sbin

启动单机版spark

start-all-spark.sh

查看启动

http://uplooking01:8080

9. Spark分布式集群的安装

配置spark-env.sh

[root@uplooking01 /opt/spark/conf]
  export JAVA_HOME=/opt/jdk
  #配置master的主机
  export SPARK_MASTER_IP=uplooking01
  #配置master主机通信的端口
  export SPARK_MASTER_PORT=7077
  #配置spark在每个worker中使用的cpu核数
  export SPARK_WORKER_CORES=4
  #配置每个主机有一个worker
  export SPARK_WORKER_INSTANCES=1
  #worker的使用内存是2gb
  export SPARK_WORKER_MEMORY=2g
  #hadoop的配置文件中的目录
  export HADOOP_CONF_DIR=/opt/hadoop/etc/hadoop

配置slaves

[root@uplooking01 /opt/spark/conf]
  uplooking03
  uplooking04
  uplooking05

分发spark

[root@uplooking01 /opt/spark/conf]
  scp -r /opt/spark uplooking02:/opt/
  scp -r /opt/spark uplooking03:/opt/
  scp -r /opt/spark uplooking04:/opt/
  scp -r /opt/spark uplooking05:/opt/

分发uplooking01上配置的环境变量

[root@uplooking01 /]
  scp -r /etc/profile uplooking02:/etc/
  scp -r /etc/profile uplooking03:/etc/
  scp -r /etc/profile uplooking04:/etc/
  scp -r /etc/profile uplooking05:/etc/

启动spark

[root@uplooking01 /]
 start-all-spark.sh

10. Spark高可用集群

先停止正在运行的spark集群

修改spark-env.sh

#注释以下这两行内容
#export SPARK_MASTER_IP=uplooking01
#export SPARK_MASTER_PORT=7077

添加内容

export SPARK_DAEMON_JAVA_OPTS="-Dspark.deploy.recoveryMode=ZOOKEEPER -Dspark.deploy.zookeeper.url=uplooking03:2181,uplooking04:2181,uplooking05:2181 -Dspark.deploy.zookeeper.dir=/spark"

分发修改的[配置

scp /opt/spark/conf/spark-env.sh uplooking02:/opt/spark/conf
scp /opt/spark/conf/spark-env.sh uplooking03:/opt/spark/conf
scp /opt/spark/conf/spark-env.sh uplooking04:/opt/spark/conf
scp /opt/spark/conf/spark-env.sh uplooking05:/opt/spark/conf

启动集群

[root@uplooking01 /]
 start-all-spark.sh
[root@uplooking02 /]
 start-master.sh

11. 第一个Spark-Shell程序

spark-shell --master spark://uplooking01:7077
#spark-shell可以在启动时指定spark-shell这个application使用的资源(总核数,每个work上使用的内存)
spark-shell --master spark://uplooking01:7077 --total-executor-cores 6 --executor-memory 1g

#如果不指定 默认使用每个worker上全部的核数,和每个worker上的1g内存
sc.textFile("hdfs://ns1/sparktest/").flatMap(_.split(",")).map((_,1)).reduceByKey(_+_).collect

12. Spark中的角色

Master

  • 负责接收提交的作业的请求
  • master负责调度资源(在woker中启动CoarseGrainedExecutorBackend)

Worker

  • worker中的executor负责执行task

Spark-Submitter ===> Driver

  • 提交spark应用程序给master

13. Spark提交作业的大体流程

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • Spark入门简介

    SPARK Apache Spark 是专为大规模数据处理而设计的快速通用的计算引擎.Spark是UC Berkeley AMP lab (加州大学伯克利分校的AMP实验室)所开源的类Hadoop MapReduce的通用并行框架,Spark,拥有Hadoop MapReduce所具有的优点:但不同于MapReduce的是Job中间输出结果可以保存在内存中,从而不再需要读写HDFS,因此Spark能更好地适用于数据挖掘与机器学习等需要迭代的MapReduce的算法. Spark 是一种与 Had

  • 初识Spark入门

    1. Spark简介 2009年,Spark诞生于伯克利大学的AMPLab实验室.最出Spark只是一个实验性的项目,代码量非常少,属于轻量级的框架. 2010年,伯克利大学正式开源了Spark项目. 2013年6月,Spark成为了Apache基金会下的项目,进入高速发展期.第三方开发者贡献了大量的代码,活跃度非常高 2014年2月,Spark以飞快的速度称为了Apache的顶级项目,同时大数据公司Cloudera宣称加大Spark框架的投入来取代MapReduce 2014年4月,大数据公司

  • Spark实现K-Means算法代码示例

    K-Means算法是一种基于距离的聚类算法,采用迭代的方法,计算出K个聚类中心,把若干个点聚成K类. MLlib实现K-Means算法的原理是,运行多个K-Means算法,每个称为run,返回最好的那个聚类的类簇中心.初始的类簇中心,可以是随机的,也可以是KMean||得来的,迭代达到一定的次数,或者所有run都收敛时,算法就结束. 用Spark实现K-Means算法,首先修改pom文件,引入机器学习MLlib包: <dependency> <groupId>org.apache.

  • Spark的广播变量和累加器使用方法代码示例

    一.广播变量和累加器 通常情况下,当向Spark操作(如map,reduce)传递一个函数时,它会在一个远程集群节点上执行,它会使用函数中所有变量的副本.这些变量被复制到所有的机器上,远程机器上并没有被更新的变量会向驱动程序回传.在任务之间使用通用的,支持读写的共享变量是低效的.尽管如此,Spark提供了两种有限类型的共享变量,广播变量和累加器. 1.1 广播变量: 广播变量允许程序员将一个只读的变量缓存在每台机器上,而不用在任务之间传递变量.广播变量可被用于有效地给每个节点一个大输入数据集的副

  • SparkGraphx计算指定节点的N度关系节点源码

    直接上代码: package horizon.graphx.util import java.security.InvalidParameterException import horizon.graphx.util.CollectionUtil.CollectionHelper import org.apache.spark.graphx._ import org.apache.spark.rdd.RDD import org.apache.spark.storage.StorageLevel

  • Bootstrap入门教程一Hello Bootstrap初识

    一.Bootstrap简介 Bootstrap,来自 Twitter,是目前很受欢迎的前端框架.Bootstrap是基于 HTML5.CSS3和Javascriopt开发的,它在 jQuery的基础上进行了更为个性化和人性化的完善,形成一套自己独有的网站风格,并兼容大部分jQuery插件,为实现快速开发提供了一套前端工具包,包括丰富的布局.栅格.丰富的Web组件和jQuery插件等,并能通过Less进行样式定制. 二.Hello Bootstrap 1.建立项目目录结构,新建app.css.fo

  • Spark集群框架的搭建与入门

    目录 一.Spark概述 运行结构 二.环境部署 1.Scala环境 2.Spark基础环境 3.Spark集群配置 4.Spark启动 5.访问Spark集群 三.开发案例 1.核心依赖 2.案例代码开发 四.源代码地址 一.Spark概述 运行结构 Driver 运行Spark的Applicaion中main()函数,会创建SparkContext,SparkContext负责和Cluster-Manager进行通信,并负责申请资源.任务分配和监控等. ClusterManager 负责申请

  • C语言入门篇--初识指针和指针变量

    1.指针 指针就是地址(即一个数据). 2.指针变量 2.1概念 (1)指针变量是变量,是变量在内存中就会开辟空间,会有自己对应的的地址,有自己的变量大小. (2)指针变量里放的内容是地址(即指针). 2.2指针变量大小 32位平台下,4字节. 48位平台下,8字节. 2.3指针变量理解 理解前一定先看看,地址相关知识. #include <stdio.h> int main() { int a = 10; int *p = &a;//p为指针变量 printf("a的地址=

  • 一小时迅速入门Mybatis之初识篇

    目录 一.Mybatis简介 二.mybatis入门 2.1 创建Maven项目 2.2 修改pom文件(引入jar包) 2.3 编写xml 2.4 编写Java代码 2.5 唠唠 一.Mybatis简介 Mybatis是一款超级无敌的持久层框架,它支持自定义SQL.存储过程以及高级映射.Mybatis可以通过简单的XML或者注解来配置和映射原始类型.接口和Java POJO为数据库中的记录. Mybatis相比于Hibernate在处理复杂业务的时候灵活度更高.复杂的SQL编写更容易. 二.m

  • C语言入门篇--初识C语言及数据类型

    目录 1. 什么是C语言? 2.第一个C程序&&知识点 2.1 头文件 2.2 main函数 2.3 函数调用 2.4 return 0; 3. 数据类型 3.1 C语言数据类型 3.2 为什么有这么多数据类型? 3.3 各个数据类型的大小 1. 什么是C语言? (1)C语言是面向过程.编译型的编程语言(与C++.Java等面向对象的编程语言有所不同,ps:C与C++是兼容的),经过编译后最终形成可执行程序(即exe,可直接运行). (2)C语言非常经典,一般会在底层开发使用,Linux.

随机推荐