我是Spark的新手,正在尝试理解以下方法(hadoop上的Spark)的性能差异
场景:根据批处理,我有50个配置单元查询要运行。有些可以并行运行,有些可以按顺序运行。
-第一种方法
所有的查询都可以存储在一个hive表中,我可以编写一个Spark驱动程序来一次读取所有查询,并使用java多线程并行运行所有查询(使用HiveContext)
- 优点:易于维护
- 缺点:所有资源都可能被占用对于每个查询来说,性能调优可能很困难
-第二种方法
使用oozie-spark操作运行每个查询单个
- 优点:可以在查询级别进行优化
- 缺点:难以维护
我找不到任何关于Spark如何在第一种方法中内部处理查询的第一种方法的文档。从性能的角度来看,哪种方法更好?
我在Spark多线程上唯一能找到的是:"在每个Spark应用程序中,如果多个"作业"(Spark操作)由不同的线程提交,则它们可能同时运行">
提前感谢
由于您的要求是与条件并行运行配置单元查询
有些可以并行运行,有些可以顺序运行
这种工作流最好由DAG处理器处理,Apache Oozie就是这样。这种方法将比通过代码管理查询更清晰,即您将构建自己的DAG处理器,而不是使用Oozie提供的处理器。