2013-12-13 19 views
1

我正在试验DataStax Enterprise Search。我有一个双节点集群,我使用Solr控制台Dataimport功能导入数据。根据“配置Solr”doc(http://www.datastax.com/docs/datastax_enterprise3.2/solutions/dse_search_schema#configuring-solr),我禁用了虚拟节点(num_tokens = 1,位于cassandra.yaml中)。我的简化架构如下:将数据导入DSE搜索群集后负载分布不均匀

<schema name="spatial" version="1.1"> 

<types> 
    <fieldType name="string" class="solr.StrField" omitNorms="true"/> 
    <fieldType name="boolean" class="solr.BoolField" omitNorms="true"/> 
    <fieldType name="sint" class="solr.SortableIntField" sortMissingLast="true" omitNorms="true"/> 
    <fieldType name="tint" class="solr.TrieIntField" precisionStep="8" omitNorms="true" positionIncrementGap="0"/> 
    <fieldType name="tfloat" class="solr.TrieFloatField" omitNorms="true"/> 
    <fieldType name="tdouble" class="solr.TrieDoubleField" precisionStep="8" omitNorms="true" positionIncrementGap="0"/> 
    <fieldType name="tdate" class="solr.TrieDateField" omitNorms="true"/> 
    <fieldType name="binary" class="solr.BinaryField"/> 

    <!-- A specialized field for geospatial search. If indexed, this fieldType must not be multivalued. --> 
    <fieldType name="location" class="solr.LatLonType" subFieldSuffix="_coordinate"/> 
</types> 

    <fields> 
     <field name="id" type="string" indexed="true" stored="true"/> 
     <field name="objectid" type="tint" indexed="true" stored="true" required="true" multiValued="false" /> 
     <field name="guwi" type="string" indexed="true" stored="true" required="false" multiValued="false" /> 
     <field name="country" type="string" indexed="true" stored="true" required="false" multiValued="false" /> 
     <field name="region" type="string" indexed="true" stored="true" required="false" multiValued="false" /> 
     <field name="latlong" type="location" indexed="true" stored="false"/> 
    </fields> 
    <defaultSearchField>objectid</defaultSearchField> 
    <uniqueKey>id</uniqueKey> 
</schema> 

数据导入成功。但是,当我运行“nodetool status”时,我可以看到负载不是均匀分布在我的两个节点上,而是全部集中在用来执行数据导入的节点上。 我试图将uniqueKey修改为一个组合键,如(id,latlong)或甚至只是latlong,但它似乎并没有改变负载分布。我错过了什么吗?

感谢, 莱昂

+2

您可以从 'nodetool状态yourkeyspace' 命令粘贴到输出? – RussS

+0

数据中心:数据中心1 ======================= 状态=上/下 |/State = Normal/Leaving/Joining/Moving - 地址负载旗下拥有(有效)主机ID令牌机架 联合国10.30.161.137 66.34 MB 93.3%7e4bac03-feb9-42e8-AC9A-bf48be32b36a -8800219472428229728 RACK1 联合国10.157.8.94 52.76 KB 6.7%135bfc01-a3d3-4a2b-a681-7667f1eabc47 -7564491331177403445 rack1 – Leon

回答

1

你的问题,因为在nodetool输出看到的,是两个节点有靠得太近令牌。因此,节点(10.30.161.137)负责令牌范围的94%。

这很可能是因为当您设置num_token = 1时,您没有设置初始标记值。当初始令牌未设置时,可能会分配不需要的值。

initial_token(缺省:禁用)用在单节点每令牌 架构,其中一个节点拥有该 环空间恰好一个连续范围。如果您尚未指定num_tokens或将其设置为 默认值1,则应始终在 首次设置生产群集时以及在添加 容量时指定此参数。有关更多信息,请参阅Cassandra 1.1节点和群集配置文档中的此参数。

Configuring Cassandra

令牌计算器可以在这里 Token Generator

+0

好的,谢谢。我为2个节点运行令牌生成器并更新.yaml文件。现在我越来越org.apache.cassandra.exceptions.ConfigurationException:对于输入字符串: “85070591730234615865843651857942052864” \t \t在org.apache.cassandra.dht.Murmur3Partitioner $ 1.validate(Murmur3Partitioner.java:182)... – Leon

+0

默认Cassandra的分区程序现在是Murmur3分区程序,它具有与以前使用的RandomPartitioner不同的范围。 (0-> 2^127-1 vs -2^63 - > 2^63)我在用分区器生成标记的答案中放了一个链接。 – RussS

+0

太棒了!这样可行。非常感谢!没有你的帮助,我无法做到这一点。顺便说一句,如果一个人保持num_tokens = 256在文档中建议的其他地方,试图导入数据使用Solr dataimporter只是挂起节点。所有这些应该记录在Datastax文档的某处... – Leon