Details
-
Improvement
-
Status: Closed
-
Major
-
Resolution: Incomplete
-
0.20.1
-
None
-
None
Description
The following stack trace is seen in our hadoop log:
java.lang.IllegalArgumentException: Row > 32767
at org.apache.hadoop.hbase.KeyValue.createByteArray(KeyValue.java:437)
at org.apache.hadoop.hbase.KeyValue.(KeyValue.java:405)
at org.apache.hadoop.hbase.KeyValue.(KeyValue.java:374)
at org.apache.hadoop.hbase.KeyValue.(KeyValue.java:353)
at org.apache.hadoop.hbase.client.Put.add(Put.java:137)
at org.apache.hadoop.hbase.client.Put.add(Put.java:108)
at org.apache.nutch.scoring.webgraph.ScoreUpdater$ScoreUpdaterReducer.reduce(ScoreUpdater.java:170)
at org.apache.nutch.scoring.webgraph.ScoreUpdater$ScoreUpdaterReducer.reduce(ScoreUpdater.java:127)
at org.apache.hadoop.mapreduce.Reducer.run(Reducer.java:174)
at org.apache.hadoop.mapred.ReduceTask.runNewReducer(ReduceTask.java:563)
at org.apache.hadoop.mapred.ReduceTask.run(ReduceTask.java:408)
at org.apache.hadoop.mapred.Child.main(Child.java:170)
Bytes.toBytes(Float.valueOf(score).toString()) may return an array longer than 32767 bytes.
We should enhance Bytes.toBytes() to include length limit:
public static byte[] toBytes(String s, int length)
String.getBytes() doesn't have length limit