一起学Spark (1) -- spark介绍与初始化

                                               Spark介绍与初始化

参考资料《Spark 大数据集群计算的生产实践》与《Spark快速大数据分析》

 

spark是大数据的下一代数据处理引擎。支持三种语言,Python,Java 以及它的原生语言Scala。我主要介绍的是python语言编写的spark,因为我工作中也主要是spark批处理数据,当然对于scala来说,对spark的支持也会更加灵活(比如流处理,这个以后有机会再写一个spark streaming系列)。然而我工作中接触最多的是python 大数据批运算。

 

我工作中的集群是 yarn集群,作为练习,可以就使用 Spark Standalone 集群。也就是Spark自带的单机集群,我代码示例都是基于yarn集群。

 

现在介绍一下 Spark 的基本组件:

 

1.Spark Core:

   Spark Core 实现了Spark 的基本功能,包含任务调度,内存管理,错误恢复等。Spark Core中还包含了对弹性分布式数据集(RDD)的API定义。

 

2.Spark SQL

  处理结构化数据的程序包,基本是对Hive的操作。但功能不如MapReduce稳定。

3.Spark Streaming 

  处理流式数据,python不支持。

4.MLlib

  机器学习算法

 

介绍一下集群管理器:

我们知道对于单机,都有一个操作系统OS,集群管理器就是相当于一个集群的操作系统,管理一个集群的资源分配,任务调度等。Spark设计可以高效的在一个计算节点到数千个计算节点之间伸缩计算,为了实现这样的要求,Spark支持在各种集群管理器上运行,包括Hadoop YARN,Apache Mesos,以及spark自带的一个简易调度器。

 

理解集群资源:

 

1.磁盘存储

   对于任何的Spark应用而言,磁盘都是至关重要的,因为它存储了持久化的数据,中间计算的结果和系统状态。在单机中,是文件系统,在集群中,是分布式文件系统HDFS

2.CPU核

  计算上的CPU是真正执行计算的处理器,如今的CPU往往有多个CPU核,意味着他们可以并行执行多个进程。在一个集群中,有多台计算机,每个计算机有多个CPU核。在单机上,操作系统处理进程间的通信和资源共享,在分布式环境中,集群管理器为任务分配CPU资源。

 当构建Spark应用时,把CPU核的数量和程序的并行度联系起来,Spark是建立在弹性分布式数据集RDD上的,RDD是一种抽象,它把分布式数据看做是一个包含多个分区的单一实体。在Spark中,一个Spark任务(task)将在一个CPU核上处理一个RDD的一个分区。

3.内存

  内存对所有的Spark应用而言都是至关重要的,Spark中像shuffle 这样的内部机制要用到内存,而JVM堆空间则用于将持久化的RDD放到内存中,最小化磁盘I/O,从而获得极大的性能提升

 

                                                      关于提交spark作业的应用参数

spark-submit 是spark提供的一个程序接口,用于提交我们的spark作业。部分参数如下:

--master 集群URL,设定集群主节点

--executor-memory 每个执行器的内存用量,一些集群会限制为8G(我工作中用到的是 2G)

--deploy-mode 两种将运用连接到集群的模式 (客户端模式和集群模式)客户端模式:驱动器程序运行在提交的机器上。集群模式:驱动器程序运行在一个yarn容器内。

--num-executors JVM数

--executor-cores JVM核心数

--driver-memory driver内存用于存储累加器变量以及 collect()操作的输出,默认为 1G

启动Spark Schell 中的pyspark 固然可以作为python的一个API,但有时候是需要独立的调用Spark,这时,如果需要用到文件RDD编程,必须初始化SparkContext对象:

from pyspark import SparkConf,SparkContext
conf = SparkConf.setMaster("yarn-client").setAppName("MY_APP") #应用名可帮助在集群管理器界面找到应用
#或者写成 
conf.set("spark.master","yarn-client")
conf.set("spark.app.name","my_app")       
sc = SparkContext(conf = conf)

优先级最高的是用户在代码中显式调用set方法设置的选项,其次是通过spark-submit 传递的参数,再次是写在配置文件中的值,最后才是系统默认值。

 

spark优缺点:
     spark的主要贡献在于,它提供了一个强大而且简单的API,能对分布式数据执行复杂的分布式操作。用户能够像为单机写代码一样简单的开发spark程序,但是实际上程序是在集群中运行的。
     Spark 并不是所有的任务都适用,它的长处是批处理,即以分布式的方式高效的处理大量数据,批处理的缺点是引入较高的延迟。即使是Spark Streaming 模式,也只能做到秒级。因此不适用于低延迟,高吞吐量的应用。

 

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值