Spark 整体介绍
? ? Spark 是一个大数据运算框架,使用了DAG调度程序,比基于Hadoop MapReduce 运行速度提高了100倍以上 ?? ?Spark 是一个通用框架,对于不同的运行场景都提供了对于的解决方案: ?? ??? ?基于流式运算的 Spark Streaming框架 ?? ??? ?基于SQL 语法的 Spark SQL框架 ?? ??? ?基于图运算的 GraphX 框架 ?? ??? ?基于人工智能与机器学习的 MLlib 框架 ?? ?Spark 可运行在 Yarn 框架上,还可以运行在独立的集群,Mesos,kubernetes 等集群上面,访问HDFS,HBase,Hive等上百种数据源 ?? ?Spark 支持 Scala,Java,Python及R语言的快速编写 ?? ?Spark 角色分为 HMaster,Worker俩种角色,Spark 启动命令为 Spark-Submit(简称Driver),? ?? ?Spark 运算框架可以不基于Hadoop 框架进行数据运行,所以在配置conf文件时,不涉及 Hadoop 相关东西,在运算时, ?? ??? ?如果数据存储或者需要写入到HDFS时,需要指定数据读取/写入命令 ?? ??? ?如果只是Local模式运行(调试模式),可以不基于HDFS ?? ?提示:[集群在运行过程中,涉及SSH访问,所以集群配置时一定需要免密登陆方可执行] ?? ?Spark 集群安装?? ??? ? ?? ??? ?1. 配置文件修改 ?? ??? ??? ?spart-env.xml?? ?配置HMaster IP,端口 ?? ??? ??? ?slave.sh 配置workers ip地址 ?? ??? ?2. 启动Spark集群 ?? ??? ??? ?start-all.sh ?? ?Spark 高可用安装 ?? ??? ?可以采用,也可以不采用,根据自身条件而定 ?? ??? ?1. 安装Zookeeper 集群及配置Zookper集群,修改HMaster IP端口为Zookeeper 地址,并且启动 ?? ??? ??? ?spart-env.xml ?? ??? ?2. 启动Spark 集群 ?? ??? ??? ?start-all.sh ?? ??? ?3. 配置HMaster StandBy 进程 并且启动 ?? ??? ??? ?hmaster-start.sh ?? ?提交Spark Sample任务 ?? ??? ?1.spart-submit classpath jarpath? ?? ?Spark任务执行流程 ?? ??? ?Spark任务执行流程与Yarn任务执行流程类型 ?? ??? ?1. 首先客户端编写配置Configuration信息,打包Jar包,发起任务到HMaster ?? ??? ?2. HMaster根据用户下发的任务信息,配置Worker个数及Worker对应的内存及CPU等,并且启动Worker; ?? ??? ?3. Worker根据HMaster下发参数信息,并且与Client交互,获取对应的jar包等信息,然后启动Executor行数据处理(一个Worker下可以包含多个Executor) ?? ??? ?4. 输出保存数据。 ?? ?Yarn与Spark的对比 ?? ??? ?Yarn?? ?ResourceManager ? DataManager ? YarnChild?? ?(Job/Client)/ApplicationMastor?? ??? ? ?? ??? ?Spark ? HMaster ? ? ? ? ? Worker?? ??? ?Executor?? ?SparkSubmit ?? ?SparkShell 执行 ?? ??? ?SparkShell 可以理解为Spark的交互式编程窗口,在启动SparkShell那一瞬间,Spark任务已经启动,每个Work已经分配内存及CPU,等待执行任务,一般不采用SparkShell执行任务,不推荐。 ?? ?Scala编写Spark?? ??? ??? ??? ??? ??? ??? ? ?? ??? ?Spark对Scala的支持最好,Spark是用Scala语言开发的,所以Spark中包含了很多Scala特有的语法,这一点是其他语言所不能比拟的,所以编写Spark任务推荐使用Scala。 ?? ??? ?Spark 任务入口为SparkContext,首选需要创建SparkContent,然后就可以按照Spark任务执行流程进行编写,指定MapTask执行操作,ReduceTask执行操作,数据输入,数据输出等。 ?? ?Java编写Spark ?? ??? ?因为Scala是基于Java的一门开发语言,所以Spark也支持用Java进行Spark任务编写,不过Java对很多的Scala语法没有扩展,所以Scala的很多语法功能只能通过编写Java的Spark接口函数才能实现相应的功能,编写Spark的任务会比用Scala编写的程序臃肿吃力很多。 ?? ?JavaLambda编写Spark ?? ??? ?JavaLambda 任然是使用Java实现Spark编程,只在处理接口函数时使用Lambda模型,进行相应的泛化编写,实现与Java接口相同的功能,相对Java编写会轻量一点。 ?? ?Spark 本地调试 ?? ??? ?在真正部署到Spark集群之前,Spark任务可以在本地Local模型下进行调试,对Spark的本地模式只需要设置为.Local() 即可,把输入输出路径指定就可以了,不需要指定HMasker Spark地址,也无需指定HDFS等分布式文件存储地址和ZK地址。但是本地调试需要保证本地具有Hadoop Local运行环境,即为Hadoop Local模式。