Невозможно поделиться подключением к рабочим узлам искры - PullRequest
0 голосов
/ 30 сентября 2019

Я читаю из Eventhub в Azure, использую потоковую передачу для чтения и планирую записать данные в HBase. У меня есть класс HBaseOperations, который создает экземпляры соединений hbase в конструкторе и имеет другие операции, такие как put и т. Д.

. Теперь при потоковой передаче данных в пакетном режиме и записи в HBase я не могу поделиться объектом hBaseOperations с работником. узлы

  1. он говорит, что hBaseOperations не сериализуем, что имеет смысл
  2. Чтобы разделить несериализуемый объект, я попробовал множество подходов

    a. сделал hBaseOperations статическим и одноэлементным и попытался создать экземпляр в методе extractdata () .... не сработал

    b. Попробовал batch.foreachpartition () .... не удалось заставить его работать ....

    c. расширенные вариабельные значения, кажется, не могут передавать не сериализуемые данные.

    Как сделать одну копию hBaseOperations в каждом рабочем узле?


Dataset<Row> messages = incomingStream.selectExpr("CAST(body AS STRING)");

messages.writeStream().foreachBatch( new VoidFunction2<Dataset<Row>, Long>() {

    public void call(Dataset<Row> batch, Long batchId) throws Exception {

        batch.foreach(new ForeachFunction<Row>() {          // line 1

            public void call(Row row) throws Exception {
                    Integer index =row.fieldIndex("body");
                    String data=row.getString(index);
                    extractData(data, hBaseOperations);      // my local function which adds data to HBase ....

                }
            });

        }
    }).start().awaitTermination();


extractData(String data, HBaseOperations, hBaseOPerations){

}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...