欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

初识Spark入门

程序员文章站 2022-06-02 10:25:16
1. spark简介 2009年,spark诞生于伯克利大学的amplab实验室。最出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提交作业的大体流程

初识Spark入门

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