Java Spark重启并优化转储大型表作业
我正在使用Spark独立群集管理器。我正在使用Java Spark重启并优化转储大型表作业,java,apache-spark,apache-spark-sql,spark-dataframe,apache-spark-standalone,Java,Apache Spark,Apache Spark Sql,Spark Dataframe,Apache Spark Standalone,我正在使用Spark独立群集管理器。我正在使用runDumpJob方法转储一个巨大的表(请参见下面的代码)。要并行启动一些runDumpJobs,我需要从不同的线程调用runDumpJob 问题 一些runDumpJobs失败,Spark不会自动重新启动 问题 如何自动重新启动失败的作业 如何从某个检查点自动恢复失败的作业 代码 public void runDumpJob(SparkSession SparkSession,MyParams params){ 最终数据集数据集=sparkSes
runDumpJob
方法转储一个巨大的表(请参见下面的代码)。要并行启动一些runDumpJob
s,我需要从不同的线程调用runDumpJob
问题
一些runDumpJob
s失败,Spark不会自动重新启动
问题
public void runDumpJob(SparkSession SparkSession,MyParams params){
最终数据集数据集=sparkSession
.sqlContext()
.读()
.格式(“jdbc”)
.option(“url”,params.getJdbcUrl())
.option(“驱动程序”,params.getDriver())
.option(“dbtable”,params.getSqlQuery())
.option(“fetchSize”,params.getJobParam(“fetchSize”))
.load();
数据集
.合并(1)
.write()
.parquet(params.getPath());
}
您可以单独保存每个分区,以避免内存溢出;如果合并到单个分区中,并且输入的大小很大,那么驱动程序的内存就会耗尽。如果数据保存在HDFS中,则可以使用HDFS API或HDFS命令将其合并;如果数据保存在其他位置,则可以编写脚本/代码将其合并。@mbaxi表不是转储到某个特定工作进程的RAM中吗?假设您有5个工人,每个16 Gb RAM,一个100 Gb的表。你打算怎么做?@mbaxi你知道如何使spark restart自动执行失败的作业吗?是的,你是对的,这将是一个特定的工作进程,它将获得所有分区,而不是驱动程序,并且将受到为工作进程保留的存储内存的限制,对于纱线集群上的重启部分,它可以在作业级别进行控制,不确定如何在独立模式下执行。您可以单独保存每个分区,以避免内存溢出;如果合并到单个分区中,并且输入的大小很大,那么驱动程序的内存就会耗尽。如果数据保存在HDFS中,则可以使用HDFS API或HDFS命令将其合并;如果数据保存在其他位置,则可以编写脚本/代码将其合并。@mbaxi表不是转储到某个特定工作进程的RAM中吗?假设您有5个工人,每个16 Gb RAM,一个100 Gb的表。你打算怎么做?@mbaxi你知道如何使spark restart自动执行失败的作业吗?是的,你是对的,这将是一个特定的工作进程,它将获得所有分区,而不是驱动程序,并且将受到为工作进程保留的存储内存的限制,对于纱线簇上的重新启动部件,可以在作业级别进行控制,但不确定如何在独立模式下进行
public void runDumpJob(SparkSession sparkSession, MyParams params) {
final Dataset<Row> dataset = sparkSession
.sqlContext()
.read()
.format("jdbc")
.option("url", params.getJdbcUrl())
.option("driver", params.getDriver())
.option("dbtable", params.getSqlQuery())
.option("fetchSize", params.getJobParam("fetchSize"))
.load();
dataset
.coalesce(1)
.write()
.parquet(params.getPath());
}