Spark Ba​​tch暂停Spark Streaming作业

时间:2016-03-21 04:46:54

标签: java apache-spark hbase spark-streaming lambda-architecture

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

Spark Ba​​tch查询最新条目的处理结果表,并使用其中的数据确定从未处理的数据表中查询哪些数据。批处理作业具有无限的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();

批处理和流式传输的开始是通过ProcessBuilder完成的,如下所示:

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没有像我想要的那样管理任务,但不知道如何处理它。

0 个答案:

没有答案