Не удалось отправить топологию шторма

Я пытаюсь отправить топологию Storm на удаленный хост с помощью Eclipse.

Вот мой код:

Config conf = new Config();
conf.setDebug(false);
conf.setNumWorkers(1);
conf.put(Config.NIMBUS_HOST, "hostName");
conf.put(Config.NIMBUS_THRIFT_PORT,6627);
conf.put(Config.STORM_ZOOKEEPER_SERVERS,Arrays.asList(new String[]{"hostName"}));
conf.put(Config.STORM_ZOOKEEPER_PORT,2181);

// Remote submission
StormSubmitter.submitTopology("classMain", conf, topology);

Но я получаю это исключение:

Exception in thread "main" java.lang.RuntimeException: org.apache.thrift7.TApplicationException: Binary field exceeded string size limit
  at backtype.storm.StormSubmitter.submitTopologyAs(StormSubmitter.java:250)
 at backtype.storm.StormSubmitter.submitTopology(StormSubmitter.java:271)
  at backtype.storm.StormSubmitter.submitTopology(StormSubmitter.java:157)
  at com.rbc.rbccm.hackathon.Countersearch.submitTopology(Countersearch.java:111)
  at com.rbc.rbccm.hackathon.Countersearch.main(Countersearch.java:37)
Caused by: org.apache.thrift7.TApplicationException: Binary field exceeded string size limit
  at org.apache.thrift7.TApplicationException.read(TApplicationException.java:111)
  at org.apache.thrift7.TServiceClient.receiveBase(TServiceClient.java:71)
  at backtype.storm.generated.Nimbus$Client.recv_submitTopology(Nimbus.java:184)
  at backtype.storm.generated.Nimbus$Client.submitTopology(Nimbus.java:168)
  at backtype.storm.StormSubmitter.submitTopologyAs(StormSubmitter.java:236)
... 4 more

Существует ли ограничение на размер строки для параметров, которые мы можем передать функции submitTopology?

Когда я иду по следу немного больше, это приводит к:

public void submitTopology(String name, String uploadedJarLocation, String jsonConf, StormTopology topology) throws AlreadyAliveException, InvalidTopologyException, AuthorizationException, org.apache.thrift.TException
{
    send_submitTopology(name, uploadedJarLocation, jsonConf, topology);
    recv_submitTopology();
}

recv вызывает проблему. Какие-нибудь мысли?


person AbtPst    schedule 16.10.2015    source источник
comment
Какова длина абсолютного пути к файлу jar?   -  person Chris Gerken    schedule 16.10.2015
comment
C:\\adasd\\sdsd\\workspace\\adasdasdsadsad\\target\\sample-mainClass-0.0.1.jar это слишком долго?   -  person AbtPst    schedule 16.10.2015
comment
Что происходит, когда вы пытаетесь использовать клиент командной строки для загрузки файла jar в топологию Storm?   -  person Morgan Kenyon    schedule 16.10.2015


Ответы (2)


Вам нужно увеличить параметр nimbus.thrift.max_buffer_size. Вы можете установить его либо в storm.yaml, либо в Config объекте.

person Matthias J. Sax    schedule 18.10.2015
comment
Спасибо, Матиас, но поскольку max_buffer_size устарел (storm.apache.org/releases/1.0.0/javadocs/org/apache/storm/), как решить проблему сейчас? Я столкнулся с той же ошибкой. - person Nav; 26.05.2016
comment
Проблема в вашем очень большом файле jar. Storm 1.0 представляет распределенный кэш storm.apache.org/releases/1.0. 0/distcache-blobstore.html Я никогда не пробовал, но у вас должна быть возможность загрузить туда свой jar-файл (вместо того, чтобы передавать его через Nimbus. - person Matthias J. Sax; 26.05.2016

Если вы видите код в исходном коде Storm по адресу StormSubmitter.java, он выглядит следующим образом:

public static void submitTopology(String name, Map stormConf, StormTopology topology)
        throws AlreadyAliveException, InvalidTopologyException, AuthorizationException {
    submitTopology(name, stormConf, topology, null, null);
}

Ошибка Thrift связана с тем, что указанный вами name слишком длинный (более 2 МБ?), или stormConf содержит слишком много информации, или есть более вероятная причина, заключающаяся в том, что при создании topology вы заполняете носик или болт. экземпляр со слишком большим количеством информации.

В моем случае я создавал болт, в который инициализировал слишком много данных.

builder.setBolt(genBolt, new GenBolt(myTable1.getHashMap(), myTable2.getHashMap(), myTable3.getHashMap(), myTable4.getHashMap()), 2)
  .fieldsGrouping(iterSpout, new Fields(con.BATCH_ID))
person Nav    schedule 27.05.2016