2015-11-04 30 views
5

当试图启动我的群集的主节点,只是从1.5升级到2.0(是的,这是一个大的跳跃),我得到这个错误日志后:Elasticsearch - 映射冲突错误升级,从1.5到2.0

[2015-11-03 18:15:10,948][ERROR][gateway     ] [mon-01] failed to read local state, exiting... 
java.lang.IllegalStateException: unable to upgrade the mappings for the index [logstash-2015.10.18], reason: [Mapper for [timestamp] conflicts with existing mapping in other types: 
[mapper [timestamp] cannot be changed from type [date] to [string]]] 

不幸的是,我没有在现场或在现场的相关分析仪配置的详细描述,但正如它的名字的状态,这是从logstash时间戳,所以它应该看起来像下列操作之一:

  • “dd/MMM/yyyy:HH:mm:ss Z”
  • “YYYY-MM-DD HH:MM:SS”
  • “HH:MM:SS”
  • “YYYY-MM-DD HH:MM:SS,SSS ZZ”
  • “YYYY-MM-DD HH:MM:SS,SSSZZ”
  • “YYYY-MM-DD HH:MM:SS,SSS”

日志与此结束:

[2015-11-03 18:15:11,383][ERROR][bootstrap    ] Guice Exception: java.lang.IllegalStateException: unable to upgrade the mappings for the index [logstash-2015.10.18], reason: [Mapper for [timestamp] conflicts with existing mapping in other types: 
[mapper [timestamp] cannot be changed from type [date] to [string]]] 
Likely root cause: java.lang.IllegalArgumentException: Mapper for [timestamp] conflicts with existing mapping in other types: 
[mapper [timestamp] cannot be changed from type [date] to [string]] 
    at org.elasticsearch.index.mapper.FieldTypeLookup.checkCompatibility(FieldTypeLookup.java:117) 
    at org.elasticsearch.index.mapper.MapperService.checkNewMappersCompatibility(MapperService.java:345) 
    at org.elasticsearch.index.mapper.MapperService.merge(MapperService.java:296) 
    at org.elasticsearch.index.mapper.MapperService.merge(MapperService.java:242) 
    at org.elasticsearch.cluster.metadata.MetaDataIndexUpgradeService.checkMappingsCompatibility(MetaDataIndexUpgradeService.java:329) 
    at org.elasticsearch.cluster.metadata.MetaDataIndexUpgradeService.upgradeIndexMetaData(MetaDataIndexUpgradeService.java:112) 
    at org.elasticsearch.gateway.GatewayMetaState.pre20Upgrade(GatewayMetaState.java:226) 
    at org.elasticsearch.gateway.GatewayMetaState.<init>(GatewayMetaState.java:85) 
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) 
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:57) 
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) 
    at java.lang.reflect.Constructor.newInstance(Constructor.java:526) 
    at <<<guice>>> 
    at org.elasticsearch.node.Node.<init>(Node.java:198) 
    at org.elasticsearch.node.NodeBuilder.build(NodeBuilder.java:145) 
    at org.elasticsearch.bootstrap.Bootstrap.setup(Bootstrap.java:170) 
    at org.elasticsearch.bootstrap.Bootstrap.init(Bootstrap.java:270) 
    at org.elasticsearch.bootstrap.Elasticsearch.main(Elasticsearch.java:35) 

和节点关闭。 。

我已经仔细阅读了#13169#13345的问题,但这些都没有帮助我,节点仍然无法启动。

我知道changing the mappings在ES启动时很容易,但我有点困在这里。

有什么想法?

回答

5

从Elasticsearch开发,它看起来像我的数据有问题,而不是在ES本身:https://github.com/elastic/elasticsearch/issues/14491

您logstash - 2015年10月18日指数已经被映射 作为字符串上一个时间戳字段一种类型,另一种类型是 ,这是elasticsearch无法应对的。在elasticsearch 1.x 这个问题将是沉默的,并且只有在尝试对字段进行搜索/排序/聚合时才会跳闸。在Elasticsearch 2.0中,我们更主动地检测到 这些不一致。

明确的答案就在这里:https://www.elastic.co/blog/great-mapping-refactoring

您将无法与冲突的现场升级指数 映射Elasticsearch V2.0。

如果不再需要这些指数的数据,那么你可以简单地 删除索引,否则你将需要与 正确映射重新索引数据。

这个工具可以帮助提取数据并重新导入:https://github.com/taskrabbit/elasticsearch-dump

+0

这是一个必须具备的工具:https://github.com/elastic/elasticsearch-migration – chilladx