Spring XD:分区路径和hdfs-dataset可以共存吗?

时间:2014-11-18 19:06:32

标签: spring-xd

我使用新的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选项重新定义它,并且部署了流。

我们这里有错误,或者我做错了什么?

1 个答案:

答案 0 :(得分:1)

hdfs-dataset接收器用于将序列化POJO写入HDFS。我们使用Kite SDK风筝数据功能,因此请查看该项目以获取更多信息。

hdfs和hdfs-dataset的分区表达式不同。 hdfs-dataset遵循Kite SDK语法,您需要指定存储分区值的POJO字段。对于时间戳(长)字段,表达式如下所示:dateFormat('timestamp', 'YM', 'yyyyMM')其中timestamp是字段的名称,&#39; YM&#39;是添加到分区目录的前缀,如YM201411和&#39; yyyyMM&#39;是分区值所需的格式。如果您想要分区的年/月/日目录结构,可以使用year('timestamp')/month('timestamp')/day('timestamp')。在Kite SDK Partitioned Datasets docs中有更多的报道。

对于您的示例,添加分区没有多大意义,因为您持久化了一个简单的String值。如果你确实添加了一个处理器来将数据转换为POJO,那么分区更有意义,我们在XD docs中有一些例子。