SpringXD: могут ли partitionPath и hdfs-dataset сосуществовать?

Я определил несколько потоков, используя новую опцию partitionPath, чтобы файлы попадали в дневные каталоги в Hadoop:

stream create --name XXXX --definition "http --port=8300|hdfs-dataset --format=avro --idleTimeout=100000 --partitionPath=dateFormat('yyyy/MM/dd/')" --deploy

stream create --name YYYY --definition "http --port=8301|hdfs --idleTimeout=100000 --partitionPath=dateFormat('yyyy/MM/dd/')" --deploy

Все потоки были созданы и развернуты, кроме XXXX вверху:

17:42:49,102  INFO Deployer server.StreamDeploymentListener - Deploying stream Stream{name='XXXX'}
17:42:50,948  INFO Deployer server.StreamDeploymentListener - Deployment status for stream 'XXXX': DeploymentStatus{state=failed,error(s)=java.lang.IllegalArgumentException: Cannot instantiate 'IntegrationConfigurationInitializer': org.springframework.integration.jmx.config.JmxIntegrationConfigurationInitializer}
17:42:50,951  INFO Deployer server.StreamDeploymentListener - Stream Stream{name='XXXX'} deployment attempt complete

Обратите внимание, что его данные обрабатываются и сохраняются в формате avro. И FWIW, когда другие потоки помещаются в /xd/<NAME>/<rest of path>, использование комбинации hdfs-dataset --format=avro приводит к тому, что файлы переходят в /xd/<NAME>/string

Я переопределил его без опции partitionPath, и поток развернулся.

У нас тут ошибка или я что-то не так делаю?


person StefanJ    schedule 18.11.2014    source источник
comment
Какова ваша топология XD? (один узел или отдельные администраторы/контейнеры). Есть ли что-нибудь в журнале(ах) контейнера? Какая версия XD?   -  person Gary Russell    schedule 18.11.2014
comment
Узел администратора, четыре контейнера. 1.0.0.ВЫПУСК. Только что услышал от наших разработчиков, что они тоже столкнулись с этим. Контейнеры находятся в контейнерах Docker; нужно выяснить, как извлечь журналы. :-(   -  person StefanJ    schedule 19.11.2014
comment
От коллеги: ...он должен уметь docker logs container_id вытягивать логи....   -  person Gary Russell    schedule 19.11.2014


Ответы (1)


Приемник hdfs-dataset предназначен для записи сериализованных POJO в HDFS. Для этого мы используем функциональные возможности Kite SDK kite-data, так что взгляните на этот проект, чтобы получить некоторые дополнительные сведения. Информация.

Выражения разделения для hdfs и hdfs-dataset различаются. Набор данных hdfs соответствует синтаксису Kite SDK, и вам необходимо указать поле POJO, в котором хранится значение вашего раздела. Для поля временной метки (длинного) выражение будет выглядеть следующим образом: dateFormat('timestamp', 'YM', 'yyyyMM') где временная метка — это имя поля, «ГМ» — это префикс, который добавляется к каталогу для раздела, например YM201411, а «ггггММ» — это нужный вам формат. для значения раздела. Если вам нужна структура каталогов год/месяц/день для раздела, вы можете использовать year('timestamp')/month('timestamp')/day('timestamp'). Дополнительные сведения см. в документах по многораздельным наборам данных по Kite SDK.

Для вашего примера нет особого смысла добавлять разбиение, поскольку вы сохраняете простое строковое значение. Если вы добавите процессор для преобразования данных в POJO, тогда разделение будет иметь больше смысла, и у нас есть несколько примеров в документы XD.

person Thomas Risberg    schedule 20.11.2014