Spark-java 多线程与运行单个 Spark 作业

Posted

技术标签:

【中文标题】Spark-java 多线程与运行单个 Spark 作业【英文标题】:Spark-java multithreading vs running individual spark jobs 【发布时间】:2017-02-02 03:16:21 【问题描述】:

我是 Spark 的新手,并试图了解以下方法的性能差异(Spark on hadoop)

场景:根据批处理,我有 50 个 Hive 查询要运行。有些可以并行运行,有些可以顺序运行。

- 第一种方法

所有查询都可以存储在一个 hive 表中,我可以编写一个 Spark 驱动程序来一次读取所有查询并使用 java 多线程并行运行所有查询(使用 HiveContext)

优点:易于维护 缺点:所有资源都可能被占用,并且 对每个查询进行性能调整可能很困难。

- 第二种方法

使用 oozie spark 操作单独运行每个查询

优点:优化可以在查询级别完成 缺点:难以维护。

我找不到任何关于 Spark 将如何在第一种方法内部处理查询的第一种方法的文档。从性能的角度来看,哪种方法更好?

我能找到的关于 Spark 多线程的唯一内容是: “在每个 Spark 应用程序中,如果多个“作业”(Spark 操作)由不同的线程提交,它们可能会同时运行”

提前致谢

【问题讨论】:

为什么是-1 ??如果这个问题是两个基本问题,请您指点理解它吗? 【参考方案1】:

由于您的要求是与条件并行运行配置单元查询

有些可以并行运行,有些可以顺序运行

这种工作流最好由 Apache Oozie 的 DAG 处理器处理。这种方法比您通过代码管理查询更清晰,即您将构建自己的 DAG 处理器,而不是使用 oozie 提供的处理器。

【讨论】:

让我们假设如果我可以并行运行所有查询(在 hive 中每个查询平均需要 7-8 分钟才能完成),多线程是一个不错的选择吗? 是的.. 如果所有查询都必须并行运行,而不依赖于其他查询,而不是并行执行而不是像 Oozie 这样的 Dag 处理器,那么这将是有意义的..

以上是关于Spark-java 多线程与运行单个 Spark 作业的主要内容,如果未能解决你的问题,请参考以下文章

Spark-Java独立应用编程--理解:

spark jdk8 单词统计示例

多线程与高并发

“多个单核CPU”与“单个多核CPU”哪种方式性能较强?

java-多线程思想解析

Spark 和 MR 的区别: 多进程与多线程模型