最近想学习一下Spark,也运行了一下Spark的sample。
这里有一点点问题想请教一下。
我使用的Spark版本:1.6.0 和 2.0.0。6台虚拟机,每台8g内存;分处于两台实体机上,各3台。
部署模式:standalone
我在学习Spark的过程中,任务的提交方式都是先编写好Spark程序(spark-shell的方式先不论),然后通过spark-submit脚本提交并执行任务。在2.0.0上也长尝试过使用Java代码调用任务提交,本质上感觉跟spark-submit没有区别。
现在我有一个这样的需求:
两个数据集根据指定字段求交集
(一个有数十亿条记录,每天大约会有十万到百万条记录的增量;另一个可能是数万条记录,每天几十条增量)
实际操作的时候会对两个数据集进行筛选然后在求交集(例如根据时间只使用某天或某段时间都记录)。
我想知道Spark有没有这样一个机制:
1、提交任务后,将读取的数据集(RDD或DataFrame)缓存下来(写成文件或保存到内存),以后使用到这个数据的时候直接读取这个文件而不需要到源系统中重新读取数据。
2、这个任务可以和外部程序进行交互(选择数据源,按照用户选择的过滤条件进行过滤,按照指定的条件求交集)
3、任务执行完成后不退出(因为我发现每次提交任务后申请资源到任务执行需要很久,不知是否机器配置低的原因),外部程序需要使用的时候可以直接使用这个任务(进行 1 中的操作)
基础不好,希望大家不吝赐教。