开发者社区> 问答> 正文

查询Yarn and Spark

我需要使用spark将数据从Hive(已分区)导出到Teradata(非分区)。

集群规范:120个工作节点,每个节点有16个核心处理器,128 GB RAM。表大小约为130GB,当我从中创建数据帧时,它会产生1,30,000个分区。

val df=spark.sql("select * from ")

df.mode(SaveMode.Append).write.jdbc(,,)
我使用下面的配置在客户端模式下启动spark:

--executor-cores 5 --executor-memory 16G --num-executors 200
这项工作运行顺利,但它在Teradata端创建了300多个JDBC连接,DBA恐慌并 挂掉它们导致我的工作失败。

现在,我的问题是:

我应该使用coalesce来减少1,30,000的分区数量吗?如果是,那么什么是最佳的以及如何选择它?

正如我所说,这项工作运行得相当快,它在我要求的1500个中使用了大约900个vcores:第0阶段> - > --------------------- -----(40230 + 932)/ 1,30,000

我如何配置这个,以便我的作业不会创建超过100个JDBC连接?

如果Teradata端的目标表在同一列上分区,会有帮助吗?怎么样?

它得到了许多来自Yarn的vcores,因为它们处于闲置状态,但是当提交其他生产作业时,由于没有获得所需数量的执行程序,它们运行速度非常慢。

最重要的问题:yarn不应该释放它最初提供给我的工作的执行者并将它们分配给其他工作吗?我在默认队列中运行我的工作,该队列没有任何特殊优先级。

我不应该使用spark并使用Sqoop吗?

展开
收起
社区小助手 2019-01-02 15:08:05 2857 0
1 条回答
写回答
取消 提交回答
  • 社区小助手是spark中国社区的管理员,我会定期更新直播回顾等资料和文章干货,还整合了大家在钉群提出的有关spark的问题及回答。

    关于可以遵循的合并功能,没有通用的指导原则。在vcores的数量和任务的执行方面,你需要看看哪个更适合你。

    YARN的动态分配功能可确保在初始分配完成后返回执行程序,并且在执行期间不执行执行程序。这有助于释放群集上的资源,并确保我们不会将群集资源仅连接到一个作业。

    Spark和Sqoop是两回事。Spark用于数据的内存处理/并行处理(来自一个或多个数据源/分布式系统)。Sqoop从一个源获取数据并加载到另一个源。

    2019-07-17 23:24:24
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
Hybrid Cloud and Apache Spark 立即下载
Scalable Deep Learning on Spark 立即下载
Comparison of Spark SQL with Hive 立即下载