Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cassandra/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
清管器&x2B;已超过Cassandra消息长度_Cassandra_Apache Pig_Thrift - Fatal编程技术网

清管器&x2B;已超过Cassandra消息长度

清管器&x2B;已超过Cassandra消息长度,cassandra,apache-pig,thrift,Cassandra,Apache Pig,Thrift,我有一个Cassandra数据库,分为多个节点。使用Pig查询时,由Pig创建的mapreduce作业在hadoop节点上“崩溃”,但出现以下异常: 2013-03-18 00:57:19,374 WARN org.apache.hadoop.mapred.Child: Error running child java.lang.RuntimeException: org.apache.thrift.TException: Message length exceeded: 674

我有一个Cassandra数据库,分为多个节点。使用Pig查询时,由Pig创建的mapreduce作业在hadoop节点上“崩溃”,但出现以下异常:

2013-03-18 00:57:19,374 WARN org.apache.hadoop.mapred.Child: Error running child java.lang.RuntimeException: org.apache.thrift.TException: Message length exceeded: 674 at org.apache.cassandra.hadoop.ColumnFamilyRecordReader$StaticRowIterator.maybeInit(ColumnFamilyRecordReader.java:384) at org.apache.cassandra.hadoop.ColumnFamilyRecordReader$StaticRowIterator.computeNext(ColumnFamilyRecordReader.java:390) at org.apache.cassandra.hadoop.ColumnFamilyRecordReader$StaticRowIterator.computeNext(ColumnFamilyRecordReader.java:313) at com.google.common.collect.AbstractIterator.tryToComputeNext(AbstractIterator.java:143) at com.google.common.collect.AbstractIterator.hasNext(AbstractIterator.java:138) at org.apache.cassandra.hadoop.ColumnFamilyRecordReader.getProgress(ColumnFamilyRecordReader.java:103) at org.apache.pig.backend.hadoop.executionengine.mapReduceLayer.PigRecordReader.getProgress(PigRecordReader.java:169) at org.apache.hadoop.mapred.MapTask$NewTrackingRecordReader.getProgress(MapTask.java:514) at org.apache.hadoop.mapred.MapTask$NewTrackingRecordReader.nextKeyValue(MapTask.java:539) at org.apache.hadoop.mapreduce.MapContext.nextKeyValue(MapContext.java:67) at org.apache.hadoop.mapreduce.Mapper.run(Mapper.java:143) 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.Child$4.run(Child.java:255) at java.security.AccessController.doPrivileged(Native Method) at javax.security.auth.Subject.doAs(Subject.java:396) at org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1121) at org.apache.hadoop.mapred.Child.main(Child.java:249) Caused by: org.apache.thrift.TException: Message length exceeded: 674, readLength: 192 at org.apache.thrift.protocol.TBinaryProtocol.checkReadLength(TBinaryProtocol.java:393) at org.apache.thrift.protocol.TBinaryProtocol.readBinary(TBinaryProtocol.java:363) at org.apache.cassandra.thrift.Column.read(Column.java:535) at org.apache.cassandra.thrift.ColumnOrSuperColumn.read(ColumnOrSuperColumn.java:507) at org.apache.cassandra.thrift.KeySlice.read(KeySlice.java:408) at org.apache.cassandra.thrift.Cassandra$get_range_slices_result.read(Cassandra.java:12905) at org.apache.thrift.TServiceClient.receiveBase(TServiceClient.java:78) at org.apache.cassandra.thrift.Cassandra$Client.recv_get_range_slices(Cassandra.java:734) at org.apache.cassandra.thrift.Cassandra$Client.get_range_slices(Cassandra.java:718) at org.apache.cassandra.hadoop.ColumnFamilyRecordReader$StaticRowIterator.maybeInit(ColumnFamilyRecordReader.java:346) ... 17 more 你为什么要问57343的限制?57343以下的任何数字都会使清管器作业成功完成,大于等于57343的任何数字都会使清管器作业崩溃。Cassandra附带的Pig示例也存在相同的异常。 此外,在Cassandra中使用较小的数据集可以让Pig成功地完成任务

我发现了一些类似的错误,Thrift抱怨消息长度,但通常情况下,这是在超过cassandra.yaml中指定的最大消息长度时发生的。在本例中,cassandra.yaml中的消息长度设置为64MB,以测试它是否有帮助,但仍然发生了相同的异常。此外,异常声明消息的长度太长,即使在异常中声明消息本身在这种情况下仅为674字节

我尝试的是:

  • 增加节约信息的最大长度,单位为mb
    节约成本成本成本成本成本成本成本成本成本成本成本成本成本成本成本成本成本成本成本成本成本成本成本成本成本成本成本成本成本成本成本成本成本成本成本成本成本成本成本成本成本成本成本成本成本成本成本成本成本成本成本成本成本成本成本成本成本成本成本成本成本成本成本成本成本成本成本成本成本成本成本成本成本成本成本成本成本成本成本
  • 重建储蓄罐
  • 删除Cassandra键空间,然后重新填充它
设置:

  • Hadoop 1.0.4
  • 卡桑德拉1.2.2
  • 猪0.11.0
TL;DR Pig+Cassandra在较大的数据集上崩溃(
org.apache.thrift.TException:消息长度超过674
)。较小的数据集或较大数据集的较小子集可以正常工作

编辑
卡桑德拉日志显示没有错误。它根据作业的请求提供切片,而当Cassandra执行此操作时,作业将终止。

如果此列族使用宽行或有许多列,则可能需要尝试传递widerows选项

set cassandra.input.widerows true;
data = load 'cassandra://[keyspace here]/[cf here]/?widerows=true' 
            using org.apache.cassandra.hadoop.pig.CassandraStorage();

ConfigHelper.setThriftMaxMessageLengthInMb();
set cassandra.input.widerows true;
data = load 'cassandra://[keyspace here]/[cf here]/?widerows=true' 
            using org.apache.cassandra.hadoop.pig.CassandraStorage();