2014-05-16 47 views
1

我使用猪加载使用CqlStorage从卡桑德拉数据。我有4个数据节点,每个节点可以有7个映射器,在Cassandra中有大约3000万个数据。当我运行像这样增加映射器在猪

LOAD 'cql://keyspace/columnfamily' using CqlStorage需要27名映射器来运行。

但是,如果我给where子句中负载的功能就像

LOAD 'cql://keyspace/columnfamily?where_clause=id%3D100' using CqlStorage总是需要一个映射。

任何一个可以帮助我从你在那里同样的地图输入条款只会是一个关键的增长映射

+0

[在Hadoop中更改文件拆分大小]的可能重复(http://stackoverflow.com/questions/9678180/change-file-split-size-in-hadoop) –

+0

这是专门针对具有where子句的CqlStorage,尽管我试图改变分割大小,但仍然只有一个映射器。 **注:只有在我包括where条款的情况下。** – Shri

回答

0

它看起来,这将是为什么你只能得到一个映射。 Hadoop将根据输入键的数量分配映射器。如果您只有一个输入键,则其他映射器将不会执行任何操作。

底线是,如果你在WHERE子句中指定分区键,你会得到一个映射器(因为这是它的方式被分配)。根据我的评论,我认为你不仅仅为一名学生做分析,所以你没有理由指定分区密钥。您似乎也没有任何对二级索引有意义的列。所以我不确定为什么你甚至有一个where子句。

看起来从你的数据模型一样,你必须在映射所有的数据获得总成绩与学生和时间范围的组合。有可能您可以更改为时间序列数据模型并在where子句中成功筛选,但您当前的模型不支持这一点。

+0

可能是这种情况。你可以请我建议我可以使用哪种API来做到这一点,我的意思是通过过滤某些条件从卡桑德拉读取数据,这样我就不会给猪多少负担。 – Shri

+0

你能提供一些关于你想要做什么的细节吗? –

+0

感谢您的回复。我想从Cassandra加载数据并通过猪进行处理并将其转储到HDFS。为此,我使用CqlStorage。但在这里我不想从Cassandra加载所有的数据,我的标准就像加载一个月或两个月的数据,这样我就不会给猪处理重负载,但在CqlStorage中有过滤器(where子句)的样子像不工作https://issues.apache.org/jira/browse/CASSANDRA-6151。所以我要求提供任何其他解决方案的建议。 – Shri