Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/319.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/2/unit-testing/4.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 Batch正在暂停Spark流作业_Java_Apache Spark_Hbase_Spark Streaming_Lambda Architecture - Fatal编程技术网

Java Spark Batch正在暂停Spark流作业

Java Spark Batch正在暂停Spark流作业,java,apache-spark,hbase,spark-streaming,lambda-architecture,Java,Apache Spark,Hbase,Spark Streaming,Lambda Architecture,我有一个独立的Spark运行在我电脑上的虚拟机上。Spark Streaming从Kafka获取数据,将其保存到HBase表中,然后对其进行处理并将结果保存到另一个表中 Spark Batch查询处理结果表中的最新条目,并使用其中的数据确定要从未处理数据表中查询的数据。批处理作业有一个无限while循环,使批处理在完成后重新启动。它和流作业都将调度程序设置为“公平” 我有一个客户端应用程序,它以正确的顺序运行所有这些东西,首先将生成的信息流式传输到Kafka,然后为流式传输层启动一个单独的线程,

我有一个独立的Spark运行在我电脑上的虚拟机上。Spark Streaming从Kafka获取数据,将其保存到HBase表中,然后对其进行处理并将结果保存到另一个表中

Spark Batch查询处理结果表中的最新条目,并使用其中的数据确定要从未处理数据表中查询的数据。批处理作业有一个无限while循环,使批处理在完成后重新启动。它和流作业都将调度程序设置为“公平”

我有一个客户端应用程序,它以正确的顺序运行所有这些东西,首先将生成的信息流式传输到Kafka,然后为流式传输层启动一个单独的线程,然后在一定延迟后为批处理启动一个单独的线程

我的问题是,流式处理使用提供的3个内核中的2个运行并且没有抱怨,但是当批处理作业开始时,流表示它正在运行,但是HBase表清楚地显示,当批处理作业写入其表时,流式处理作业不会写入任何内容。此外,当这一切发生时,流日志会暂停

我设置要运行的线程的方式如下:

    Runnable batch = new Runnable() {

        @Override
        public void run() {
            try {
                Lambda.startBatch(lowBoundary, highBoundary);
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    };

    Thread batchThread = new Thread(batch);
    batchThread.start();
public static void startBatch(String low, String high) throws Exception {
    // Specify executable path
    String sparkSubmit = "/home/lambda/Spark/bin/spark-submit";

    // Describe the process to be run
    ProcessBuilder batch = new ProcessBuilder(sparkSubmit,
            "--class", "batch.Batch", "--master",
            "spark://dissertation:7077",
            "/home/lambda/Downloads/Lambda/target/lambda-1.0-jar-with-dependencies.jar",
            low, high);

    // Start the batch layer
    batch.start();

}
批处理和流式处理的启动是通过ProcessBuilder完成的,如下所示:

    Runnable batch = new Runnable() {

        @Override
        public void run() {
            try {
                Lambda.startBatch(lowBoundary, highBoundary);
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    };

    Thread batchThread = new Thread(batch);
    batchThread.start();
public static void startBatch(String low, String high) throws Exception {
    // Specify executable path
    String sparkSubmit = "/home/lambda/Spark/bin/spark-submit";

    // Describe the process to be run
    ProcessBuilder batch = new ProcessBuilder(sparkSubmit,
            "--class", "batch.Batch", "--master",
            "spark://dissertation:7077",
            "/home/lambda/Downloads/Lambda/target/lambda-1.0-jar-with-dependencies.jar",
            low, high);

    // Start the batch layer
    batch.start();

}

有人知道为什么会这样吗?我怀疑是Spark没有像我希望的那样管理任务,但不知道该怎么办。

你在流媒体环境中提交Spark作业,这就是问题所在!Spark Streaming并不是为此而设计的。它是为微批处理而设计的。这两个作业是分开的,并使用各自的Spark上下文。我给出的示例仅适用于批处理,因为流作业的代码几乎相同。很抱歉没有说清楚。每个作业本身都运行得很好只是一个粗略的猜测,但您是否有足够的容量用于接收器,也就是说,为它保留了免费的内核?我设法让它工作,这是一个麻烦。必须使每个核心都有一个工人,每个工人都有一个由其管理的工作的驱动程序。在一个正常启动的集群中,这绝不是一个问题。我认为需要设置的一个设置是调度程序,如果您在流式上下文中提交spark作业,这就是问题所在!Spark Streaming并不是为此而设计的。它是为微批处理而设计的。这两个作业是分开的,并使用各自的Spark上下文。我给出的示例仅适用于批处理,因为流作业的代码几乎相同。很抱歉没有说清楚。每个作业本身都运行得很好只是一个粗略的猜测,但您是否有足够的容量用于接收器,也就是说,为它保留了免费的内核?我设法让它工作,这是一个麻烦。必须使每个核心都有一个工人,每个工人都有一个由其管理的工作的驱动程序。在一个正常启动的集群中,这绝不是一个问题。我认为需要设置的一个设置是为了调度程序公平