背景:工作中遇到政府项目,需要每小时、每天、每月调用政府指定接口上传数据。运维方面因为特殊原因只能开通指定服务器到政府接口的权限。
因为集群环境限制,只能将Spark任务计算的数据落到固定机器上,并在该机器进行接口调用上传数据。
我们要部署Spark这套计算框架,有多种方式,可以部署到一台计算机,也可以是多台(cluster)。
Spark部署方式可以用如下图形展示:
那么在此次项目中几种模式如何选择:
Local模式Local模式就是运行在一台计算机上的模式。它可以通过以下集中方式设置master。
- local: 所有计算都运行在一个线程当中,没有任何并行计算。
- local[K]: 指定使用几个线程来运行计算,比如local[4]就是运行4个worker线程。通常我们的cpu有几个core,就指定几个线程,最大化利用cpu的计算能力
- local[*]: 这种模式直接帮你按照cpu最多cores来设置线程数了。
cluster模式
standalone模式
这种模式下,Spark会自己负责资源的管理调度。
mesos模式
yarn模式
同样,如果采用yarn来管理资源调度,就应该用yarn模式,由于很多时候我们需要和mapreduce使用同一个集群,所以都采用Yarn来管理资源调度,这也是生产环境大多采用yarn模式的原因。yarn模式又分为yarn cluster模式和yarn client模式:
- yarn cluster: 这个就是生产环境常用的模式,所有的资源调度和计算都在集群环境上运行。
- yarn client: 这个是说Spark Driver和ApplicationMaster进程均在本机运行,而计算任务在cluster上。
为了将计算结果持久化到本地磁盘,创建session时参数如下:
SparkSession spark = SparkSession
.builder()
.enableHiveSupport().appName("ReadToFileHourMain").master("local")
.getOrCreate();
进行逻辑计算后将数据集合并落入本地磁盘,注意文件个数。
//合并后写入本地文件
df.coalesce(1).rdd().saveAsTextFile(filePath);
如果文件已经存在了程序会报错,任务重复调度记得提前清理文件。



