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 作业的主要内容,如果未能解决你的问题,请参考以下文章