0

Cassandra 1.1.6、Pig 0.10.0、および Hadoop 1.1.0 を使用して、cassandra の examples/pig にある pig_cassandra サンプル スクリプトを正常に実行できます。

しかし、私が変わるとき

rows = LOAD 'cassandra://PigTest/SomeApp' USING CassandraStorage();

に:

rows = LOAD 'cassandra://PigTest/SomeApp?widerows=true' USING CassandraStorage();

次のエラーが表示されます。

java.lang.IndexOutOfBoundsException: Index: 8, Size: 2
    at java.util.ArrayList.rangeCheck(ArrayList.java:604)
    at java.util.ArrayList.get(ArrayList.java:382)
    at org.apache.pig.data.DefaultTuple.get(DefaultTuple.java:156)
    at org.apache.pig.backend.hadoop.executionengine.physicalLayer.expressionOperators.POProject.processInputBag(POProject.java:579)
    at org.apache.pig.backend.hadoop.executionengine.physicalLayer.expressionOperators.POProject.getNext(POProject.java:248)
    at org.apache.pig.backend.hadoop.executionengine.physicalLayer.PhysicalOperator.getNext(PhysicalOperator.java:316)
    at org.apache.pig.backend.hadoop.executionengine.physicalLayer.relationalOperators.POForEach.processPlan(POForEach.java:332)
    at org.apache.pig.backend.hadoop.executionengine.physicalLayer.relationalOperators.POForEach.getNext(POForEach.java:284)
    at org.apache.pig.backend.hadoop.executionengine.physicalLayer.PhysicalOperator.processInput(PhysicalOperator.java:290)
    at org.apache.pig.backend.hadoop.executionengine.physicalLayer.relationalOperators.POForEach.getNext(POForEach.java:233)
    at org.apache.pig.backend.hadoop.executionengine.physicalLayer.PhysicalOperator.processInput(PhysicalOperator.java:290)
    at org.apache.pig.backend.hadoop.executionengine.physicalLayer.relationalOperators.POPreCombinerLocalRearrange.getNext(POPreCombinerLocalRearrange.java:126)
    at org.apache.pig.backend.hadoop.executionengine.physicalLayer.PhysicalOperator.processInput(PhysicalOperator.java:290)
    at org.apache.pig.backend.hadoop.executionengine.physicalLayer.relationalOperators.POForEach.getNext(POForEach.java:233)
    at org.apache.pig.backend.hadoop.executionengine.physicalLayer.PhysicalOperator.processInput(PhysicalOperator.java:290)
    at org.apache.pig.backend.hadoop.executionengine.physicalLayer.relationalOperators.POLocalRearrange.getNext(POLocalRearrange.java:256)
    at org.apache.pig.backend.hadoop.executionengine.mapReduceLayer.PigGenericMapBase.runPipeline(PigGenericMapBase.java:271)
    at org.apache.pig.backend.hadoop.executionengine.mapReduceLayer.PigGenericMapBase.map(PigGenericMapBase.java:266)
    at org.apache.pig.backend.hadoop.executionengine.mapReduceLayer.PigGenericMapBase.map(PigGenericMapBase.java:64)
    at org.apache.hadoop.mapreduce.Mapper.run(Mapper.java:144)
    at org.apache.hadoop.mapred.MapTask.runNewMapper(MapTask.java:764)
    at org.apache.hadoop.mapred.MapTask.run(MapTask.java:370)                                                                                                                                                                                                                                                                                                           
    at org.apache.hadoop.mapred.LocalJobRunner$Job.run(LocalJobRunner.java:212)

これは、ローカル モードと mapreduce モードの両方で実行している場合、または PIG_WIDEROW_INPUT=true に設定した場合に発生します。

次の Pig Latin スクリプトは、「widerows=true」パラメーターが存在すると失敗します。

rows = LOAD 'cassandra://PigTest/SomeApp?widerows=true' USING CassandraStorage();
cols = FOREACH rows GENERATE flatten(columns.name);
DUMP cols;

ワイド行入力を使用する場合、SomeApp 列ファミリーの静的列を読み取らないと、これを超えることはできないようです。他の列ファミリーにも同じ問題があります。

4

1 に答える 1

0

同様の問題がありました。これは、後の 1.1.x リリースで修正された get_paged_slices のバグが原因である可能性があります。解決策は、Cassandra を1.1.8 1.1.9にアップグレードすることです。

見る:

  • CASSANDRA-4919:StorageProxy.getRangeSlice が誤った数の列を返すことがある
  • CASSANDRA-4816 : get_paged_slice が壊れている
  • CASSANDRA-5098 : CassandraStorage が wi​​derow モードで名前をデコードしない
于 2012-12-31T20:39:15.193 に答える