Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/329.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/apache-spark/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Spark重启并优化转储大型表作业_Java_Apache Spark_Apache Spark Sql_Spark Dataframe_Apache Spark Standalone - Fatal编程技术网

Java 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

我正在使用Spark独立群集管理器。我正在使用
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());
    }