1

我使用新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,并部署了流。

我们这里有错误,还是我做错了什么?

4

1 回答 1

1

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

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

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

于 2014-11-20T20:56:52.980 回答